summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/gtkapplication-quartz.c68
1 files changed, 21 insertions, 47 deletions
diff --git a/gtk/gtkapplication-quartz.c b/gtk/gtkapplication-quartz.c
index 5472c20641..f4506ec441 100644
--- a/gtk/gtkapplication-quartz.c
+++ b/gtk/gtkapplication-quartz.c
@@ -148,35 +148,11 @@ static GActionEntry gtk_application_impl_quartz_actions[] = {
};
static void
-gtk_application_impl_quartz_set_app_menu (GtkApplicationImpl *impl,
- GMenuModel *app_menu)
-{
- GtkApplicationImplQuartz *quartz = (GtkApplicationImplQuartz *) impl;
-
- /* If there are any items at all, then the first one is the app menu */
- if (g_menu_model_get_n_items (G_MENU_MODEL (quartz->combined)))
- g_menu_remove (quartz->combined, 0);
-
- if (app_menu)
- g_menu_prepend_submenu (quartz->combined, "Application", app_menu);
- else
- {
- GMenu *empty;
-
- /* We must preserve the rule that index 0 is the app menu */
- empty = g_menu_new ();
- g_menu_prepend_submenu (quartz->combined, "Application", G_MENU_MODEL (empty));
- g_object_unref (empty);
- }
-}
-
-static void
gtk_application_impl_quartz_startup (GtkApplicationImpl *impl,
gboolean register_session)
{
GtkApplicationImplQuartz *quartz = (GtkApplicationImplQuartz *) impl;
GSimpleActionGroup *gtkinternal;
- GMenuModel *app_menu;
const char *pref_accel[] = {"<Control>comma", NULL};
const char *hide_others_accel[] = {"<Control><Alt>h", NULL};
const char *hide_accel[] = {"<Control>h", NULL};
@@ -205,25 +181,6 @@ gtk_application_impl_quartz_startup (GtkApplicationImpl *impl,
g_object_unref (gtkinternal);
/* now setup the menu */
- app_menu = g_object_get_data (G_OBJECT (impl), "APP_MENU");
- if (app_menu == NULL)
- {
- GtkBuilder *builder;
-
- /* If the user didn't fill in their own menu yet, add ours.
- *
- * The fact that we do this here ensures that we will always have the
- * app menu at index 0 in 'combined'.
- */
- builder = gtk_builder_new_from_resource ("/org/gtk/libgtk/ui/gtkapplication-quartz.ui");
- app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu"));
- g_object_set_data_full (G_OBJECT (impl), "APP_DATA", g_object_ref (app_menu), g_object_unref);
- g_object_unref (builder);
- }
- else
- gtk_application_impl_quartz_set_app_menu (impl, app_menu);
-
- /* This may or may not add an item to 'combined' */
gtk_application_impl_set_menubar (impl, gtk_application_get_menubar (impl->application));
/* OK. Now put it in the menu. */
@@ -294,12 +251,30 @@ gtk_application_impl_quartz_set_menubar (GtkApplicationImpl *impl,
{
GtkApplicationImplQuartz *quartz = (GtkApplicationImplQuartz *) impl;
- /* If we have the menubar, it is a section at index '1' */
- if (g_menu_model_get_n_items (G_MENU_MODEL (quartz->combined)) > 1)
- g_menu_remove (quartz->combined, 1);
+ /* If we have the menubar, it is a section at index '0' */
+ if (g_menu_model_get_n_items (G_MENU_MODEL (quartz->combined)))
+ g_menu_remove (quartz->combined, 0);
if (menubar)
g_menu_append_section (quartz->combined, NULL, menubar);
+ else
+ {
+ // Ensure that we will always have one menu.
+ char app_menu_key[] = "APP_MENU";
+ GMenuModel *app_menu = g_object_get_data (G_OBJECT (impl), app_menu_key);
+ if (app_menu == NULL)
+ {
+ GtkBuilder *builder;
+
+ // If the user didn't fill in their own menu yet, add ours.
+ builder = gtk_builder_new_from_resource ("/org/gtk/libgtk/ui/gtkapplication-quartz.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu"));
+ g_object_set_data_full (G_OBJECT (impl), app_menu_key, g_object_ref (app_menu), g_object_unref);
+ g_object_unref (builder);
+ }
+
+ g_menu_append_submenu (quartz->combined, "Application", app_menu);
+ }
}
static guint
@@ -380,7 +355,6 @@ gtk_application_impl_quartz_class_init (GtkApplicationImplClass *class)
class->startup = gtk_application_impl_quartz_startup;
class->shutdown = gtk_application_impl_quartz_shutdown;
class->active_window_changed = gtk_application_impl_quartz_active_window_changed;
- class->set_app_menu = gtk_application_impl_quartz_set_app_menu;
class->set_menubar = gtk_application_impl_quartz_set_menubar;
class->inhibit = gtk_application_impl_quartz_inhibit;
class->uninhibit = gtk_application_impl_quartz_uninhibit;