[gtk+] wayland: Port from wl_shell to wl_surface_shell



commit b917c2f0277ddee1e298a1e021a10ad90549794a
Author: Rob Bradford <rob linux intel com>
Date:   Mon Dec 5 15:55:37 2011 +0000

    wayland: Port from wl_shell to wl_surface_shell
    
    Previously all the commands that acted on the shell took the surface that was
    to be acted on as parameter. Now we retrieve an object from the shell that
    represents its state for the surface. With that wl_shell_surface object we can
    then call methods on that.
    
    Signed-off-by: Kristian HÃgsberg <krh bitplanet net>

 gdk/wayland/gdkdisplay-wayland.c |   34 -----------------
 gdk/wayland/gdkwindow-wayland.c  |   77 +++++++++++++++++++++++++++----------
 2 files changed, 56 insertions(+), 55 deletions(-)
---
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index 929ab58..bb1166f 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -91,38 +91,6 @@ gdk_input_init (GdkDisplay *display)
 }
 
 static void
-shell_handle_configure(void *data, struct wl_shell *shell,
-		       uint32_t time, uint32_t edges,
-		       struct wl_surface *surface,
-		       int32_t width, int32_t height)
-{
-  GdkWindow *window;
-  GdkDisplay *display;
-  GdkEvent *event;
-
-  window = wl_surface_get_user_data(surface);
-
-  display = gdk_window_get_display (window);
-
-  event = gdk_event_new (GDK_CONFIGURE);
-  event->configure.window = window;
-  event->configure.send_event = FALSE;
-  event->configure.width = width;
-  event->configure.height = height;
-
-  _gdk_window_update_size (window);
-  _gdk_wayland_window_update_size (window, width, height, edges);
-
-  g_object_ref(window);
-
-  _gdk_wayland_display_deliver_event (display, event);
-}
-
-static const struct wl_shell_listener shell_listener = {
-  shell_handle_configure,
-};
-
-static void
 output_handle_geometry(void *data,
 		       struct wl_output *wl_output,
 		       int x, int y, int physical_width, int physical_height,
@@ -163,8 +131,6 @@ gdk_display_handle_global(struct wl_display *display, uint32_t id,
     display_wayland->shm = wl_display_bind(display, id, &wl_shm_interface);
   } else if (strcmp(interface, "wl_shell") == 0) {
     display_wayland->shell = wl_display_bind(display, id, &wl_shell_interface);
-    wl_shell_add_listener(display_wayland->shell,
-			  &shell_listener, display_wayland);
   } else if (strcmp(interface, "wl_output") == 0) {
     display_wayland->output =
       wl_display_bind(display, id, &wl_output_interface);
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 3653fa3..53fc0d2 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -99,6 +99,7 @@ struct _GdkWindowImplWayland
   gint8 toplevel_window_type;
 
   struct wl_surface *surface;
+  struct wl_shell_surface *shell_surface;
   unsigned int mapped : 1;
   GdkWindow *transient_for;
 
@@ -337,12 +338,12 @@ gdk_wayland_window_attach_image (GdkWindow *window)
     data->buffer =
       wl_egl_pixmap_create_buffer(data->pixmap);
 
-  if (impl->resize_edges & WL_SHELL_RESIZE_LEFT)
+  if (impl->resize_edges & WL_SHELL_SURFACE_RESIZE_LEFT)
     dx = server_width - data->width;
   else
     dx = 0;
 
-  if (impl->resize_edges & WL_SHELL_RESIZE_TOP)
+  if (impl->resize_edges & WL_SHELL_SURFACE_RESIZE_TOP)
     dy = server_height - data->height;
   else
     dy = 0;
@@ -450,8 +451,6 @@ gdk_wayland_window_map (GdkWindow *window)
 {
   GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
   GdkWindowImplWayland *parent;
-  GdkDisplayWayland *display_wayland =
-		GDK_DISPLAY_WAYLAND (gdk_window_get_display (impl->wrapper));
 
   if (!impl->mapped)
     {
@@ -464,16 +463,48 @@ gdk_wayland_window_map (GdkWindow *window)
 		  window->y);
 
 	  parent = GDK_WINDOW_IMPL_WAYLAND (impl->transient_for->impl);
-	  wl_shell_set_transient (display_wayland->shell, impl->surface, parent->surface,
-				    window->x, window->y, 0);
+          wl_shell_surface_set_transient (impl->shell_surface, parent->shell_surface,
+                                          window->x, window->y, 0);
 	}
       else
-      wl_shell_set_toplevel (display_wayland->shell, impl->surface);
+        wl_shell_surface_set_toplevel (impl->shell_surface);
       impl->mapped = TRUE;
     }
 }
 
 static void
