From 0de790137e20b3a172af74850cf3035907c4f521 Mon Sep 17 00:00:00 2001 From: Oleksii Samorukov Date: Fri, 10 Jan 2020 11:08:58 +0100 Subject: [PATCH 1/2] Move macos menu init to the gui related code and reparent it with a main window. Closes #1258 (cherry picked from commit eb4b8fbd05f1257ced0a30638c348f3e6ccc085a) --- app/gui/gui.c | 116 +++++++++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 57 deletions(-) diff --git a/app/gui/gui.c b/app/gui/gui.c index 37d329fa4d7..5332cc40ffa 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -600,63 +600,6 @@ gui_restore_after_callback (Gimp *gimp, gimp_action_history_init (gimp); -#ifdef GDK_WINDOWING_QUARTZ - { - GtkosxApplication *osx_app; - GtkWidget *menu; - GtkWidget *item; - - [[NSUserDefaults standardUserDefaults] setObject:@"NO" - forKey:@"NSTreatUnknownArgumentsAsOpen"]; - - osx_app = gtkosx_application_get (); - - menu = gimp_ui_manager_get_widget (image_ui_manager, - "/image-menubar"); - if (GTK_IS_MENU_ITEM (menu)) - menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu)); - - /* do not activate OSX menu if tests are running */ - if (!getenv("GIMP_TESTING_ABS_TOP_SRCDIR")) - gtkosx_application_set_menu_bar (osx_app, GTK_MENU_SHELL (menu)); - - gtkosx_application_set_use_quartz_accelerators (osx_app, FALSE); - - gui_add_to_app_menu (image_ui_manager, osx_app, - "/image-menubar/Help/dialogs-about", 0); - gui_add_to_app_menu (image_ui_manager, osx_app, - "/image-menubar/Help/dialogs-search-action", 1); - -#define PREFERENCES "/image-menubar/Edit/Preferences/" - - gui_add_to_app_menu (image_ui_manager, osx_app, - PREFERENCES "dialogs-preferences", 3); - gui_add_to_app_menu (image_ui_manager, osx_app, - PREFERENCES "dialogs-input-devices", 4); - gui_add_to_app_menu (image_ui_manager, osx_app, - PREFERENCES "dialogs-keyboard-shortcuts", 5); - gui_add_to_app_menu (image_ui_manager, osx_app, - PREFERENCES "dialogs-module-dialog", 6); - gui_add_to_app_menu (image_ui_manager, osx_app, - PREFERENCES "plug-in-unit-editor", 7); - -#undef PREFERENCES - - item = gtk_separator_menu_item_new (); - gtkosx_application_insert_app_menu_item (osx_app, item, 8); - - item = gimp_ui_manager_get_widget (image_ui_manager, - "/image-menubar/File/file-quit"); - gtk_widget_hide (item); - - g_signal_connect (osx_app, "NSApplicationBlockTermination", - G_CALLBACK (gui_quartz_quit_callback), - image_ui_manager); - - gtkosx_application_ready (osx_app); - } -#endif /* GDK_WINDOWING_QUARTZ */ - g_signal_connect_object (gui_config, "notify::single-window-mode", G_CALLBACK (gui_single_window_mode_notify), ui_configurer, 0); @@ -690,6 +633,65 @@ gui_restore_after_callback (Gimp *gimp, /* move keyboard focus to the display */ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); +#ifdef GDK_WINDOWING_QUARTZ + { + GtkosxApplication *osx_app; + GtkWidget *menu; + GtkWidget *item; + + [[NSUserDefaults standardUserDefaults] setObject:@"NO" + forKey:@"NSTreatUnknownArgumentsAsOpen"]; + + osx_app = gtkosx_application_get (); + + menu = gimp_ui_manager_get_widget (image_ui_manager, + "/image-menubar"); + /* menu should have window parent for accelerator support */ + gtk_widget_set_parent(menu, toplevel); + + if (GTK_IS_MENU_ITEM (menu)) + menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu)); + + /* do not activate OSX menu if tests are running */ + if (!getenv("GIMP_TESTING_ABS_TOP_SRCDIR")) + gtkosx_application_set_menu_bar (osx_app, GTK_MENU_SHELL (menu)); + + gtkosx_application_set_use_quartz_accelerators (osx_app, FALSE); + + gui_add_to_app_menu (image_ui_manager, osx_app, + "/image-menubar/Help/dialogs-about", 0); + gui_add_to_app_menu (image_ui_manager, osx_app, + "/image-menubar/Help/dialogs-search-action", 1); + +#define PREFERENCES "/image-menubar/Edit/Preferences/" + + gui_add_to_app_menu (image_ui_manager, osx_app, + PREFERENCES "dialogs-preferences", 3); + gui_add_to_app_menu (image_ui_manager, osx_app, + PREFERENCES "dialogs-input-devices", 4); + gui_add_to_app_menu (image_ui_manager, osx_app, + PREFERENCES "dialogs-keyboard-shortcuts", 5); + gui_add_to_app_menu (image_ui_manager, osx_app, + PREFERENCES "dialogs-module-dialog", 6); + gui_add_to_app_menu (image_ui_manager, osx_app, + PREFERENCES "plug-in-unit-editor", 7); + +#undef PREFERENCES + + item = gtk_separator_menu_item_new (); + gtkosx_application_insert_app_menu_item (osx_app, item, 8); + + item = gimp_ui_manager_get_widget (image_ui_manager, + "/image-menubar/File/file-quit"); + gtk_widget_hide (item); + + g_signal_connect (osx_app, "NSApplicationBlockTermination", + G_CALLBACK (gui_quartz_quit_callback), + image_ui_manager); + + gtkosx_application_ready (osx_app); + } +#endif /* GDK_WINDOWING_QUARTZ */ gtk_window_present (GTK_WINDOW (toplevel)); } -- GitLab From 05d6b8a59175e4c879d5a8419a419fd7db72f565 Mon Sep 17 00:00:00 2001 From: Alex Samorukov Date: Fri, 10 Jan 2020 14:52:57 +0000 Subject: [PATCH 2/2] Move comment to match the description --- app/gui/gui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/gui/gui.c b/app/gui/gui.c index 5332cc40ffa..3e264e17f99 100644 --- a/app/gui/gui.c +++ b/app/gui/gui.c @@ -631,7 +631,6 @@ gui_restore_after_callback (Gimp *gimp, if (gui_config->restore_session) session_restore (gimp, initial_monitor); - /* move keyboard focus to the display */ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (shell)); #ifdef GDK_WINDOWING_QUARTZ { @@ -692,6 +691,7 @@ gui_restore_after_callback (Gimp *gimp, gtkosx_application_ready (osx_app); } #endif /* GDK_WINDOWING_QUARTZ */ + /* move keyboard focus to the display */ gtk_window_present (GTK_WINDOW (toplevel)); } -- GitLab