[gtk+] wayland: Only bind to supported gtk-shell versions



commit b4344861a09f7ec67fe5d302d9fdd00909daaaad
Author: Jonas Ådahl <jadahl gmail com>
Date:   Fri Mar 6 10:51:47 2015 +0800

    wayland: Only bind to supported gtk-shell versions
    
    The gtk-shell Wayland protocol extension is not meant to be backward
    compatible right now, so avoid binding to any version that is not the
    one supported.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=745721

 gdk/wayland/gdkdisplay-wayland.c   |   12 +++++++++---
 gdk/wayland/protocol/gtk-shell.xml |   10 +++++++++-
 2 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index c542459..21369de 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -69,6 +69,8 @@
  * ]|
  */
 
+#define SUPPORTED_GTK_SHELL_VERSION 1
+
 static void _gdk_wayland_display_load_cursor_theme (GdkWaylandDisplay *wayland_display);
 
 G_DEFINE_TYPE (GdkWaylandDisplay, gdk_wayland_display, GDK_TYPE_DISPLAY)
@@ -180,9 +182,13 @@ gdk_registry_handle_global (void               *data,
     }
   else if (strcmp (interface, "gtk_shell") == 0)
     {
-      display_wayland->gtk_shell =
-        wl_registry_bind (display_wayland->wl_registry, id, &gtk_shell_interface, 1);
-      _gdk_wayland_screen_set_has_gtk_shell (display_wayland->screen);
+      if (version == SUPPORTED_GTK_SHELL_VERSION)
+        {
+          display_wayland->gtk_shell =
+            wl_registry_bind(display_wayland->wl_registry, id,
+                             &gtk_shell_interface, SUPPORTED_GTK_SHELL_VERSION);
+          _gdk_wayland_screen_set_has_gtk_shell (display_wayland->screen);
+        }
     }
   else if (strcmp (interface, "wl_output") == 0)
     {
diff --git a/gdk/wayland/protocol/gtk-shell.xml b/gdk/wayland/protocol/gtk-shell.xml
index cd66259..bed61d6 100644
--- a/gdk/wayland/protocol/gtk-shell.xml
+++ b/gdk/wayland/protocol/gtk-shell.xml
@@ -1,12 +1,20 @@
 <protocol name="gtk">
 
   <interface name="gtk_shell" version="1">
+    <description summary="gtk specific extensions">
+      gtk_shell is a protocol extension providing additional features for
+      clients implementing it. It is not backward compatible, and a client must
+      always only bind to the specific version it implements. If a client binds
+      to a version different from the version the server provides, an error will
+      be raised.
+    </description>
+
     <enum name="capability">
       <entry name="global_app_menu" value="1"/>
       <entry name="global_menu_bar" value="2"/>
       <entry name="desktop_icons" value="3"/>
     </enum>
-    
+
     <event name="capabilities">
       <arg name="capabilities" type="uint"/>
     </event>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]