[mutter] clutter/main: Use "is display server" state to decide a11y routing



commit c7429e8aad0dd350d19e4249779fbee2f03c60b4
Author: Jonas Ådahl <jadahl gmail com>
Date:   Thu Jul 9 09:45:07 2020 +0200

    clutter/main: Use "is display server" state to decide a11y routing
    
    We checked if we were using the usig the X11 backend to decide when to
    deal with a11y event posting - in order to make the clutter code less
    windowing system dependent, make this check a check whether we're a
    display server or not, in contrast to a window/compositing manager
    client. This is made into a vfunc ot ClutterBackendClass, implemented by
    MetaClutterBackendNative and MetaClutterBackendX11.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1364

 clutter/clutter/clutter-backend-private.h         |  4 ++++
 clutter/clutter/clutter-backend.c                 |  6 ++++++
 clutter/clutter/clutter-main.c                    | 14 ++++++++------
 src/backends/native/meta-clutter-backend-native.c |  7 +++++++
 src/backends/x11/meta-clutter-backend-x11.c       |  7 +++++++
 5 files changed, 32 insertions(+), 6 deletions(-)
---
diff --git a/clutter/clutter/clutter-backend-private.h b/clutter/clutter/clutter-backend-private.h
index d5dca0d25d..e2db9e9458 100644
--- a/clutter/clutter/clutter-backend-private.h
+++ b/clutter/clutter/clutter-backend-private.h
@@ -93,6 +93,8 @@ struct _ClutterBackendClass
 
   ClutterSeat *         (* get_default_seat)   (ClutterBackend *backend);
 
+  gboolean              (* is_display_server)  (ClutterBackend *backend);
+
   /* signals */
   void (* resolution_changed) (ClutterBackend *backend);
   void (* font_changed)       (ClutterBackend *backend);
