2009-09-10 Claudio Saavedra <csaavedra@igalia.com>
+ 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 <csaavedra@igalia.com>
+
Add HildonAppMenu::changed signal
* hildon/hildon-app-menu.c: (hildon_app_menu_insert),
}
}
+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
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);
if (accel_group != NULL)
hildon_window_add_accel_group (self, accel_group);
}
+
+ hildon_window_update_menu_flag (self, FALSE);
}
/**
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);
}
/**