diff options
author | William Jon McCann <jmccann@redhat.com> | 2010-06-11 01:15:25 -0400 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2010-06-11 01:15:25 -0400 |
commit | bfdad3e13d429c7fae7d5793e0b1c2480ec6fda0 (patch) | |
tree | 2de5fdaa9577e650fa1a57196b2e3424f383c26d /gui | |
parent | 831fdac030cfede2aa7ff5b5c2a7283447333c85 (diff) | |
download | gdm-bfdad3e13d429c7fae7d5793e0b1c2480ec6fda0.tar.gz |
Queue updating separator visibility
instead of doing it each time
Diffstat (limited to 'gui')
-rw-r--r-- | gui/simple-greeter/gdm-chooser-widget.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/gui/simple-greeter/gdm-chooser-widget.c b/gui/simple-greeter/gdm-chooser-widget.c index 56c7422c..652da244 100644 --- a/gui/simple-greeter/gdm-chooser-widget.c +++ b/gui/simple-greeter/gdm-chooser-widget.c @@ -88,6 +88,7 @@ struct GdmChooserWidgetPrivate gint number_of_active_timers; guint update_idle_id; + guint update_separator_idle_id; guint update_cursor_idle_id; guint update_visibility_idle_id; guint update_items_idle_id; @@ -571,7 +572,7 @@ on_shrink_animation_step (GdmScrollableWidget *scrollable_widget, gtk_tree_path_free (active_row_path); } -static void +static gboolean update_separator_visibility (GdmChooserWidget *widget) { GtkTreePath *separator_path; @@ -583,7 +584,7 @@ update_separator_visibility (GdmChooserWidget *widget) separator_path = gtk_tree_row_reference_get_path (widget->priv->separator_row); if (separator_path == NULL) { - return; + goto out; } gtk_tree_model_get_iter (GTK_TREE_MODEL (widget->priv->list_store), @@ -601,6 +602,21 @@ update_separator_visibility (GdmChooserWidget *widget) &iter, CHOOSER_ITEM_IS_VISIBLE_COLUMN, is_visible, -1); + + out: + widget->priv->update_separator_idle_id = 0; + return FALSE; +} + +static void +queue_update_separator_visibility (GdmChooserWidget *widget) +{ + if (widget->priv->update_separator_idle_id == 0) { + g_debug ("GdmChooserWidget: queuing update separator visibility"); + + widget->priv->update_separator_idle_id = + g_idle_add ((GSourceFunc) update_separator_visibility, widget); + } } static gboolean @@ -705,6 +721,8 @@ set_inactive_items_visible (GdmChooserWidget *widget, GtkTreeIter active_item_iter; GtkTreeIter iter; + g_debug ("setting inactive items visible"); + active_item_id = get_active_item_id (widget, &active_item_iter); if (active_item_id == NULL) { g_debug ("GdmChooserWidget: No active item set"); @@ -744,7 +762,7 @@ set_inactive_items_visible (GdmChooserWidget *widget, g_free (active_item_id); - update_separator_visibility (widget); + queue_update_separator_visibility (widget); } static void @@ -760,7 +778,7 @@ on_shrink_animation_complete (GdmScrollableWidget *scrollable_widget, gtk_tree_view_set_enable_search (GTK_TREE_VIEW (widget->priv->items_view), FALSE); widget->priv->state = GDM_CHOOSER_WIDGET_STATE_SHRUNK; - update_separator_visibility (widget); + queue_update_separator_visibility (widget); if (widget->priv->emit_activated_after_resize_animation) { g_signal_emit (widget, signals[ACTIVATED], 0); @@ -1249,6 +1267,11 @@ gdm_chooser_widget_dispose (GObject *object) widget->priv->update_items_idle_id = 0; } + if (widget->priv->update_separator_idle_id > 0) { + g_source_remove (widget->priv->update_separator_idle_id); + widget->priv->update_separator_idle_id = 0; + } + if (widget->priv->update_visibility_idle_id > 0) { g_source_remove (widget->priv->update_visibility_idle_id); widget->priv->update_visibility_idle_id = 0; @@ -2154,7 +2177,7 @@ gdm_chooser_widget_update_item (GdmChooserWidget *widget, widget->priv->number_of_separated_rows--; widget->priv->number_of_normal_rows++; } - update_separator_visibility (widget); + queue_update_separator_visibility (widget); } gtk_list_store_set (widget->priv->list_store, @@ -2207,7 +2230,7 @@ gdm_chooser_widget_add_item (GdmChooserWidget *widget, } else { widget->priv->number_of_normal_rows++; } - update_separator_visibility (widget); + queue_update_separator_visibility (widget); if (in_use) { widget->priv->number_of_rows_with_status++; @@ -2280,7 +2303,7 @@ gdm_chooser_widget_remove_item (GdmChooserWidget *widget, } else { widget->priv->number_of_normal_rows--; } - update_separator_visibility (widget); + queue_update_separator_visibility (widget); gtk_list_store_remove (widget->priv->list_store, &iter); |