aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-task-bar.c
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2001-09-20 05:13:08 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2001-09-20 05:13:08 +0800
commit899db1fe37a9b8d229a2dc67c9b09ccb48a43521 (patch)
treefd712715ea8b801d0821602f9f175220218fc16c /shell/e-task-bar.c
parent28b4ae90d788b6bbce25ef7b887c96dfa952e5fb (diff)
downloadgsoc2013-evolution-899db1fe37a9b8d229a2dc67c9b09ccb48a43521.tar.gz
gsoc2013-evolution-899db1fe37a9b8d229a2dc67c9b09ccb48a43521.tar.zst
gsoc2013-evolution-899db1fe37a9b8d229a2dc67c9b09ccb48a43521.zip
Removed globals `activity_client', `progress'. (timeout_callback_3): Get
* evolution-test-component.c: Removed globals `activity_client', `progress'. (timeout_callback_3): Get the activity client from @data. (timeout_callback_2): Likewise here. Pass the activity client as the user data pointer for `gtk_timeout_add()'. Put the progress count in a "my_progress" GtkObject data key. (timeout_callback_1): Pass the newly created EActivityClient as the user data pointer for `gtk_timeout_add()'. Also, dispatch itself again with a random timeout delay, for a maximum of NUM_ACTIVITES times. Initialize the "my_progress" GtkObject data to be -1. * e-activity-handler.c: New member `component_id' in `ActivityInfo'. (activity_info_new): New arg @component_id. Init the `component_id' member accordingly. (activity_info_free): Free the `component_id' member. (impl_operationStarted): Pass the component_id to `activity_info_new()'. (task_widget_new_from_activity_info): Pass the component_id to the activity_info. * e-task-widget.c: New member `component_id' in `ETaskWidgetPrivate'. (impl_destroy): Free it. (init): Init to NULL. Also init all the other members to NULL as well. (e_task_widget_construct): New arg @component_id. Assign ->component_id to match it. (e_task_widget_new): New arg @component_id here as well. Pass it over to `e_task_widget_construct()'. (e_task_widget_get_component_id): New. svn path=/trunk/; revision=12988
Diffstat (limited to 'shell/e-task-bar.c')
-rw-r--r--shell/e-task-bar.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/shell/e-task-bar.c b/shell/e-task-bar.c
index 2c89b016f3..057fe4cc03 100644
--- a/shell/e-task-bar.c
+++ b/shell/e-task-bar.c
@@ -34,6 +34,54 @@
static GtkHBoxClass *parent_class = NULL;
+/* WARNING: Ugly hack starts here. */
+
+#define MAX_ACTIVITIES_PER_COMPONENT 2
+
+static void
+reduce_displayed_activities_per_component (ETaskBar *task_bar)
+{
+ GHashTable *component_ids_hash;
+ GtkBox *box;
+ GList *p;
+
+ component_ids_hash = g_hash_table_new (g_str_hash, g_str_equal);
+
+ box = GTK_BOX (task_bar);
+
+ for (p = box->children; p != NULL; p = p->next) {
+ GtkBoxChild *child;
+ const char *component_id;
+ void *hash_item;
+
+ child = (GtkBoxChild *) p->data;
+ component_id = e_task_widget_get_component_id (E_TASK_WIDGET (child->widget));
+
+ hash_item = g_hash_table_lookup (component_ids_hash, component_id);
+
+ if (hash_item == NULL) {
+ gtk_widget_show (child->widget);
+ g_hash_table_insert (component_ids_hash, (void *) component_id, GINT_TO_POINTER (1));
+ } else {
+ int num_items;
+
+ num_items = GPOINTER_TO_INT (hash_item);
+ g_assert (num_items <= MAX_ACTIVITIES_PER_COMPONENT);
+
+ if (num_items == MAX_ACTIVITIES_PER_COMPONENT) {
+ gtk_widget_hide (child->widget);
+ } else {
+ num_items ++;
+ gtk_widget_show (child->widget);
+ g_hash_table_insert (component_ids_hash, (void *) component_id, GINT_TO_POINTER (num_items));
+ }
+ }
+ }
+
+ g_hash_table_destroy (component_ids_hash);
+}
+
+
/* GtkObject methods. */
static void
@@ -119,6 +167,8 @@ e_task_bar_prepend_task (ETaskBar *task_bar,
gtk_widget_map (GTK_WIDGET (task_widget));
gtk_widget_queue_resize (GTK_WIDGET (task_widget));
}
+
+ reduce_displayed_activities_per_component (task_bar);
}
void
@@ -133,6 +183,8 @@ e_task_bar_remove_task (ETaskBar *task_bar,
task_widget = e_task_bar_get_task_widget (task_bar, n);
gtk_widget_destroy (GTK_WIDGET (task_widget));
+
+ reduce_displayed_activities_per_component (task_bar);
}
ETaskWidget *