From: Claudio Saavedra Date: Fri, 11 Sep 2009 17:17:09 +0000 (+0300) Subject: Do not set the menu flag in a window when a menu is empty X-Git-Tag: 2.2.0-rc5~5 X-Git-Url: https://vcs.maemo.org/git/?p=hildon;a=commitdiff_plain;h=a9196682cadd78ab37c8a32a45dc9d687e2f9c2f Do not set the menu flag in a window when a menu is empty * hildon/hildon-window.c: (hildon_window_update_menu_flag), (on_menu_changed), (on_menu_changedhildon_window_set_main_menu), (on_menu_changed), (hildon_window_set_main_menu): Update on menu changes by using the HildonAppMenu::changed signal. --- diff --git a/ChangeLog b/ChangeLog index d3cd7bd..0cc08d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2009-09-10 Claudio Saavedra + Do not set the menu flag in a window when a menu is empty + + * hildon/hildon-window.c: (hildon_window_update_menu_flag), + (on_menu_changed), (on_menu_changedhildon_window_set_main_menu), + (on_menu_changed), (hildon_window_set_main_menu): Update on menu + changes by using the HildonAppMenu::changed signal. + +2009-09-10 Claudio Saavedra + Add HildonAppMenu::changed signal * hildon/hildon-app-menu.c: (hildon_app_menu_insert), diff --git a/hildon/hildon-window.c b/hildon/hildon-window.c index 990a2bd..bd84c32 100644 --- a/hildon/hildon-window.c +++ b/hildon/hildon-window.c @@ -1343,6 +1343,40 @@ hildon_window_is_topmost_notify (HildonWindow *window) } } +static void +hildon_window_update_menu_flag (HildonWindow *self, + gboolean is_app_menu) +{ + HildonWindowPrivate *priv; + + priv = HILDON_WINDOW_GET_PRIVATE (self); + + if (is_app_menu) + { + /* Change the menu flag only if there is no program or common + application menu. */ + if (!priv->program || + !hildon_program_get_common_app_menu (priv->program)) + { + hildon_window_set_menu_flag (self, priv->app_menu != NULL && + hildon_app_menu_has_visible_children (priv->app_menu)); + } + } else { + if (!priv->program || !hildon_program_get_common_menu (priv->program)) + { + hildon_window_set_menu_flag (self, priv->menu != NULL + && gtk_container_get_children (GTK_CONTAINER (priv->menu))); + } + } +} + +static void +on_menu_changed (HildonAppMenu *menu, + HildonWindow *window) +{ + hildon_window_update_menu_flag (window, TRUE); +} + /* * Sets the program to which the window belongs. This should only be called * by hildon_program_add_window @@ -2003,8 +2037,6 @@ hildon_window_set_main_menu (HildonWindow* self, priv = HILDON_WINDOW_GET_PRIVATE (self); - hildon_window_set_menu_flag (self, menu != NULL); - if (priv->menu != NULL) { accel_group = gtk_menu_get_accel_group (priv->menu); @@ -2026,6 +2058,8 @@ hildon_window_set_main_menu (HildonWindow* self, if (accel_group != NULL) hildon_window_add_accel_group (self, accel_group); } + + hildon_window_update_menu_flag (self, FALSE); } /** @@ -2110,16 +2144,22 @@ hildon_window_set_app_menu (HildonWindow *self, old_menu = priv->app_menu; - hildon_window_set_menu_flag (self, menu != NULL); - /* Add new menu */ priv->app_menu = menu; if (menu) + { g_object_ref_sink (menu); + g_signal_connect (menu, "changed", G_CALLBACK (on_menu_changed), self); + } /* Unref old menu */ if (old_menu) + { + g_signal_handlers_disconnect_by_func (old_menu, on_menu_changed, self); g_object_unref (old_menu); + } + + hildon_window_update_menu_flag (self, TRUE); } /**