gdk: Simplify gdk_display_supports_input_shapes
authorMatthias Clasen <mclasen@redhat.com>
Mon, 18 May 2020 02:05:24 +0000 (22:05 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 18 May 2020 02:05:24 +0000 (22:05 -0400)
Make this a display property, and do away with
the vfunc in favor of a private setter, to match
how we handle other display characteristics.

gdk/broadway/gdkdisplay-broadway.c
gdk/gdkdisplay.c
gdk/gdkdisplay.h
gdk/gdkdisplayprivate.h
gdk/wayland/gdkdisplay-wayland.c
gdk/win32/gdkdisplay-win32.c
gdk/x11/gdkdisplay-x11.c

index 00d4a79b3859b36b294eca0ca5ce205aa612fac4..5a88b82064cb443d9592f0cd05b1f64d9ad1d933 100644 (file)
@@ -56,6 +56,8 @@ G_DEFINE_TYPE (GdkBroadwayDisplay, gdk_broadway_display, GDK_TYPE_DISPLAY)
 static void
 gdk_broadway_display_init (GdkBroadwayDisplay *display)
 {
+  gdk_display_set_input_shapes (GDK_DISPLAY (display), FALSE);
+
   display->id_ht = g_hash_table_new (NULL, NULL);
 
   display->monitor = g_object_new (GDK_TYPE_BROADWAY_MONITOR,
@@ -313,12 +315,6 @@ gdk_broadway_display_notify_startup_complete (GdkDisplay  *display,
 {
 }
 
-static gboolean
-gdk_broadway_display_supports_input_shapes (GdkDisplay *display)
-{
-  return FALSE;
-}
-
 static gulong
 gdk_broadway_display_get_next_serial (GdkDisplay *display)
 {
@@ -446,7 +442,6 @@ gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
   display_class->has_pending = gdk_broadway_display_has_pending;
   display_class->queue_events = _gdk_broadway_display_queue_events;
   display_class->get_default_group = gdk_broadway_display_get_default_group;
-  display_class->supports_input_shapes = gdk_broadway_display_supports_input_shapes;
 
   display_class->get_next_serial = gdk_broadway_display_get_next_serial;
   display_class->notify_startup_complete = gdk_broadway_display_notify_startup_complete;
index de17527e155c4dc73deee85d4c9d3a2490c3ff10..e67471e20d47c8d44f593a932c0132b60516cf88 100644 (file)
@@ -71,6 +71,7 @@ enum
   PROP_0,
   PROP_COMPOSITED,
   PROP_RGBA,
+  PROP_INPUT_SHAPES,
   LAST_PROP
 };
 
@@ -113,6 +114,10 @@ gdk_display_get_property (GObject    *object,
       g_value_set_boolean (value, gdk_display_is_rgba (display));
       break;
 
+    case PROP_INPUT_SHAPES:
+      g_value_set_boolean (value, gdk_display_supports_input_shapes (display));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -193,6 +198,19 @@ gdk_display_class_init (GdkDisplayClass *class)
                           TRUE,
                           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
 
+  /**
+   * GdkDisplay:input-shapes:
+   *
+   * %TRUE if the display supports input shapes. See
+   * gdk_display_supports_input_shapes() for details.
+   */
+  props[PROP_INPUT_SHAPES] =
+    g_param_spec_boolean ("input-shapes",
+                          P_("Input shapes"),
+                          P_("Input shapes"),
+                          TRUE,
+                          G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   /**
@@ -322,6 +340,7 @@ gdk_display_init (GdkDisplay *display)
 
   display->composited = TRUE;
   display->rgba = TRUE;
+  display->input_shapes = TRUE;
 }
 
 static void
@@ -1108,7 +1127,21 @@ gdk_display_supports_input_shapes (GdkDisplay *display)
 {
   g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
 
-  return GDK_DISPLAY_GET_CLASS (display)->supports_input_shapes (display);
+  return display->input_shapes;
+}
+
+void
+gdk_display_set_input_shapes (GdkDisplay *display,
+                              gboolean    input_shapes)
+{
+  g_return_if_fail (GDK_IS_DISPLAY (display));
+
+  if (display->input_shapes == input_shapes)
+    return;
+
+  display->input_shapes = input_shapes;
+
+  g_object_notify_by_pspec (G_OBJECT (display), props[PROP_INPUT_SHAPES]);
 }
 
 static GdkAppLaunchContext *
index 4dd046e91dd1f16b90cb8c5b660849160812f422..0a6f6ef2c038f1a9eed6d0f4be6229a2cf23581c 100644 (file)
@@ -65,6 +65,8 @@ GDK_AVAILABLE_IN_ALL
 gboolean    gdk_display_is_composited      (GdkDisplay  *display);
 GDK_AVAILABLE_IN_ALL
 gboolean    gdk_display_is_rgba            (GdkDisplay  *display);
+GDK_AVAILABLE_IN_ALL
+gboolean    gdk_display_supports_input_shapes (GdkDisplay    *display);
 
 GDK_AVAILABLE_IN_ALL
 GdkEvent* gdk_display_get_event  (GdkDisplay     *display);
@@ -87,8 +89,6 @@ GdkClipboard *          gdk_display_get_clipboard               (GdkDisplay
 GDK_AVAILABLE_IN_ALL
 GdkClipboard *          gdk_display_get_primary_clipboard       (GdkDisplay     *display);
 
-GDK_AVAILABLE_IN_ALL
-gboolean gdk_display_supports_input_shapes     (GdkDisplay    *display);
 GDK_AVAILABLE_IN_ALL
 void     gdk_display_notify_startup_complete   (GdkDisplay    *display,
                                                 const gchar   *startup_id);
index 0ba63c3358aaf054e507afb92e712fcacfd28e44..c1247d1954946d6e4e522374198c1b09c71c94d1 100644 (file)
@@ -102,6 +102,7 @@ struct _GdkDisplay
 #endif /* GDK_RENDERING_VULKAN */
   guint rgba : 1;
   guint composited : 1;
+  guint input_shapes : 1;
 
   GdkDebugFlags debug_flags;
 
@@ -124,7 +125,6 @@ struct _GdkDisplayClass
   void                       (*queue_events)       (GdkDisplay *display);
   void                       (*make_default)       (GdkDisplay *display);
   GdkSurface *               (*get_default_group)  (GdkDisplay *display);
-  gboolean                   (*supports_input_shapes) (GdkDisplay *display);
 
   GdkAppLaunchContext *      (*get_app_launch_context) (GdkDisplay *display);
 
@@ -232,6 +232,8 @@ void                gdk_display_set_rgba              (GdkDisplay       *display
                                                        gboolean          rgba);
 void                gdk_display_set_composited        (GdkDisplay       *display,
                                                        gboolean          composited);
+void                gdk_display_set_input_shapes      (GdkDisplay       *display,
+                                                       gboolean          input_shapes);
 
 void                gdk_display_add_seat              (GdkDisplay       *display,
                                                        GdkSeat          *seat);
index ca608cee0a734a22303208c7c8e817bf9a2f649b..f323a732f6439d75369e80132266248c5ac66a46 100644 (file)
@@ -848,12 +848,6 @@ gdk_wayland_display_get_default_group (GdkDisplay *display)
   return NULL;
 }
 
-static gboolean
-gdk_wayland_display_supports_input_shapes (GdkDisplay *display)
-{
-  return TRUE;
-}
-
 static gulong
 gdk_wayland_display_get_next_serial (GdkDisplay *display)
 {
@@ -1013,7 +1007,6 @@ gdk_wayland_display_class_init (GdkWaylandDisplayClass *class)
   display_class->has_pending = gdk_wayland_display_has_pending;
   display_class->queue_events = _gdk_wayland_display_queue_events;
   display_class->get_default_group = gdk_wayland_display_get_default_group;
-  display_class->supports_input_shapes = gdk_wayland_display_supports_input_shapes;
   display_class->get_app_launch_context = _gdk_wayland_display_get_app_launch_context;
   display_class->get_next_serial = gdk_wayland_display_get_next_serial;
   display_class->get_startup_notification_id = gdk_wayland_display_get_startup_notification_id;
index ed579f34dcd2ed50052aa03324a9623f98375666..11fc4aecd75d044879fd7f449a22f400b85e45c0 100644 (file)
@@ -622,15 +622,6 @@ gdk_win32_display_get_default_group (GdkDisplay *display)
   return NULL;
 }
 
-static gboolean
-gdk_win32_display_supports_input_shapes (GdkDisplay *display)
-{
-  g_return_val_if_fail (GDK_IS_DISPLAY (display), FALSE);
-
-  /* Partially supported, see WM_NCHITTEST handler. */
-  return TRUE;
-}
-
 static void
 gdk_win32_display_beep (GdkDisplay *display)
 {
@@ -1072,8 +1063,6 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
   display_class->queue_events = _gdk_win32_display_queue_events;
   display_class->get_default_group = gdk_win32_display_get_default_group;
 
-  display_class->supports_input_shapes = gdk_win32_display_supports_input_shapes;
-
   //? display_class->get_app_launch_context = _gdk_win32_display_get_app_launch_context;
 
   display_class->get_next_serial = gdk_win32_display_get_next_serial;
index f5c4f630a3af5650860701682cf89525e1938d2b..f172f945534f4f6d7d839ac503c9f847e9b10c85 100644 (file)
@@ -1493,6 +1493,8 @@ gdk_x11_display_open (const gchar *display_name)
 #endif
     }
 
+  gdk_display_set_input_shapes (display, display_x11->have_input_shapes);
+
   display_x11->trusted_client = TRUE;
   {
     Window root, child;
@@ -2309,13 +2311,6 @@ gdk_x11_display_get_user_time (GdkDisplay *display)
   return GDK_X11_DISPLAY (display)->user_time;
 }
 
-static gboolean
-gdk_x11_display_supports_input_shapes (GdkDisplay *display)
-{
-  return GDK_X11_DISPLAY (display)->have_input_shapes;
-}
-
-
 /**
  * gdk_x11_display_get_startup_notification_id:
  * @display: (type GdkX11Display): a #GdkDisplay
@@ -2939,7 +2934,6 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class)
   display_class->has_pending = gdk_x11_display_has_pending;
   display_class->queue_events = _gdk_x11_display_queue_events;
   display_class->get_default_group = gdk_x11_display_get_default_group;
-  display_class->supports_input_shapes = gdk_x11_display_supports_input_shapes;
   display_class->get_app_launch_context = _gdk_x11_display_get_app_launch_context;
 
   display_class->get_next_serial = gdk_x11_display_get_next_serial;