diff --git a/app/display/gimpimagewindow.c b/app/display/gimpimagewindow.c index 0d6fb06300..e3909e56a5 100644 --- a/app/display/gimpimagewindow.c +++ b/app/display/gimpimagewindow.c @@ -351,6 +351,7 @@ gimp_image_window_constructed (GObject *object) GimpGuiConfig *config; GimpMenuModel *model; gboolean use_gtk_menubar = TRUE; + gboolean use_app_menu = TRUE; G_OBJECT_CLASS (parent_class)->constructed (object); @@ -425,6 +426,25 @@ gimp_image_window_constructed (GObject *object) window); } +#ifndef GDK_WINDOWING_QUARTZ + /* Docs says that macOS always returns FALSE but we actually want to create + * our custom macOS menu. + */ + use_app_menu = gtk_application_prefers_app_menu (GTK_APPLICATION (private->gimp->app)); +#endif /* !GDK_WINDOWING_QUARTZ */ + + if (use_app_menu) + { + GimpUIManager *app_menu_manager; + GimpMenuModel *app_menu_model; + + app_menu_manager = gimp_menu_factory_get_manager (menus_get_global_menu_factory (private->gimp), + "", private->gimp); + app_menu_model = gimp_ui_manager_get_model (app_menu_manager, "/app-menu"); + gtk_application_set_app_menu (GTK_APPLICATION (private->gimp->app), + G_MENU_MODEL (app_menu_model)); + } + /* Create the hbox that contains docks and images */ private->hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (private->main_vbox), private->hbox, diff --git a/app/menus/menus.c b/app/menus/menus.c index d3714b0666..7d07f65166 100644 --- a/app/menus/menus.c +++ b/app/menus/menus.c @@ -98,6 +98,14 @@ menus_init (Gimp *gimp) "quick-mask-menu", NULL, NULL); + gimp_menu_factory_manager_register (global_menu_factory, "", + "file", + "dialogs", + NULL, + "/app-menu", + "app-menu", NULL, + NULL); + gimp_menu_factory_manager_register (global_menu_factory, "", "file", "context", diff --git a/menus/Makefile.am b/menus/Makefile.am index e095b53456..1e677a093b 100644 --- a/menus/Makefile.am +++ b/menus/Makefile.am @@ -10,23 +10,24 @@ menudata_built_files = $(menudata_in_files:.ui.in.in=.ui) menudata_DATA = \ $(menudata_built_files) \ + app-menu.ui \ brush-editor-menu.ui \ - brushes-menu.ui \ - buffers-menu.ui \ + brushes-menu.ui \ + buffers-menu.ui \ channels-menu.ui \ colormap-menu.ui \ cursor-info-menu.ui \ dashboard-menu.ui \ documents-menu.ui \ - dynamics-editor-menu.ui \ + dynamics-editor-menu.ui \ dynamics-menu.ui \ error-console-menu.ui \ fonts-menu.ui \ - gradient-editor-menu.ui \ + gradient-editor-menu.ui \ gradients-menu.ui \ images-menu.ui \ layers-menu.ui \ - mypaint-brushes-menu.ui \ + mypaint-brushes-menu.ui \ palette-editor-menu.ui \ palettes-menu.ui \ patterns-menu.ui \ @@ -40,7 +41,7 @@ menudata_DATA = \ text-tool-menu.ui \ tool-options-menu.ui \ undo-menu.ui \ - vector-toolpath-menu.ui \ + vector-toolpath-menu.ui \ vectors-menu.ui EXTRA_DIST = \ diff --git a/menus/app-menu.ui b/menus/app-menu.ui new file mode 100644 index 0000000000..d444e656d8 --- /dev/null +++ b/menus/app-menu.ui @@ -0,0 +1,14 @@ + + + + + app.dialogs-about + app.dialogs-welcome +
+ app.dialogs-preferences + app.dialogs-input-devices + app.dialogs-keyboard-shortcuts +
+ app.file-quit +
+
diff --git a/menus/meson.build b/menus/meson.build index e13814bbaa..f2371cf888 100644 --- a/menus/meson.build +++ b/menus/meson.build @@ -1,6 +1,7 @@ menus_dir = prefix / gimpdatadir / 'menus' ui_menus_files = files( + 'app-menu.ui', 'brush-editor-menu.ui', 'brushes-menu.ui', 'buffers-menu.ui',