static void gtk_application_window_init (GtkApplicationWindow *window) { window->priv = G_TYPE_INSTANCE_GET_PRIVATE (window, GTK_TYPE_APPLICATION_WINDOW, GtkApplicationWindowPrivate); window->priv->actions = gtk_application_window_actions_new (window); window->priv->app_menu_section = g_menu_new (); window->priv->menubar_section = g_menu_new (); window->priv->accels = gtk_accel_group_new (); gtk_window_add_accel_group (GTK_WINDOW (window), window->priv->accels); /* window->priv->actions is the one and only ref on the group, so when * we dispose, the action group will die, disconnecting all signals. */ g_signal_connect_swapped (window->priv->actions, "action-added", G_CALLBACK (g_action_group_action_added), window); g_signal_connect_swapped (window->priv->actions, "action-enabled-changed", G_CALLBACK (g_action_group_action_enabled_changed), window); g_signal_connect_swapped (window->priv->actions, "action-state-changed", G_CALLBACK (g_action_group_action_state_changed), window); g_signal_connect_swapped (window->priv->actions, "action-removed", G_CALLBACK (g_action_group_action_removed), window); window->priv->muxer = G_ACTION_OBSERVABLE (g_action_muxer_new ()); }
combined = g_menu_new (); g_menu_append_submenu (combined, "Application", gtk_application_get_app_menu (application)); g_menu_append_section (combined, NULL, gtk_application_get_menubar (application)); gtk_quartz_set_main_menu (G_MENU_MODEL (combined), G_ACTION_OBSERVABLE (application->priv->muxer)); } static void gtk_application_startup_session_quartz (GtkApplication *app); static void gtk_application_startup_quartz (GtkApplication *application) { [NSApp finishLaunching]; application->priv->muxer = g_action_muxer_new (); g_action_muxer_insert (application->priv->muxer, "app", G_ACTION_GROUP (application)); g_signal_connect (application, "notify::app-menu", G_CALLBACK (gtk_application_menu_changed_quartz), NULL); g_signal_connect (application, "notify::menubar", G_CALLBACK (gtk_application_menu_changed_quartz), NULL); gtk_application_menu_changed_quartz (G_OBJECT (application), NULL, NULL); gtk_application_startup_session_quartz (application); } static void gtk_application_shutdown_quartz (GtkApplication *application) { g_signal_handlers_disconnect_by_func (application, gtk_application_menu_changed_quartz, NULL); g_object_unref (application->priv->muxer);