gdk: add internal `gdk_surface_get_seat_from_event()`
authorOlivier Fourdan <ofourdan@redhat.com>
Mon, 30 Mar 2020 14:55:05 +0000 (16:55 +0200)
committerOlivier Fourdan <ofourdan@redhat.com>
Mon, 30 Mar 2020 16:25:36 +0000 (18:25 +0200)
This can come handy to get the seat from a surface/event.

gdk/gdkinternals.h
gdk/gdksurface.c

index 2af0cf36ca55a6f159d6cb950bba7163d3cba893..21f75d7dc53375c80543caf5575d791ffbf3faf1 100644 (file)
@@ -181,6 +181,8 @@ void gdk_surface_get_unscaled_size (GdkSurface *surface,
                                     int *unscaled_width,
                                     int *unscaled_height);
 gboolean gdk_surface_handle_event (GdkEvent       *event);
+GdkSeat * gdk_surface_get_seat_from_event (GdkSurface *surface,
+                                           GdkEvent    *event);
 
 /*****************************************
  * Interfaces provided by windowing code *
index 25d6efc7a86d5ad3a0e1f3aba7738d6678fe1f05..7432a9b3489015eab8df882b44e89206cf31d397 100644 (file)
@@ -3015,3 +3015,22 @@ gdk_surface_translate_coordinates (GdkSurface *from,
 
   return TRUE;
 }
+
+GdkSeat *
+gdk_surface_get_seat_from_event (GdkSurface *surface,
+                                 GdkEvent   *event)
+{
+  if (event)
+    {
+      GdkDevice *device = gdk_event_get_device (event);
+      GdkSeat *seat = NULL;
+
+      device = gdk_event_get_device (event);
+      if (device)
+        seat = gdk_device_get_seat (device);
+
+      if (seat)
+        return seat;
+    }
+  return gdk_display_get_default_seat (surface->display);
+}