@@ -142,6 +144,8 @@ void clutter_backend_set_fallback_resource_scale (ClutterBackend *backend,
 
 float clutter_backend_get_fallback_resource_scale (ClutterBackend *backend);
 
+gboolean clutter_backend_is_display_server (ClutterBackend *backend);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_BACKEND_PRIVATE_H__ */
diff --git a/clutter/clutter/clutter-backend.c b/clutter/clutter/clutter-backend.c
index 14c2539aeb..3c97caa3e7 100644
--- a/clutter/clutter/clutter-backend.c
+++ b/clutter/clutter/clutter-backend.c
@@ -1038,3 +1038,9 @@ clutter_backend_get_fallback_resource_scale (ClutterBackend *backend)
 {
   return backend->fallback_resource_scale;
 }
+
+gboolean
+clutter_backend_is_display_server (ClutterBackend *backend)
+{
+  return CLUTTER_BACKEND_GET_CLASS (backend)->is_display_server (backend);
+}
diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c
index e78a33e2d4..a5fcf84972 100644
--- a/clutter/clutter/clutter-main.c
+++ b/clutter/clutter/clutter-main.c
@@ -67,6 +67,7 @@
 #include "clutter-settings-private.h"
 #include "clutter-stage-manager.h"
 #include "clutter-stage-private.h"
+#include "clutter-backend-private.h"
 
 #ifdef CLUTTER_WINDOWING_X11
 #include "x11/clutter-backend-x11.h"
@@ -1669,6 +1670,11 @@ _clutter_process_event_details (ClutterActor        *stage,
                                 ClutterEvent        *event)
 {
   ClutterInputDevice *device = clutter_event_get_device (event);
+  ClutterMainContext *clutter_context;
+  ClutterBackend *backend;
+
+  clutter_context = _clutter_context_get_default ();
+  backend = clutter_context->backend;
 
   switch (event->type)
     {
@@ -1765,8 +1771,7 @@ _clutter_process_event_details (ClutterActor        *stage,
         break;
 
       case CLUTTER_MOTION:
-#ifdef CLUTTER_WINDOWING_X11
-        if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11) &&
+        if (clutter_backend_is_display_server (backend) &&
             !(event->any.flags & CLUTTER_EVENT_FLAG_SYNTHETIC))
           {
             if (_clutter_is_input_pointer_a11y_enabled (device))
@@ -1777,7 +1782,6 @@ _clutter_process_event_details (ClutterActor        *stage,
                 _clutter_input_pointer_a11y_on_motion_event (device, x, y);
               }
           }
-#endif /* CLUTTER_WINDOWING_X11 */
         /* only the stage gets motion events if they are enabled */
         if (!clutter_stage_get_motion_events_enabled (CLUTTER_STAGE (stage)) &&
             event->any.source == NULL)
@@ -1808,8 +1812,7 @@ _clutter_process_event_details (ClutterActor        *stage,
         G_GNUC_FALLTHROUGH;
       case CLUTTER_BUTTON_PRESS:
       case CLUTTER_BUTTON_RELEASE:
-#ifdef CLUTTER_WINDOWING_X11
-        if (!clutter_check_windowing_backend (CLUTTER_WINDOWING_X11))
+        if (clutter_backend_is_display_server (backend))
           {
             if (_clutter_is_input_pointer_a11y_enabled (device) && (event->type != CLUTTER_MOTION))
               {
@@ -1818,7 +1821,6 @@ _clutter_process_event_details (ClutterActor        *stage,
                                                              event->type == CLUTTER_BUTTON_PRESS);
               }
           }
-#endif /* CLUTTER_WINDOWING_X11 */
       case CLUTTER_SCROLL:
       case CLUTTER_TOUCHPAD_PINCH:
       case CLUTTER_TOUCHPAD_SWIPE:
diff --git a/src/backends/native/meta-clutter-backend-native.c 
b/src/backends/native/meta-clutter-backend-native.c
index ff3ae1a383..841e0f31a1 100644
--- a/src/backends/native/meta-clutter-backend-native.c
+++ b/src/backends/native/meta-clutter-backend-native.c
@@ -119,6 +119,12 @@ meta_clutter_backend_native_get_default_seat (ClutterBackend *backend)
   return CLUTTER_SEAT (backend_native->main_seat);
 }
 
+static gboolean
+meta_clutter_backend_native_is_display_server (ClutterBackend *backend)
+{
+  return TRUE;
+}
+
 static void
 meta_clutter_backend_native_init (MetaClutterBackendNative *clutter_backend_nativen)
 {
@@ -133,6 +139,7 @@ meta_clutter_backend_native_class_init (MetaClutterBackendNativeClass *klass)
   clutter_backend_class->create_stage = meta_clutter_backend_native_create_stage;
   clutter_backend_class->init_events = meta_clutter_backend_native_init_events;
   clutter_backend_class->get_default_seat = meta_clutter_backend_native_get_default_seat;
+  clutter_backend_class->is_display_server = meta_clutter_backend_native_is_display_server;
 }
 
 /**
diff --git a/src/backends/x11/meta-clutter-backend-x11.c b/src/backends/x11/meta-clutter-backend-x11.c
index d2f6136c9d..a8cd1bc90e 100644
--- a/src/backends/x11/meta-clutter-backend-x11.c
+++ b/src/backends/x11/meta-clutter-backend-x11.c
@@ -138,6 +138,12 @@ meta_clutter_backend_x11_get_default_seat (ClutterBackend *backend)
   return CLUTTER_SEAT (backend_x11->core_seat);
 }
 
+static gboolean
+meta_clutter_backend_x11_is_display_server (ClutterBackend *backend)
+{
+  return meta_is_wayland_compositor ();
+}
+
 static void
 meta_clutter_backend_x11_init (MetaClutterBackendX11 *clutter_backend_x11)
 {
@@ -153,4 +159,5 @@ meta_clutter_backend_x11_class_init (MetaClutterBackendX11Class *klass)
   clutter_backend_class->translate_event = meta_clutter_backend_x11_translate_event;
   clutter_backend_class->init_events = meta_clutter_backend_x11_init_events;
   clutter_backend_class->get_default_seat = meta_clutter_backend_x11_get_default_seat;
+  clutter_backend_class->is_display_server = meta_clutter_backend_x11_is_display_server;
 }


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