diff --git a/clutter/clutter/clutter-backend-private.h b/clutter/clutter/clutter-backend-private.h index d5dca0d25..e2db9e945 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 14c2539ae..3c97caa3e 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 e78a33e2d..a5fcf8497 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 ff3ae1a38..841e0f31a 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 d2f6136c9..a8cd1bc90 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; }