+shell_surface_handle_configure(void *data,
+                               struct wl_shell_surface *shell_surface,
+                               uint32_t time,
+                               uint32_t edges,
+                               int32_t width,
+                               int32_t height)
+{
+  GdkWindow *window = GDK_WINDOW (data);
+  GdkDisplay *display;
+  GdkEvent *event;
+
+  display = gdk_window_get_display (window);
+
+  event = gdk_event_new (GDK_CONFIGURE);
+  event->configure.window = window;
+  event->configure.send_event = FALSE;
+  event->configure.width = width;
+  event->configure.height = height;
+
+  _gdk_window_update_size (window);
+  _gdk_wayland_window_update_size (window, width, height, edges);
+
+  g_object_ref(window);
+
+  _gdk_wayland_display_deliver_event (display, event);
+}
+
+static const struct wl_shell_surface_listener shell_surface_listener = {
+  shell_surface_handle_configure,
+};
+
+static void
 gdk_wayland_window_show (GdkWindow *window, gboolean already_mapped)
 {
   GdkDisplay *display;
@@ -492,6 +523,11 @@ gdk_wayland_window_show (GdkWindow *window, gboolean already_mapped)
   impl->surface = wl_compositor_create_surface(display_wayland->compositor);
   wl_surface_set_user_data(impl->surface, window);
 
+  impl->shell_surface = wl_shell_get_shell_surface (display_wayland->shell,
+                                                    impl->surface);
+  wl_shell_surface_add_listener(impl->shell_surface,
+                                &shell_surface_listener, window);
+
   _gdk_make_event (window, GDK_MAP, NULL, FALSE);
   event = _gdk_make_event (window, GDK_VISIBILITY_NOTIFY, NULL, FALSE);
   event->visibility.state = GDK_VISIBILITY_UNOBSCURED;
@@ -1109,7 +1145,6 @@ gdk_wayland_window_begin_resize_drag (GdkWindow     *window,
 				      gint           root_y,
 				      guint32        timestamp)
 {
-  GdkDisplay *display = gdk_window_get_display (window);
   GdkWindowImplWayland *impl;
   uint32_t grab_type;
 
@@ -1120,35 +1155,35 @@ gdk_wayland_window_begin_resize_drag (GdkWindow     *window,
   switch (edge)
     {
     case GDK_WINDOW_EDGE_NORTH_WEST:
-      grab_type = WL_SHELL_RESIZE_TOP_LEFT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_TOP_LEFT;
       break;
 
     case GDK_WINDOW_EDGE_NORTH:
-      grab_type = WL_SHELL_RESIZE_TOP;
+      grab_type = WL_SHELL_SURFACE_RESIZE_TOP;
       break;
 
     case GDK_WINDOW_EDGE_NORTH_EAST:
-      grab_type = WL_SHELL_RESIZE_RIGHT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_RIGHT;
       break;
 
     case GDK_WINDOW_EDGE_WEST:
-      grab_type = WL_SHELL_RESIZE_LEFT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_LEFT;
       break;
 
     case GDK_WINDOW_EDGE_EAST:
-      grab_type = WL_SHELL_RESIZE_RIGHT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_RIGHT;
       break;
 
     case GDK_WINDOW_EDGE_SOUTH_WEST:
-      grab_type = WL_SHELL_RESIZE_BOTTOM_LEFT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT;
       break;
 
     case GDK_WINDOW_EDGE_SOUTH:
-      grab_type = WL_SHELL_RESIZE_BOTTOM;
+      grab_type = WL_SHELL_SURFACE_RESIZE_BOTTOM;
       break;
 
     case GDK_WINDOW_EDGE_SOUTH_EAST:
-      grab_type = WL_SHELL_RESIZE_BOTTOM_RIGHT;
+      grab_type = WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT;
       break;
 
     default:
@@ -1159,9 +1194,9 @@ gdk_wayland_window_begin_resize_drag (GdkWindow     *window,
 
   impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
 
-  wl_shell_resize(GDK_DISPLAY_WAYLAND (display)->shell, impl->surface,
-		  _gdk_wayland_device_get_device (device),
-		  timestamp, grab_type);
+  wl_shell_surface_resize(impl->shell_surface,
+                          _gdk_wayland_device_get_device (device),
+                          timestamp, grab_type);
 }
 
 static void
@@ -1181,8 +1216,8 @@ gdk_wayland_window_begin_move_drag (GdkWindow *window,
 
   impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
 
-  wl_shell_move(GDK_DISPLAY_WAYLAND (display)->shell, impl->surface,
-		_gdk_wayland_device_get_device (device), timestamp);
+  wl_shell_surface_move(impl->shell_surface,
+                        _gdk_wayland_device_get_device (device), timestamp);
 }
 
 static void



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