summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk/Makefile.am2
-rw-r--r--gtk/gtk.gresource.xml1
-rw-r--r--gtk/gtkapplication-quartz.c31
-rw-r--r--gtk/gtkapplication-quartz.ui45
4 files changed, 74 insertions, 5 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index 63b97aceec..437ed9f40b 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -1208,7 +1208,7 @@ gtktypebuiltins.c: $(gtk_public_h_sources) $(deprecated_h_sources) gtktypebuilti
gtkresources.h: gtk.gresource.xml
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gtk.gresource.xml \
--target=$@ --sourcedir=$(srcdir) --c-name _gtk --generate-header --manual-register
-gtkresources.c: gtk.gresource.xml gtk-default.css gtk-win32.css gtk-win32-xp.css gtk-win32-base.css gtk-win32-classic.css $(DND_CURSORS) $(COMPOSITE_TEMPLATES) $(template_headers)
+gtkresources.c: gtk.gresource.xml gtk-default.css gtk-win32.css gtk-win32-xp.css gtk-win32-base.css gtk-win32-classic.css $(DND_CURSORS) $(COMPOSITE_TEMPLATES) $(template_headers) gtkapplication-quartz.ui
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gtk.gresource.xml \
--target=$@ --sourcedir=$(srcdir) --c-name _gtk --generate-source --manual-register
diff --git a/gtk/gtk.gresource.xml b/gtk/gtk.gresource.xml
index 549385f2c1..ae37486289 100644
--- a/gtk/gtk.gresource.xml
+++ b/gtk/gtk.gresource.xml
@@ -35,5 +35,6 @@
<file compressed="true">gtkscalebutton.ui</file>
<file compressed="true">gtkstatusbar.ui</file>
<file compressed="true">gtkvolumebutton.ui</file>
+ <file compressed="true">gtkapplication-quartz.ui</file>
</gresource>
</gresources>
diff --git a/gtk/gtkapplication-quartz.c b/gtk/gtkapplication-quartz.c
index 8d2bea97e0..2f14ee7ef7 100644
--- a/gtk/gtkapplication-quartz.c
+++ b/gtk/gtkapplication-quartz.c
@@ -21,6 +21,7 @@
#include "config.h"
#include "gtkapplicationprivate.h"
+#include "gtkbuilder.h"
#import <Cocoa/Cocoa.h>
typedef struct
@@ -88,6 +89,8 @@ gtk_application_impl_quartz_startup (GtkApplicationImpl *impl,
gboolean register_session)
{
GtkApplicationImplQuartz *quartz = (GtkApplicationImplQuartz *) impl;
+ GSimpleActionGroup *gtkinternal;
+ GMenuModel *app_menu;
if (register_session)
[NSApp setDelegate: [[GtkApplicationQuartzDelegate alloc] initWithImpl:quartz]];
@@ -95,10 +98,30 @@ gtk_application_impl_quartz_startup (GtkApplicationImpl *impl,
quartz->muxer = gtk_action_muxer_new ();
gtk_action_muxer_set_parent (quartz->muxer, gtk_application_get_action_muxer (impl->application));
- /* app menu must come first so that we always see index '0' in
- * 'combined' as being the app menu.
- */
- gtk_application_impl_set_app_menu (impl, gtk_application_get_app_menu (impl->application));
+ /* Add the default accels */
+ gtk_application_add_accelerator (impl->application, "<Primary>comma", "app.preferences", NULL);
+ gtk_application_add_accelerator (impl->application, "<Primary><Alt>h", "gtkinternal.hide-others", NULL);
+ gtk_application_add_accelerator (impl->application, "<Primary>h", "gtkinternal.hide", NULL);
+ gtk_application_add_accelerator (impl->application, "<Primary>q", "app.quit", NULL);
+
+ app_menu = gtk_application_get_app_menu (impl->application);
+ 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/gtkapplication-quartz.ui");
+ gtk_application_set_app_menu (impl->application, G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
+ g_object_unref (builder);
+ }
+ else
+ gtk_application_impl_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. */
diff --git a/gtk/gtkapplication-quartz.ui b/gtk/gtkapplication-quartz.ui
new file mode 100644
index 0000000000..79c4ff178d
--- /dev/null
+++ b/gtk/gtkapplication-quartz.ui
@@ -0,0 +1,45 @@
+<interface>
+ <menu id='app-menu'>
+ <section>
+ <item>
+ <attribute name='label' translatable='yes'>About `gtk-private-appname`</attribute>
+ <attribute name='action'>app.about</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name='label' translatable='yes'>Preferences</attribute>
+ <attribute name='action'>app.preferences</attribute>
+ </item>
+ </section>
+ <section>
+ <submenu>
+ <attribute name='label' translatable='yes'>Services</attribute>
+ <attribute name='gtk-private-special'>services-submenu</attribute>
+ </submenu>
+ </section>
+ <section>
+ <item>
+ <attribute name='label' translatable='yes'>Hide `gtk-private-appname`</attribute>
+ <attribute name='gtk-private-special'>hide-this</attribute>
+ <attribute name='action'>gtkinternal.hide</attribute>
+ </item>
+ <item>
+ <attribute name='label' translatable='yes'>Hide Others</attribute>
+ <attribute name='gtk-private-special'>hide-others</attribute>
+ <attribute name='action'>gtkinternal.hide-others</attribute>
+ </item>
+ <item>
+ <attribute name='label' translatable='yes'>Show All</attribute>
+ <attribute name='gtk-private-special'>show-all</attribute>
+ <attribute name='action'>gtkinternal.show-all</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name='label' translatable='yes'>Quit `gtk-private-appname`</attribute>
+ <attribute name='action'>app.quit</attribute>
+ </item>
+ </section>
+ </menu>
+</interface>