diff options
author | Giovanni Campagna <gcampagn@redhat.com> | 2013-09-03 09:54:53 +0200 |
---|---|---|
committer | Giovanni Campagna <gcampagn@redhat.com> | 2013-09-03 17:03:43 +0200 |
commit | 7f8bf416334746510be0b4810f4bf4923964037a (patch) | |
tree | b37177f0a9067b69d73494e3d9da904a6e0e30bf /gdk/wayland/gdkscreen-wayland.c | |
parent | ed9f55d521ac7f2168172497b500d762be3f0184 (diff) | |
download | gtk+-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.c | 42 |
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; } |