[mutter/wip/carlosg/input-thread: 50/96] backends: Manage tablet cursors in backend
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/input-thread: 50/96] backends: Manage tablet cursors in backend
- Date: Tue, 6 Oct 2020 15:50:44 +0000 (UTC)
commit 2a426906aff78b027b83b9d312c9a672b03bf377
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Jul 11 13:47:51 2020 +0200
backends: Manage tablet cursors in backend
Instead of letting the wayland bits maintain an always-software
cursor renderer, let the cursor renderer be managed by the backend,
and only hook to it (as we do for pointer cursor) in the wayland
bits.
ATM, make the cursor renderer still always-software, although
ideally we should allow moving the HW cursor management between
renderers.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403
src/backends/native/meta-seat-native.c | 40 +++++++++++++++++++++++++++++++---
src/backends/native/meta-seat-native.h | 1 +
src/wayland/meta-wayland-tablet-tool.c | 9 +++++++-
3 files changed, 46 insertions(+), 4 deletions(-)
---
diff --git a/src/backends/native/meta-seat-native.c b/src/backends/native/meta-seat-native.c
index 7a1ea99a85..8220ff2ac9 100644
--- a/src/backends/native/meta-seat-native.c
+++ b/src/backends/native/meta-seat-native.c
@@ -1832,6 +1832,31 @@ process_tablet_axis (MetaSeatNative *seat,
}
}
+static void
+update_tablet_cursor_state (MetaSeatNative *seat,
+ ClutterInputDevice *device,
+ gboolean in)
+{
+ if (in)
+ {
+ MetaCursorRenderer *renderer;
+
+ if (!seat->tablet_cursors)
+ {
+ seat->tablet_cursors = g_hash_table_new_full (NULL, NULL, NULL,
+ g_object_unref);
+ }
+
+ renderer = meta_cursor_renderer_new (meta_get_backend ());
+ g_hash_table_insert (seat->tablet_cursors, device, renderer);
+ }
+ else
+ {
+ if (seat->tablet_cursors)
+ g_hash_table_remove (seat->tablet_cursors, device);
+ }
+}
+
static gboolean
process_device_event (MetaSeatNative *seat,
struct libinput_event *event)
@@ -2239,18 +2264,22 @@ process_device_event (MetaSeatNative *seat,
libinput_event_get_tablet_tool_event (event);
struct libinput_tablet_tool *libinput_tool = NULL;
enum libinput_tablet_tool_proximity_state state;
+ gboolean in;
state = libinput_event_tablet_tool_get_proximity_state (tablet_event);
time = libinput_event_tablet_tool_get_time_usec (tablet_event);
device = libinput_device_get_user_data (libinput_device);
+ in = state == LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_IN;
libinput_tool = libinput_event_tablet_tool_get_tool (tablet_event);
- if (state == LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_IN)
+ if (in)
input_device_update_tool (device, libinput_tool);
- notify_proximity (device, time, state == LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_IN);
- if (state == LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_OUT)
+ notify_proximity (device, time, in);
+ if (!in)
input_device_update_tool (device, NULL);
+
+ update_tablet_cursor_state (seat, device, in);
break;
}
case LIBINPUT_EVENT_TABLET_TOOL_BUTTON:
@@ -2611,6 +2640,7 @@ meta_seat_native_finalize (GObject *object)
if (seat->touch_states)
g_hash_table_destroy (seat->touch_states);
+ g_clear_pointer (&seat->tablet_cursors, g_hash_table_unref);
g_object_unref (seat->cursor_renderer);
g_object_unref (seat->udev_client);
@@ -3288,5 +3318,9 @@ meta_seat_native_get_cursor_renderer (MetaSeatNative *seat,
return seat->cursor_renderer;
}
+ if (seat->tablet_cursors &&
+ clutter_input_device_get_device_type (device) == CLUTTER_TABLET_DEVICE)
+ return g_hash_table_lookup (seat->tablet_cursors, device);
+
return NULL;
}
diff --git a/src/backends/native/meta-seat-native.h b/src/backends/native/meta-seat-native.h
index 8e4e2a663e..8c04bfe125 100644
--- a/src/backends/native/meta-seat-native.h
+++ b/src/backends/native/meta-seat-native.h
@@ -85,6 +85,7 @@ struct _MetaSeatNative
MetaKeymapNative *keymap;
MetaCursorRenderer *cursor_renderer;
+ GHashTable *tablet_cursors;
GUdevClient *udev_client;
guint tablet_mode_switch_state : 1;
diff --git a/src/wayland/meta-wayland-tablet-tool.c b/src/wayland/meta-wayland-tablet-tool.c
index e88d7245c6..9a89a3f4b3 100644
--- a/src/wayland/meta-wayland-tablet-tool.c
+++ b/src/wayland/meta-wayland-tablet-tool.c
@@ -932,7 +932,14 @@ meta_wayland_tablet_tool_update (MetaWaylandTabletTool *tool,
break;
case CLUTTER_PROXIMITY_IN:
if (!tool->cursor_renderer)
- tool->cursor_renderer = meta_cursor_renderer_new (meta_get_backend ());
+ {
+ MetaCursorRenderer *renderer;
+
+ renderer =
+ meta_backend_get_cursor_renderer_for_device (meta_get_backend (),
+ clutter_event_get_source_device (event));
+ g_set_object (&tool->cursor_renderer, renderer);
+ }
tool->current_tablet =
meta_wayland_tablet_seat_lookup_tablet (tool->seat,
clutter_event_get_source_device (event));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]