[mutter/wip/carlosg/clutter-seat: 22/22] backends: Move warp_pointer() to ClutterSeat
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/clutter-seat: 22/22] backends: Move warp_pointer() to ClutterSeat
- Date: Thu, 30 Jan 2020 17:16:01 +0000 (UTC)
commit 1e9682b4172635914dabdfa72b4d9872d83e4ed6
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Oct 9 18:01:34 2019 +0200
backends: Move warp_pointer() to ClutterSeat
The onscreen pointer sprite is a per-seat element, so it makes sense
to move pointer warping over there too.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/852
clutter/clutter/clutter-seat.c | 10 +++++++
clutter/clutter/clutter-seat.h | 9 ++++++
src/backends/meta-backend-private.h | 9 ------
src/backends/meta-backend.c | 14 ++-------
src/backends/native/meta-backend-native.c | 21 --------------
src/backends/native/meta-seat-native.c | 40 +++++++++++---------------
src/backends/native/meta-seat-native.h | 5 ----
src/backends/x11/meta-backend-x11.c | 17 -----------
src/backends/x11/meta-seat-x11.c | 16 +++++++++++
src/core/window.c | 6 ++--
src/wayland/meta-pointer-confinement-wayland.c | 5 +++-
src/wayland/meta-wayland-pointer-constraints.c | 7 ++++-
12 files changed, 67 insertions(+), 92 deletions(-)
---
diff --git a/clutter/clutter/clutter-seat.c b/clutter/clutter/clutter-seat.c
index a1bb4458d..6ff1fffe9 100644
--- a/clutter/clutter/clutter-seat.c
+++ b/clutter/clutter/clutter-seat.c
@@ -546,3 +546,13 @@ clutter_seat_compress_motion (ClutterSeat *seat,
if (seat_class->compress_motion)
seat_class->compress_motion (seat, event, to_discard);
}
+
+void
+clutter_seat_warp_pointer (ClutterSeat *seat,
+ int x,
+ int y)
+{
+ g_return_if_fail (CLUTTER_IS_SEAT (seat));
+
+ CLUTTER_SEAT_GET_CLASS (seat)->warp_pointer (seat, x, y);
+}
diff --git a/clutter/clutter/clutter-seat.h b/clutter/clutter/clutter-seat.h
index 916e61d57..f8754f647 100644
--- a/clutter/clutter/clutter-seat.h
+++ b/clutter/clutter/clutter-seat.h
@@ -106,6 +106,10 @@ struct _ClutterSeatClass
ClutterEvent *event,
const ClutterEvent *to_discard);
+ void (* warp_pointer) (ClutterSeat *seat,
+ int x,
+ int y);
+
/* Event platform data */
void (* copy_event_data) (ClutterSeat *seat,
const ClutterEvent *src,
@@ -166,4 +170,9 @@ void clutter_seat_compress_motion (ClutterSeat *seat,
ClutterEvent *event,
const ClutterEvent *to_discard);
+CLUTTER_EXPORT
+void clutter_seat_warp_pointer (ClutterSeat *seat,
+ int x,
+ int y);
+
#endif /* CLUTTER_SEAT_H */
diff --git a/src/backends/meta-backend-private.h b/src/backends/meta-backend-private.h
index 10858e041..f5423c12b 100644
--- a/src/backends/meta-backend-private.h
+++ b/src/backends/meta-backend-private.h
@@ -82,11 +82,6 @@ struct _MetaBackendClass
void (* finish_touch_sequence) (MetaBackend *backend,
ClutterEventSequence *sequence,
MetaSequenceState state);
-
- void (* warp_pointer) (MetaBackend *backend,
- int x,
- int y);
-
MetaLogicalMonitor * (* get_current_logical_monitor) (MetaBackend *backend);
void (* set_keymap) (MetaBackend *backend,
@@ -145,10 +140,6 @@ void meta_backend_finish_touch_sequence (MetaBackend *backend,
ClutterEventSequence *sequence,
MetaSequenceState state);
-void meta_backend_warp_pointer (MetaBackend *backend,
- int x,
- int y);
-
MetaLogicalMonitor * meta_backend_get_current_logical_monitor (MetaBackend *backend);
struct xkb_keymap * meta_backend_get_keymap (MetaBackend *backend);
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index 9d133c5d4..9690d8b65 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -237,6 +237,7 @@ reset_pointer_position (MetaBackend *backend)
{
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
MetaMonitorManager *monitor_manager = priv->monitor_manager;
+ ClutterSeat *seat = clutter_backend_get_default_seat (priv->clutter_backend);
MetaLogicalMonitor *primary;
primary =
@@ -244,7 +245,7 @@ reset_pointer_position (MetaBackend *backend)
/* Move the pointer out of the way to avoid hovering over reactive
* elements (e.g. users list at login) causing undesired behaviour. */
- meta_backend_warp_pointer (backend,
+ clutter_seat_warp_pointer (seat,
primary->rect.x + primary->rect.width * 0.9,
primary->rect.y + primary->rect.height * 0.9);
}
@@ -1067,17 +1068,6 @@ meta_backend_finish_touch_sequence (MetaBackend *backend,
state);
}
-/**
- * meta_backend_warp_pointer: (skip)
- */
-void
-meta_backend_warp_pointer (MetaBackend *backend,
- int x,
- int y)
-{
- META_BACKEND_GET_CLASS (backend)->warp_pointer (backend, x, y);
-}
-
MetaLogicalMonitor *
meta_backend_get_current_logical_monitor (MetaBackend *backend)
{
diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c
index b0cd1c31a..f29aec16e 100644
--- a/src/backends/native/meta-backend-native.c
+++ b/src/backends/native/meta-backend-native.c
@@ -403,25 +403,6 @@ meta_backend_native_create_input_settings (MetaBackend *backend)
return g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE, NULL);
}
-static void
-meta_backend_native_warp_pointer (MetaBackend *backend,
- int x,
- int y)
-{
- ClutterSeat *seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
- ClutterInputDevice *device = clutter_seat_get_pointer (seat);
- MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
-
- /* XXX */
- guint32 time_ = 0;
-
- /* Warp the input device pointer state. */
- meta_seat_native_warp_pointer (device, time_, x, y);
-
- /* Warp displayed pointer cursor. */
- meta_cursor_tracker_update_position (cursor_tracker, x, y);
-}
-
static MetaLogicalMonitor *
meta_backend_native_get_current_logical_monitor (MetaBackend *backend)
{
@@ -704,8 +685,6 @@ meta_backend_native_class_init (MetaBackendNativeClass *klass)
backend_class->create_renderer = meta_backend_native_create_renderer;
backend_class->create_input_settings = meta_backend_native_create_input_settings;
- backend_class->warp_pointer = meta_backend_native_warp_pointer;
-
backend_class->get_current_logical_monitor = meta_backend_native_get_current_logical_monitor;
backend_class->set_keymap = meta_backend_native_set_keymap;
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c
index a6466e7d0..439d2a3cb 100644
--- a/src/backends/native/meta-seat-native.c
+++ b/src/backends/native/meta-seat-native.c
@@ -32,6 +32,7 @@
#include <linux/input.h>
#include <math.h>
+#include "backends/meta-cursor-tracker-private.h"
#include "backends/native/meta-seat-native.h"
#include "backends/native/meta-event-native.h"
#include "backends/native/meta-input-device-native.h"
@@ -2612,6 +2613,20 @@ meta_seat_native_compress_motion (ClutterSeat *seat,
dy_unaccel + dst_dy_unaccel);
}
+static void
+meta_seat_native_warp_pointer (ClutterSeat *seat,
+ int x,
+ int y)
+{
+ MetaSeatNative *seat_native = META_SEAT_NATIVE (seat);
+ MetaBackend *backend = meta_get_backend ();
+ MetaCursorTracker *cursor_tracker = meta_backend_get_cursor_tracker (backend);
+
+ notify_absolute_motion (seat_native->core_pointer, 0, x, y, NULL);
+
+ meta_cursor_tracker_update_position (cursor_tracker, x, y);
+}
+
static void
meta_seat_native_class_init (MetaSeatNativeClass *klass)
{
@@ -2635,6 +2650,7 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
seat_class->create_virtual_device = meta_seat_native_create_virtual_device;
seat_class->get_supported_virtual_device_types = meta_seat_native_get_supported_virtual_device_types;
seat_class->compress_motion = meta_seat_native_compress_motion;
+ seat_class->warp_pointer = meta_seat_native_warp_pointer;
props[PROP_SEAT_ID] =
g_param_spec_string ("seat-id",
@@ -2906,30 +2922,6 @@ meta_seat_native_update_xkb_state (MetaSeatNative *seat)
meta_seat_native_sync_leds (seat);
}
-/**
- * meta_seat_native_warp_pointer:
- * @pointer_device: the pointer device to warp
- * @time: the timestamp for the warp event
- * @x: the new X position of the pointer
- * @y: the new Y position of the pointer
- *
- * Warps the pointer to a new location. Technically, this is
- * processed the same way as an absolute motion event from
- * libinput: it simply generates an absolute motion event that
- * will be processed on the next iteration of the mainloop.
- *
- * The intended use for this is for display servers that need
- * to warp cursor the cursor to a new location.
- */
-void
-meta_seat_native_warp_pointer (ClutterInputDevice *pointer_device,
- uint32_t time_,
- int x,
- int y)
-{
- notify_absolute_motion (pointer_device, ms2us(time_), x, y, NULL);
-}
-
gint
meta_seat_native_acquire_device_id (MetaSeatNative *seat)
{
diff --git a/src/backends/native/meta-seat-native.h b/src/backends/native/meta-seat-native.h
index af8af1f36..a351d9327 100644
--- a/src/backends/native/meta-seat-native.h
+++ b/src/backends/native/meta-seat-native.h
@@ -295,11 +295,6 @@ void meta_seat_native_remove_filter (MetaSeatNative *seat,
MetaEvdevFilterFunc func,
gpointer data);
-void meta_seat_native_warp_pointer (ClutterInputDevice *pointer_device,
- uint32_t time_,
- int x,
- int y);
-
struct xkb_state * meta_seat_native_get_xkb_state (MetaSeatNative *seat);
void meta_seat_native_set_keyboard_map (MetaSeatNative *seat,
diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c
index 9505f7de4..515d2a8c5 100644
--- a/src/backends/x11/meta-backend-x11.c
+++ b/src/backends/x11/meta-backend-x11.c
@@ -670,22 +670,6 @@ meta_backend_x11_finish_touch_sequence (MetaBackend *backend,
}
}
-static void
-meta_backend_x11_warp_pointer (MetaBackend *backend,
- int x,
- int y)
-{
- MetaBackendX11 *x11 = META_BACKEND_X11 (backend);
- MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11);
-
- XIWarpPointer (priv->xdisplay,
- META_VIRTUAL_CORE_POINTER_ID,
- None,
- meta_backend_x11_get_xwindow (x11),
- 0, 0, 0, 0,
- x, y);
-}
-
static MetaLogicalMonitor *
meta_backend_x11_get_current_logical_monitor (MetaBackend *backend)
{
@@ -862,7 +846,6 @@ meta_backend_x11_class_init (MetaBackendX11Class *klass)
backend_class->grab_device = meta_backend_x11_grab_device;
backend_class->ungrab_device = meta_backend_x11_ungrab_device;
backend_class->finish_touch_sequence = meta_backend_x11_finish_touch_sequence;
- backend_class->warp_pointer = meta_backend_x11_warp_pointer;
backend_class->get_current_logical_monitor = meta_backend_x11_get_current_logical_monitor;
backend_class->get_keymap = meta_backend_x11_get_keymap;
backend_class->get_keymap_layout_group = meta_backend_x11_get_keymap_layout_group;
diff --git a/src/backends/x11/meta-seat-x11.c b/src/backends/x11/meta-seat-x11.c
index 8c8fdc2f9..9a43a2762 100644
--- a/src/backends/x11/meta-seat-x11.c
+++ b/src/backends/x11/meta-seat-x11.c
@@ -1500,6 +1500,21 @@ meta_seat_x11_get_supported_virtual_device_types (ClutterSeat *seat)
CLUTTER_VIRTUAL_DEVICE_TYPE_POINTER);
}
+static void
+meta_seat_x11_warp_pointer (ClutterSeat *seat,
+ int x,
+ int y)
+{
+ MetaSeatX11 *seat_x11 = META_SEAT_X11 (seat);
+
+ XIWarpPointer (clutter_x11_get_default_display (),
+ seat_x11->pointer_id,
+ None,
+ clutter_x11_get_root_window (),
+ 0, 0, 0, 0,
+ x, y);
+}
+
static void
meta_seat_x11_class_init (MetaSeatX11Class *klass)
{
@@ -1521,6 +1536,7 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
seat_class->apply_kbd_a11y_settings = meta_seat_x11_apply_kbd_a11y_settings;
seat_class->create_virtual_device = meta_seat_x11_create_virtual_device;
seat_class->get_supported_virtual_device_types = meta_seat_x11_get_supported_virtual_device_types;
+ seat_class->warp_pointer = meta_seat_x11_warp_pointer;
props[PROP_OPCODE] =
g_param_spec_int ("opcode",
diff --git a/src/core/window.c b/src/core/window.c
index 7480dfe69..d7d3e1b59 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -6858,8 +6858,10 @@ warp_grab_pointer (MetaWindow *window,
&display->grab_anchor_window_pos);
{
- MetaBackend *backend = meta_get_backend ();
- meta_backend_warp_pointer (backend, *x, *y);
+ ClutterSeat *seat;
+
+ seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
+ clutter_seat_warp_pointer (seat, *x, *y);
}
if (meta_x11_error_trap_pop_with_return (display->x11_display) != Success)
diff --git a/src/wayland/meta-pointer-confinement-wayland.c b/src/wayland/meta-pointer-confinement-wayland.c
index d5491e9f4..7a7b22c22 100644
--- a/src/wayland/meta-pointer-confinement-wayland.c
+++ b/src/wayland/meta-pointer-confinement-wayland.c
@@ -643,6 +643,7 @@ meta_pointer_confinement_wayland_maybe_warp (MetaPointerConfinementWayland *self
GArray *borders;
float closest_distance_2 = FLT_MAX;
MetaBorder *closest_border = NULL;
+ ClutterSeat *seat;
unsigned int i;
float x;
float y;
@@ -667,7 +668,9 @@ meta_pointer_confinement_wayland_maybe_warp (MetaPointerConfinementWayland *self
warp_to_behind_border (closest_border, &sx, &sy);
meta_wayland_surface_get_absolute_coordinates (surface, sx, sy, &x, &y);
- meta_backend_warp_pointer (meta_get_backend (), (int)x, (int)y);
+
+ seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
+ clutter_seat_warp_pointer (seat, (int)x, (int)y);
}
cairo_region_destroy (region);
diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c
index d0cc92d31..14ac75ee3 100644
--- a/src/wayland/meta-wayland-pointer-constraints.c
+++ b/src/wayland/meta-wayland-pointer-constraints.c
@@ -923,7 +923,12 @@ locked_pointer_destroy (struct wl_client *client,
wl_resource_destroy (resource);
if (warp_pointer)
- meta_backend_warp_pointer (meta_get_backend (), warp_x, warp_y);
+ {
+ ClutterSeat *seat;
+
+ seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
+ clutter_seat_warp_pointer (seat, warp_x, warp_y);
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]