[mutter] clutter-main: Add hooks to plug kbd accessibility
- From: Olivier Fourdan <ofourdan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter-main: Add hooks to plug kbd accessibility
- Date: Thu, 16 Nov 2017 13:35:17 +0000 (UTC)
commit 7d5e08c8438f486b522219a7b11baa063a4bf5db
Author: Olivier Fourdan <ofourdan redhat com>
Date: Thu Oct 12 15:14:51 2017 +0200
clutter-main: Add hooks to plug kbd accessibility
On X11, when AccessX is enabled, all X11 clients benefit from the
AccessX features, including gnome-shell/mutter, meaning that special
keys like the overview or other shortcuts are also affected.
To achieve the same in Wayland, we need to implement the same features
in clutter main rather than the Wayland backend, so that all depending
code within the compositor but also Wayland clients (which rely on the
compositor to get keyboard events) similarly benefit from the
accessibility features.
Add hooks to the clutter main loop to be able to implement such
features.
https://bugzilla.gnome.org/show_bug.cgi?id=788564
clutter/clutter/clutter-device-manager-private.h | 8 ++++++++
clutter/clutter/clutter-main.c | 17 ++++++++++++++++-
2 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter/clutter-device-manager-private.h
b/clutter/clutter/clutter-device-manager-private.h
index 57423c4..2364fd2 100644
--- a/clutter/clutter/clutter-device-manager-private.h
+++ b/clutter/clutter/clutter-device-manager-private.h
@@ -145,6 +145,9 @@ struct _ClutterInputDevice
guint is_enabled : 1;
};
+typedef void (*ClutterEmitInputDeviceEvent) (ClutterEvent *event,
+ ClutterInputDevice *device);
+
struct _ClutterInputDeviceClass
{
GObjectClass parent_class;
@@ -163,6 +166,11 @@ struct _ClutterInputDeviceClass
gboolean (* is_grouped) (ClutterInputDevice *device,
ClutterInputDevice *other_device);
+
+ /* Keyboard accessbility */
+ void (* process_kbd_a11y_event) (ClutterEvent *event,
+ ClutterInputDevice *device,
+ ClutterEmitInputDeviceEvent emit_event_func);
};
/* Platform-dependent interface */
diff --git a/clutter/clutter/clutter-main.c b/clutter/clutter/clutter-main.c
index 0f85db6..46537f3 100644
--- a/clutter/clutter/clutter-main.c
+++ b/clutter/clutter/clutter-main.c
@@ -2089,6 +2089,21 @@ emit_keyboard_event (ClutterEvent *event,
}
}
+static inline void
+process_key_event (ClutterEvent *event,
+ ClutterInputDevice *device)
+{
+ ClutterInputDeviceClass *device_class = CLUTTER_INPUT_DEVICE_GET_CLASS (device);
+
+ if (device_class->process_kbd_a11y_event)
+ {
+ device_class->process_kbd_a11y_event (event, device, emit_keyboard_event);
+ return;
+ }
+
+ emit_keyboard_event (event, device);
+}
+
static gboolean
is_off_stage (ClutterActor *stage,
gfloat x,
@@ -2176,7 +2191,7 @@ _clutter_process_event_details (ClutterActor *stage,
}
}
- emit_keyboard_event (event, device);
+ process_key_event (event, device);
}
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]