summaryrefslogtreecommitdiff
path: root/gdk/wayland/gdkscreen-wayland.c
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagn@redhat.com>2013-09-03 09:54:53 +0200
committerGiovanni Campagna <gcampagn@redhat.com>2013-09-03 17:03:43 +0200
commit7f8bf416334746510be0b4810f4bf4923964037a (patch)
treeb37177f0a9067b69d73494e3d9da904a6e0e30bf /gdk/wayland/gdkscreen-wayland.c
parented9f55d521ac7f2168172497b500d762be3f0184 (diff)
downloadgtk+-7f8bf416334746510be0b4810f4bf4923964037a.tar.gz
gtk-shell: extend the protocol with shell capabilities
Add the concept of shell capabilities, which allow the compositor to advertise support for the app menu and the global menubar, which are then propagated as GdkSettings. https://bugzilla.gnome.org/show_bug.cgi?id=707129
Diffstat (limited to 'gdk/wayland/gdkscreen-wayland.c')
-rw-r--r--gdk/wayland/gdkscreen-wayland.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/gdk/wayland/gdkscreen-wayland.c b/gdk/wayland/gdkscreen-wayland.c
index d25a954f68..daf9b29be1 100644
--- a/gdk/wayland/gdkscreen-wayland.c
+++ b/gdk/wayland/gdkscreen-wayland.c
@@ -68,6 +68,8 @@ struct _GdkWaylandScreen
GHashTable *settings;
GsdXftSettings xft_settings;
+
+ guint32 shell_capabilities;
};
struct _GdkWaylandScreenClass
@@ -605,6 +607,28 @@ init_settings (GdkScreen *screen)
}
static void
+gtk_shell_handle_capabilities (void *data,
+ struct gtk_shell *shell,
+ uint32_t capabilities)
+{
+ GdkWaylandScreen *screen_wayland = data;
+
+ screen_wayland->shell_capabilities = capabilities;
+}
+
+struct gtk_shell_listener gdk_screen_gtk_shell_listener = {
+ gtk_shell_handle_capabilities
+};
+
+void
+_gdk_wayland_screen_set_has_gtk_shell (GdkScreen *screen)
+{
+ GdkWaylandDisplay *wayland_display = GDK_WAYLAND_DISPLAY (GDK_WAYLAND_SCREEN (screen)->display);
+
+ gtk_shell_add_listener (wayland_display->gtk_shell, &gdk_screen_gtk_shell_listener, screen);
+}
+
+static void
set_value_from_entry (GdkScreen *screen,
TranslationEntry *entry,
GValue *value)
@@ -658,6 +682,18 @@ set_value_from_entry (GdkScreen *screen,
}
static gboolean
+set_capability_setting (GdkScreen *screen,
+ GValue *value,
+ enum gtk_shell_capability test)
+{
+ GdkWaylandScreen *wayland_screen = GDK_WAYLAND_SCREEN (screen);
+
+ g_value_set_boolean (value, (wayland_screen->shell_capabilities & test) == test);
+
+ return TRUE;
+}
+
+static gboolean
gdk_wayland_screen_get_setting (GdkScreen *screen,
const gchar *name,
GValue *value)
@@ -673,6 +709,12 @@ gdk_wayland_screen_get_setting (GdkScreen *screen,
return TRUE;
}
+ if (strcmp (name, "gtk-shell-shows-app-menu") == 0)
+ return set_capability_setting (screen, value, GTK_SHELL_CAPABILITY_GLOBAL_APP_MENU);
+
+ if (strcmp (name, "gtk-shell-shows-menubar") == 0)
+ return set_capability_setting (screen, value, GTK_SHELL_CAPABILITY_GLOBAL_MENU_BAR);
+
return FALSE;
}