Rearrange HildonAppMenu items just once in gtk_widget_show_all/hide_all
authorAlberto Garcia <agarcia@igalia.com>
Tue, 21 Apr 2009 17:54:09 +0000 (19:54 +0200)
committerAlberto Garcia <agarcia@igalia.com>
Mon, 25 May 2009 15:39:38 +0000 (17:39 +0200)
* hildon/hildon-app-menu-private.h
* hildon/hildon-app-menu.c (item_visibility_changed)
(filter_visibility_changed, hildon_app_menu_show_all)
(hildon_app_menu_hide_all, hildon_app_menu_init):
Rearrange items just once when gtk_widget_show_all()/hide_all()
are used.

ChangeLog
hildon/hildon-app-menu-private.h
hildon/hildon-app-menu.c

index badf912..c41fc62 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2009-05-25  Alberto Garcia  <agarcia@igalia.com>
 
+       * hildon/hildon-app-menu-private.h
+       * hildon/hildon-app-menu.c (item_visibility_changed)
+       (filter_visibility_changed, hildon_app_menu_show_all)
+       (hildon_app_menu_hide_all, hildon_app_menu_init):
+       Rearrange items just once when gtk_widget_show_all()/hide_all()
+       are used.
+
+2009-05-25  Alberto Garcia  <agarcia@igalia.com>
+
        * hildon/hildon-app-menu.c
        (hildon_app_menu_insert, hildon_app_menu_add_filter):
        Don't call gtk_widget_show() on added items.
index dc9ba07..ce5f1ad 100644 (file)
@@ -33,6 +33,7 @@ struct                                          _HildonAppMenuPrivate
     GtkWindow *parent_window;
     GdkWindow *transfer_window;
     gboolean pressed_outside;
+    gboolean inhibit_repack;
     GList *buttons;
     GList *filters;
     guint columns;
index 1c9b3c4..7e838e4 100644 (file)
@@ -403,7 +403,8 @@ item_visibility_changed                         (GtkWidget     *item,
 {
     HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE (menu);
 
-    hildon_app_menu_repack_items (menu, g_list_index (priv->buttons, item));
+    if (! priv->inhibit_repack)
+        hildon_app_menu_repack_items (menu, g_list_index (priv->buttons, item));
 }
 
 static void
@@ -411,7 +412,10 @@ filter_visibility_changed                       (GtkWidget     *item,
                                                  GParamSpec    *arg1,
                                                  HildonAppMenu *menu)
 {
-    hildon_app_menu_repack_filters (menu);
+    HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE (menu);
+
+    if (! priv->inhibit_repack)
+        hildon_app_menu_repack_filters (menu);
 }
 
 static void
@@ -424,22 +428,38 @@ remove_item_from_list                           (GList    **list,
 static void
 hildon_app_menu_show_all                        (GtkWidget *widget)
 {
+    HildonAppMenu *menu = HILDON_APP_MENU (widget);
     HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE (widget);
 
+    priv->inhibit_repack = TRUE;
+
     /* Show children, but not self. */
     g_list_foreach (priv->buttons, (GFunc) gtk_widget_show_all, NULL);
     g_list_foreach (priv->filters, (GFunc) gtk_widget_show_all, NULL);
+
+    priv->inhibit_repack = FALSE;
+
+    hildon_app_menu_repack_items (menu, 0);
+    hildon_app_menu_repack_filters (menu);
 }
 
 
 static void
 hildon_app_menu_hide_all                        (GtkWidget *widget)
 {
+    HildonAppMenu *menu = HILDON_APP_MENU (widget);
     HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE (widget);
 
+    priv->inhibit_repack = TRUE;
+
     /* Hide children, but not self. */
     g_list_foreach (priv->buttons, (GFunc) gtk_widget_hide_all, NULL);
     g_list_foreach (priv->filters, (GFunc) gtk_widget_hide_all, NULL);
+
+    priv->inhibit_repack = FALSE;
+
+    hildon_app_menu_repack_items (menu, 0);
+    hildon_app_menu_repack_filters (menu);
 }
 
 /*
@@ -988,6 +1008,7 @@ hildon_app_menu_init                            (HildonAppMenu *menu)
     priv->parent_window = NULL;
     priv->transfer_window = NULL;
     priv->pressed_outside = FALSE;
+    priv->inhibit_repack = FALSE;
     priv->buttons = NULL;
     priv->filters = NULL;
     priv->columns = 2;