changeset 2342:5437aed23151

GTK3: Isolate some X11 specific calls so it functions on Wayland. Wayland is missing some key features that X11 has so functionality will be reduced.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Wed, 03 Mar 2021 15:42:12 +0000
parents 1a630cddf384
children 347b0f97c295
files gtk3/dw.c
diffstat 1 files changed, 27 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/gtk3/dw.c	Wed Mar 03 07:38:48 2021 +0000
+++ b/gtk3/dw.c	Wed Mar 03 15:42:12 2021 +0000
@@ -3842,25 +3842,23 @@
    int gx, gy;
    int _locked_by_me = FALSE;
    GdkDisplay *display;
-   GdkDevice *device;
-#if GTK_CHECK_VERSION(3,20,0)
-   GdkSeat *seat;
-#else
-   GdkDeviceManager *manager;
-#endif
 
    DW_MUTEX_LOCK;
 #ifdef GDK_WINDOWING_X11
    display = gdk_display_get_default();
+   
+   if(display && GDK_IS_X11_DISPLAY(display))
+   {
 #if GTK_CHECK_VERSION(3,20,0)
-   seat = gdk_display_get_default_seat(display);
-   device = gdk_seat_get_pointer(seat);
+      GdkSeat *seat = gdk_display_get_default_seat(display);
+      GdkDevice *device = gdk_seat_get_pointer(seat);
 #else
-   manager = gdk_display_get_device_manager(display);
-   device = gdk_device_manager_get_client_pointer(manager);
-#endif
-   gdk_window_get_device_position(gdk_x11_window_lookup_for_display(display, GDK_ROOT_WINDOW()),
-                                   device, &gx, &gy, &state);
+      GdkDeviceManager *manager = gdk_display_get_device_manager(display);
+      GdkDevice *device = gdk_device_manager_get_client_pointer(manager);
+#endif
+      gdk_window_get_device_position(gdk_x11_window_lookup_for_display(display, GDK_ROOT_WINDOW()),
+                                     device, &gx, &gy, &state);
+   }
 #endif
    if(x)
       *x = gx;
@@ -3877,28 +3875,27 @@
  */
 void dw_pointer_set_pos(long x, long y)
 {
+#ifdef GDK_WINDOWING_X11
    int _locked_by_me = FALSE;
    GdkDisplay *display;
    GdkDevice *device;
-#if GTK_CHECK_VERSION(3,20,0)
-   GdkSeat *seat;
-#else
-   GdkDeviceManager *manager;
-#endif
-
-   DW_MUTEX_LOCK;
-#ifdef GDK_WINDOWING_X11
+
+   DW_MUTEX_LOCK;
    display = gdk_display_get_default();
+   
+   if(display && GDK_IS_X11_DISPLAY(display))
+   {
 #if GTK_CHECK_VERSION(3,20,0)
-   seat = gdk_display_get_default_seat(display);
-   device = gdk_seat_get_pointer(seat);
+      GdkSeat *seat = gdk_display_get_default_seat(display);
+      GdkDevice *device = gdk_seat_get_pointer(seat);
 #else
-   manager = gdk_display_get_device_manager(display);
-   device = gdk_device_manager_get_client_pointer(manager);
-#endif
-   gdk_device_warp(device, gdk_screen_get_default(), x, y);
-#endif
-   DW_MUTEX_UNLOCK;
+      GdkDeviceManager *manager = gdk_display_get_device_manager(display);
+      GdkDevice *device = gdk_device_manager_get_client_pointer(manager);
+#endif
+      gdk_device_warp(device, gdk_screen_get_default(), x, y);
+   }
+   DW_MUTEX_UNLOCK;
+#endif
 }
 
 #define _DW_TREE_CONTAINER 1
@@ -9527,7 +9524,7 @@
       *horz = 12;
 
       /* See if the current window manager supports _NET_REQUEST_FRAME_EXTENTS */
-      if(gdk_x11_screen_supports_net_wm_hint(gdk_screen_get_default(), request_extents))
+      if(display && GDK_IS_X11_DISPLAY(display) && gdk_x11_screen_supports_net_wm_hint(gdk_screen_get_default(), request_extents))
       {
          Display *xdisplay = GDK_DISPLAY_XDISPLAY(display);
          GdkWindow *root_window = gdk_get_default_root_window();