[gtk/readonly-events-1: 3/27] wayland: Clean up coordinate handling



commit 379bb8896110b2c3cbd1f4a1ab187751a12d0eae
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Feb 14 17:46:56 2020 -0500

    wayland: Clean up coordinate handling
    
    Get rid of the get_coordinates function and just
    use the structs directly.

 gdk/wayland/gdkdevice-wayland.c | 107 ++++++++++++++++------------------------
 1 file changed, 42 insertions(+), 65 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 8a4e551d16..5269f9f6d6 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -532,40 +532,6 @@ gdk_wayland_device_set_surface_cursor (GdkDevice  *device,
     }
 }
 
-static void
-get_coordinates (GdkDevice *device,
-                 double    *x,
-                 double    *y,
-                 double    *x_root,
-                 double    *y_root)
-{
-  GdkWaylandPointerData *pointer = GDK_WAYLAND_DEVICE (device)->pointer;
-  int root_x, root_y;
-
-  if (x)
-    *x = pointer->surface_x;
-  if (y)
-    *y = pointer->surface_y;
-
-  if (pointer->focus)
-    {
-      gdk_surface_get_root_coords (pointer->focus,
-                                  pointer->surface_x,
-                                  pointer->surface_y,
-                                  &root_x, &root_y);
-    }
-  else
-    {
-      root_x = pointer->surface_x;
-      root_y = pointer->surface_y;
-    }
-
-  if (x_root)
-    *x_root = root_x;
-  if (y_root)
-    *y_root = root_y;
-}
-
 static GdkModifierType
 device_get_modifiers (GdkDevice *device)
 {
@@ -583,8 +549,8 @@ device_get_modifiers (GdkDevice *device)
 
 static void
 gdk_wayland_device_query_state (GdkDevice        *device,
-                                GdkSurface        *surface,
-                                GdkSurface       **child_surface,
+                                GdkSurface       *surface,
+                                GdkSurface      **child_surface,
                                 gdouble          *root_x,
                                 gdouble          *root_y,
                                 gdouble          *win_x,
@@ -593,6 +559,7 @@ gdk_wayland_device_query_state (GdkDevice        *device,
 {
   GdkWaylandPointerData *pointer;
   GList *children = NULL;
+  int x_root, y_root;
 
   if (surface == NULL)
     children = gdk_wayland_display_get_toplevel_surfaces (gdk_device_get_display (device));
@@ -605,7 +572,28 @@ gdk_wayland_device_query_state (GdkDevice        *device,
   if (mask)
     *mask = device_get_modifiers (device);
 
-  get_coordinates (device, win_x, win_y, root_x, root_y);
+  if (win_x)
+    *win_x = pointer->surface_x;
+  if (win_y)
+    *win_y = pointer->surface_y;
+
+  if (pointer->focus)
+    {
+      gdk_surface_get_root_coords (pointer->focus,
+                                  pointer->surface_x,
+                                  pointer->surface_y,
+                                  &x_root, &y_root);
+    }
+  else
+    {
+      x_root = pointer->surface_x;
+      y_root = pointer->surface_y;
+    }
+
+  if (root_x)
+    *root_x = x_root;
+  if (root_y)
+    *root_y = y_root;
 }
 
 static void
@@ -1503,7 +1491,6 @@ pointer_handle_enter (void              *data,
   GdkWaylandSeat *seat = data;
   GdkEvent *event;
   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (seat->display);
-  double x, y,  x_root, y_root;
 
   if (!surface)
     return;
@@ -1522,14 +1509,14 @@ pointer_handle_enter (void              *data,
   seat->pointer_info.surface_y = wl_fixed_to_double (sy);
   seat->pointer_info.enter_serial = serial;
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
   event = gdk_event_crossing_new (GDK_ENTER_NOTIFY,
                                   seat->pointer_info.focus,
                                   seat->master_pointer,
                                   seat->pointer,
                                   0,
                                   0,
-                                  x, y,
+                                  seat->pointer_info.surface_x,
+                                  seat->pointer_info.surface_y,
                                   GDK_CROSSING_NORMAL,
                                   GDK_NOTIFY_NONLINEAR);
   gdk_wayland_seat_set_frame_event (seat, event);
@@ -1553,7 +1540,6 @@ pointer_handle_leave (void              *data,
   GdkWaylandSeat *seat = data;
   GdkEvent *event;
   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (seat->display);
-  double x, y, x_root, y_root;
 
   if (!surface)
     return;
@@ -1566,14 +1552,14 @@ pointer_handle_leave (void              *data,
 
   _gdk_wayland_display_update_serial (display_wayland, serial);
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
   event = gdk_event_crossing_new (GDK_LEAVE_NOTIFY,
                                   seat->pointer_info.focus,
                                   seat->master_pointer,
                                   seat->pointer,
                                   0,
                                   0,
-                                  x, y,
+                                  seat->pointer_info.surface_x,
+                                  seat->pointer_info.surface_y,
                                   GDK_CROSSING_NORMAL,
                                   GDK_NOTIFY_NONLINEAR);
   gdk_wayland_seat_set_frame_event (seat, event);
@@ -1603,7 +1589,6 @@ pointer_handle_motion (void              *data,
   GdkWaylandSeat *seat = data;
   GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (seat->display);
   GdkEvent *event;
-  double x, y, x_root, y_root;
 
   if (!seat->pointer_info.focus)
     return;
@@ -1612,20 +1597,19 @@ pointer_handle_motion (void              *data,
   seat->pointer_info.surface_x = wl_fixed_to_double (sx);
   seat->pointer_info.surface_y = wl_fixed_to_double (sy);
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
-
   event = gdk_event_motion_new (seat->pointer_info.focus,
                                 seat->master_pointer,
                                 seat->pointer,
                                 NULL,
                                 time,
                                 device_get_modifiers (seat->master_pointer),
-                                x, y);
+                                seat->pointer_info.surface_x,
+                                seat->pointer_info.surface_y);
   gdk_wayland_seat_set_frame_event (seat, event);
 
   GDK_SEAT_NOTE (seat, EVENTS,
             g_message ("motion %f %f, seat %p state %d",
-                       wl_fixed_to_double (sx), wl_fixed_to_double (sy),
+                       event->motion.x, event->motion.y,
                       seat, event->motion.state));
 
   if (display->seat_version < WL_POINTER_HAS_FRAME)
@@ -1645,7 +1629,6 @@ pointer_handle_button (void              *data,
   GdkEvent *event;
   uint32_t modifier;
   int gdk_button;
-  double x, y, x_root, y_root;
 
   if (!seat->pointer_info.focus)
     return;
@@ -1673,15 +1656,14 @@ pointer_handle_button (void              *data,
   if (state)
     seat->pointer_info.press_serial = serial;
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
-
   event = gdk_event_button_new (state ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE,
                                 seat->pointer_info.focus,
                                 seat->master_pointer,
                                 seat->pointer,
                                 NULL,
                                 time,
-                                x, y,
+                                seat->pointer_info.surface_x,
+                                seat->pointer_info.surface_y,
                                 gdk_button,
                                 device_get_modifiers (seat->master_pointer));
 
@@ -2442,20 +2424,19 @@ emit_gesture_swipe_event (GdkWaylandSeat          *seat,
                           gdouble                  dy)
 {
   GdkEvent *event;
-  double x, y, x_root, y_root;
 
   if (!seat->pointer_info.focus)
     return;
 
   seat->pointer_info.time = _time;
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
   event = gdk_event_touchpad_swipe_new (seat->pointer_info.focus,
                                         seat->master_pointer,
                                         seat->pointer,
                                         _time,
                                         device_get_modifiers (seat->master_pointer),
-                                        x, y,
+                                        seat->pointer_info.surface_x,
+                                        seat->pointer_info.surface_y,
                                         n_fingers,
                                         dx, dy);
 
@@ -2536,22 +2517,20 @@ emit_gesture_pinch_event (GdkWaylandSeat          *seat,
                           gdouble                  angle_delta)
 {
   GdkEvent *event;
-  double x, y, x_root, y_root;
 
   if (!seat->pointer_info.focus)
     return;
 
   seat->pointer_info.time = _time;
 
-  get_coordinates (seat->master_pointer, &x, &y, &x_root, &y_root);
-
   event = gdk_event_touchpad_pinch_new (seat->pointer_info.focus,
                                         seat->master_pointer,
                                         seat->pointer,
                                         _time,
                                         device_get_modifiers (seat->master_pointer),
                                         phase,
-                                        x, y,
+                                        seat->pointer_info.surface_x,
+                                        seat->pointer_info.surface_y,
                                         n_fingers,
                                         dx, dy,
                                         scale, angle_delta * G_PI / 180);
@@ -3466,16 +3445,15 @@ tablet_create_button_event_frame (GdkWaylandTabletData *tablet,
 {
   GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tablet->seat);
   GdkEvent *event;
-  double x, y, x_root, y_root;
 
-  get_coordinates (tablet->master, &x, &y, &x_root, &y_root);
   event = gdk_event_button_new (evtype,
                                 tablet->pointer_info.focus,
                                 tablet->master,
                                 tablet->current_device,
                                 tablet->current_tool->tool,
                                 tablet->pointer_info.time,
-                                x, y,
+                                tablet->pointer_info.surface_x,
+                                tablet->pointer_info.surface_y,
                                 button,
                                 device_get_modifiers (seat->master_pointer));
   gdk_wayland_tablet_set_frame_event (tablet, event);
@@ -3525,7 +3503,6 @@ tablet_tool_handle_motion (void                      *data,
   GdkWaylandTabletData *tablet = tool->current_tablet;
   GdkWaylandSeat *seat = GDK_WAYLAND_SEAT (tool->seat);
   GdkEvent *event;
-  double x, y, x_root, y_root;
 
   tablet->pointer_info.surface_x = wl_fixed_to_double (sx);
   tablet->pointer_info.surface_y = wl_fixed_to_double (sy);
@@ -3535,14 +3512,14 @@ tablet_tool_handle_motion (void                      *data,
                        tablet->pointer_info.surface_x,
                        tablet->pointer_info.surface_y));
 
-  get_coordinates (tablet->master, &x, &y, &x_root, &y_root);
   event = gdk_event_motion_new (tablet->pointer_info.focus,
                                 tablet->master,
                                 tablet->current_device,
                                 tool->tool,
                                 tablet->pointer_info.time,
                                 device_get_modifiers (tablet->master),
-                                x, y);
+                                tablet->pointer_info.surface_x,
+                                tablet->pointer_info.surface_y);
 
   gdk_wayland_tablet_set_frame_event (tablet, event);
 }


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