core: Let the MetaA11yManager handle keyboard events

Plumb the MetaA11yManager into key event handling. This manager
is partly in control of keyboard event propagation, depending on
the screen readers connected.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4217>
This commit is contained in:
Lukáš Tyrychtr 2025-02-05 19:04:34 +01:00 committed by Marge Bot
parent a817d7c137
commit 5eaed6e3f3

View File

@ -24,6 +24,7 @@
#include "core/events.h" #include "core/events.h"
#include "backends/meta-a11y-manager.h"
#include "backends/meta-cursor-tracker-private.h" #include "backends/meta-cursor-tracker-private.h"
#include "backends/meta-dnd-private.h" #include "backends/meta-dnd-private.h"
#include "backends/meta-idle-manager.h" #include "backends/meta-idle-manager.h"
@ -230,6 +231,7 @@ meta_display_handle_event (MetaDisplay *display,
{ {
MetaContext *context = meta_display_get_context (display); MetaContext *context = meta_display_get_context (display);
MetaBackend *backend = meta_context_get_backend (context); MetaBackend *backend = meta_context_get_backend (context);
MetaA11yManager *a11y_manager = meta_backend_get_a11y_manager (backend);
MetaCompositor *compositor = meta_display_get_compositor (display); MetaCompositor *compositor = meta_display_get_compositor (display);
ClutterInputDevice *device; ClutterInputDevice *device;
MetaWindow *window = NULL; MetaWindow *window = NULL;
@ -237,6 +239,7 @@ meta_display_handle_event (MetaDisplay *display,
ClutterEventSequence *sequence; ClutterEventSequence *sequence;
ClutterEventType event_type; ClutterEventType event_type;
gboolean has_grab; gboolean has_grab;
gboolean a11y_grabbed;
MetaTabletActionMapper *mapper; MetaTabletActionMapper *mapper;
#ifdef HAVE_WAYLAND #ifdef HAVE_WAYLAND
MetaWaylandCompositor *wayland_compositor; MetaWaylandCompositor *wayland_compositor;
@ -265,6 +268,13 @@ meta_display_handle_event (MetaDisplay *display,
if (meta_display_process_captured_input (display, event)) if (meta_display_process_captured_input (display, event))
return CLUTTER_EVENT_STOP; return CLUTTER_EVENT_STOP;
if (IS_KEY_EVENT (event_type))
{
a11y_grabbed = meta_a11y_manager_notify_clients (a11y_manager, event);
if (a11y_grabbed)
return CLUTTER_EVENT_STOP;
}
device = clutter_event_get_device (event); device = clutter_event_get_device (event);
clutter_input_pointer_a11y_update (device, event); clutter_input_pointer_a11y_update (device, event);