clutter: Move keyboard a11y from ClutterDeviceManager to ClutterSeat

A11y in general may be considered a per-seat feature.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/852
This commit is contained in:
Carlos Garnacho
2019-10-01 18:45:43 +02:00
parent 34ce39f8dc
commit bc7ba8c875
13 changed files with 174 additions and 165 deletions

View File

@ -68,6 +68,7 @@ struct _DeviceMappingInfo
struct _MetaInputSettingsPrivate
{
ClutterDeviceManager *device_manager;
ClutterSeat *seat;
MetaMonitorManager *monitor_manager;
gulong monitors_changed_id;
@ -1247,6 +1248,8 @@ load_keyboard_a11y_settings (MetaInputSettings *input_settings,
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
ClutterKbdA11ySettings kbd_a11y_settings = { 0 };
ClutterInputDevice *core_keyboard;
ClutterBackend *backend = clutter_get_default_backend ();
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
guint i;
core_keyboard = clutter_device_manager_get_core_device (priv->device_manager, CLUTTER_KEYBOARD_DEVICE);
@ -1273,14 +1276,14 @@ load_keyboard_a11y_settings (MetaInputSettings *input_settings,
kbd_a11y_settings.mousekeys_accel_time = g_settings_get_int (priv->keyboard_a11y_settings,
"mousekeys-accel-time");
clutter_device_manager_set_kbd_a11y_settings (priv->device_manager, &kbd_a11y_settings);
clutter_seat_set_kbd_a11y_settings (seat, &kbd_a11y_settings);
}
static void
on_keyboard_a11y_settings_changed (ClutterDeviceManager *device_manager,
ClutterKeyboardA11yFlags new_flags,
ClutterKeyboardA11yFlags what_changed,
MetaInputSettings *input_settings)
on_keyboard_a11y_settings_changed (ClutterSeat *seat,
ClutterKeyboardA11yFlags new_flags,
ClutterKeyboardA11yFlags what_changed,
MetaInputSettings *input_settings)
{
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
guint i;
@ -1953,6 +1956,7 @@ meta_input_settings_init (MetaInputSettings *settings)
MetaInputSettingsPrivate *priv;
priv = meta_input_settings_get_instance_private (settings);
priv->seat = clutter_backend_get_default_seat (clutter_get_default_backend ());
priv->device_manager = clutter_device_manager_get_default ();
g_signal_connect (priv->device_manager, "device-added",
G_CALLBACK (meta_input_settings_device_added), settings);
@ -1986,7 +1990,7 @@ meta_input_settings_init (MetaInputSettings *settings)
priv->keyboard_a11y_settings = g_settings_new ("org.gnome.desktop.a11y.keyboard");
g_signal_connect (priv->keyboard_a11y_settings, "changed",
G_CALLBACK (meta_input_keyboard_a11y_settings_changed), settings);
g_signal_connect (priv->device_manager, "kbd-a11y-flags-changed",
g_signal_connect (priv->seat, "kbd-a11y-flags-changed",
G_CALLBACK (on_keyboard_a11y_settings_changed), settings);
priv->mouse_a11y_settings = g_settings_new ("org.gnome.desktop.a11y.mouse");

View File

@ -175,18 +175,6 @@ meta_device_manager_native_compress_motion (ClutterDeviceManager *device_manger,
dy_unaccel + dst_dy_unaccel);
}
static void
meta_device_manager_native_apply_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *settings)
{
ClutterInputDevice *device;
device = meta_device_manager_native_get_core_device (device_manager, CLUTTER_KEYBOARD_DEVICE);
if (device)
meta_input_device_native_apply_kbd_a11y_settings (META_INPUT_DEVICE_NATIVE (device),
settings);
}
static void
on_device_added (ClutterSeat *seat,
ClutterInputDevice *parent,
@ -251,7 +239,6 @@ meta_device_manager_native_class_init (MetaDeviceManagerNativeClass *klass)
manager_class->create_virtual_device = meta_device_manager_native_create_virtual_device;
manager_class->get_supported_virtual_device_types = meta_device_manager_native_get_supported_virtual_device_types;
manager_class->compress_motion = meta_device_manager_native_compress_motion;
manager_class->apply_kbd_a11y_settings = meta_device_manager_native_apply_kbd_a11y_settings;
}
static void

View File

@ -249,10 +249,11 @@ clear_slow_keys (MetaInputDeviceNative *device)
static guint
get_slow_keys_delay (ClutterInputDevice *device)
{
MetaInputDeviceNative *device_native = META_INPUT_DEVICE_NATIVE (device);
ClutterKbdA11ySettings a11y_settings;
clutter_device_manager_get_kbd_a11y_settings (device->device_manager,
&a11y_settings);
clutter_seat_get_kbd_a11y_settings (CLUTTER_SEAT (device_native->seat),
&a11y_settings);
/* Settings use int, we use uint, make sure we dont go negative */
return MAX (0, a11y_settings.slowkeys_delay);
}
@ -344,10 +345,11 @@ stop_slow_keys (ClutterEvent *event,
static guint
get_debounce_delay (ClutterInputDevice *device)
{
MetaInputDeviceNative *device_native = META_INPUT_DEVICE_NATIVE (device);
ClutterKbdA11ySettings a11y_settings;
clutter_device_manager_get_kbd_a11y_settings (device->device_manager,
&a11y_settings);
clutter_seat_get_kbd_a11y_settings (CLUTTER_SEAT (device_native->seat),
&a11y_settings);
/* Settings use int, we use uint, make sure we dont go negative */
return MAX (0, a11y_settings.debounce_delay);
}
@ -424,7 +426,7 @@ key_event_is_modifier (ClutterEvent *event)
static void
notify_stickykeys_mask (MetaInputDeviceNative *device)
{
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->device_manager,
g_signal_emit_by_name (device->seat,
"kbd-a11y-mods-state-changed",
device->stickykeys_latched_mask,
device->stickykeys_locked_mask);
@ -496,7 +498,7 @@ notify_stickykeys_change (MetaInputDeviceNative *device)
device->stickykeys_depressed_mask = 0;
update_internal_xkb_state (device, 0, 0);
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->device_manager,
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
"kbd-a11y-flags-changed",
device->a11y_flags,
CLUTTER_A11Y_STICKY_KEYS_ENABLED);
@ -529,7 +531,7 @@ set_slowkeys_off (MetaInputDeviceNative *device)
{
device->a11y_flags &= ~CLUTTER_A11Y_SLOW_KEYS_ENABLED;
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->device_manager,
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
"kbd-a11y-flags-changed",
device->a11y_flags,
CLUTTER_A11Y_SLOW_KEYS_ENABLED);
@ -540,7 +542,7 @@ set_slowkeys_on (MetaInputDeviceNative *device)
{
device->a11y_flags |= CLUTTER_A11Y_SLOW_KEYS_ENABLED;
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->device_manager,
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
"kbd-a11y-flags-changed",
device->a11y_flags,
CLUTTER_A11Y_SLOW_KEYS_ENABLED);

View File

@ -2556,6 +2556,18 @@ meta_seat_native_free_event_data (ClutterSeat *seat,
meta_event_native_free (event_evdev);
}
static void
meta_seat_native_apply_kbd_a11y_settings (ClutterSeat *seat,
ClutterKbdA11ySettings *settings)
{
ClutterInputDevice *device;
device = clutter_seat_get_keyboard (seat);
if (device)
meta_input_device_native_apply_kbd_a11y_settings (META_INPUT_DEVICE_NATIVE (device),
settings);
}
static void
meta_seat_native_class_init (MetaSeatNativeClass *klass)
{
@ -2575,6 +2587,7 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
seat_class->get_keymap = meta_seat_native_get_keymap;
seat_class->copy_event_data = meta_seat_native_copy_event_data;
seat_class->free_event_data = meta_seat_native_free_event_data;
seat_class->apply_kbd_a11y_settings = meta_seat_native_apply_kbd_a11y_settings;
props[PROP_SEAT_ID] =
g_param_spec_string ("seat-id",

View File

@ -31,7 +31,6 @@
#include "backends/x11/meta-seat-x11.h"
#include "backends/x11/meta-stage-x11.h"
#include "backends/x11/meta-virtual-input-device-x11.h"
#include "backends/x11/meta-xkb-a11y-x11.h"
#include "clutter/clutter-mutter.h"
#include "clutter/x11/clutter-x11.h"
#include "core/display-private.h"
@ -196,7 +195,6 @@ on_tool_changed (ClutterSeat *seat,
static void
meta_device_manager_x11_constructed (GObject *object)
{
ClutterDeviceManager *manager = CLUTTER_DEVICE_MANAGER (object);
MetaDeviceManagerX11 *manager_xi2 = META_DEVICE_MANAGER_X11 (object);
g_signal_connect (manager_xi2->seat, "device-added",
@ -206,8 +204,6 @@ meta_device_manager_x11_constructed (GObject *object)
g_signal_connect (manager_xi2->seat, "tool-changed",
G_CALLBACK (on_tool_changed), manager_xi2);
meta_device_manager_x11_a11y_init (manager);
if (G_OBJECT_CLASS (meta_device_manager_x11_parent_class)->constructed)
G_OBJECT_CLASS (meta_device_manager_x11_parent_class)->constructed (object);
}
@ -277,7 +273,6 @@ meta_device_manager_x11_class_init (MetaDeviceManagerX11Class *klass)
manager_class->select_stage_events = meta_device_manager_x11_select_stage_events;
manager_class->create_virtual_device = meta_device_manager_x11_create_virtual_device;
manager_class->get_supported_virtual_device_types = meta_device_manager_x11_get_supported_virtual_device_types;
manager_class->apply_kbd_a11y_settings = meta_device_manager_x11_apply_kbd_a11y_settings;
}
static void

View File

@ -25,6 +25,7 @@
#include "backends/x11/meta-input-device-x11.h"
#include "backends/x11/meta-keymap-x11.h"
#include "backends/x11/meta-stage-x11.h"
#include "backends/x11/meta-xkb-a11y-x11.h"
#include "clutter/clutter-mutter.h"
#include "clutter/x11/clutter-x11.h"
#include "core/bell.h"
@ -1394,6 +1395,8 @@ meta_seat_x11_constructed (GObject *object)
G_CALLBACK (on_keymap_state_change),
seat_x11);
meta_seat_x11_a11y_init (CLUTTER_SEAT (seat_x11));
if (G_OBJECT_CLASS (meta_seat_x11_parent_class)->constructed)
G_OBJECT_CLASS (meta_seat_x11_parent_class)->constructed (object);
}
@ -1497,6 +1500,7 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
seat_class->get_keymap = meta_seat_x11_get_keymap;
seat_class->copy_event_data = meta_seat_x11_copy_event_data;
seat_class->free_event_data = meta_seat_x11_free_event_data;
seat_class->apply_kbd_a11y_settings = meta_seat_x11_apply_kbd_a11y_settings;
props[PROP_OPCODE] =
g_param_spec_int ("opcode",

View File

@ -75,7 +75,7 @@ set_xkb_desc_rec (Display *xdisplay,
}
static void
check_settings_changed (ClutterDeviceManager *device_manager)
check_settings_changed (ClutterSeat *seat)
{
Display *xdisplay = clutter_x11_get_default_display ();
ClutterKbdA11ySettings kbd_a11y_settings;
@ -86,7 +86,7 @@ check_settings_changed (ClutterDeviceManager *device_manager)
if (!desc)
return;
clutter_device_manager_get_kbd_a11y_settings (device_manager, &kbd_a11y_settings);
clutter_seat_get_kbd_a11y_settings (seat, &kbd_a11y_settings);
if (desc->ctrls->enabled_ctrls & XkbSlowKeysMask &&
!(kbd_a11y_settings.controls & CLUTTER_A11Y_SLOW_KEYS_ENABLED))
@ -115,7 +115,7 @@ check_settings_changed (ClutterDeviceManager *device_manager)
}
if (what_changed)
g_signal_emit_by_name (device_manager,
g_signal_emit_by_name (seat,
"kbd-a11y-flags-changed",
kbd_a11y_settings.controls,
what_changed);
@ -128,7 +128,7 @@ xkb_a11y_event_filter (XEvent *xevent,
ClutterEvent *clutter_event,
gpointer data)
{
ClutterDeviceManager *device_manager = CLUTTER_DEVICE_MANAGER (data);
ClutterSeat *seat = CLUTTER_SEAT (data);
XkbEvent *xkbev = (XkbEvent *) xevent;
/* 'event_type' is set to zero on notifying us of updates in
@ -141,9 +141,9 @@ xkb_a11y_event_filter (XEvent *xevent,
*/
if (xevent->xany.type == (_xkb_event_base + XkbEventCode) &&
xkbev->any.xkb_type == XkbControlsNotify && xkbev->ctrls.event_type != 0)
check_settings_changed (device_manager);
check_settings_changed (seat);
return CLUTTER_X11_FILTER_CONTINUE;
return CLUTTER_X11_FILTER_CONTINUE;
}
static gboolean
@ -194,11 +194,9 @@ set_xkb_ctrl (XkbDescRec *desc,
}
void
meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *kbd_a11y_settings)
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
ClutterKbdA11ySettings *kbd_a11y_settings)
{
ClutterBackend *backend;
ClutterSeat *seat;
Display *xdisplay = clutter_x11_get_default_display ();
XkbDescRec *desc;
gboolean enable_accessX;
@ -207,9 +205,6 @@ meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_
if (!desc)
return;
backend = clutter_get_default_backend ();
seat = clutter_backend_get_default_seat (backend);
/* general */
enable_accessX = kbd_a11y_settings->controls & CLUTTER_A11Y_KEYBOARD_ENABLED;
@ -318,7 +313,7 @@ meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_
}
gboolean
meta_device_manager_x11_a11y_init (ClutterDeviceManager *device_manager)
meta_seat_x11_a11y_init (ClutterSeat *seat)
{
Display *xdisplay = clutter_x11_get_default_display ();
guint event_mask;
@ -330,7 +325,7 @@ meta_device_manager_x11_a11y_init (ClutterDeviceManager *device_manager)
XkbSelectEvents (xdisplay, XkbUseCoreKbd, event_mask, event_mask);
clutter_x11_add_filter (xkb_a11y_event_filter, device_manager);
clutter_x11_add_filter (xkb_a11y_event_filter, seat);
return TRUE;
}

View File

@ -29,10 +29,10 @@
#include "clutter/clutter.h"
void
meta_device_manager_x11_apply_kbd_a11y_settings (ClutterDeviceManager *device_manager,
ClutterKbdA11ySettings *kbd_a11y_settings);
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
ClutterKbdA11ySettings *kbd_a11y_settings);
gboolean
meta_device_manager_x11_a11y_init (ClutterDeviceManager *device_manager);
meta_seat_x11_a11y_init (ClutterSeat *seat);
#endif /* META_XKB_A11Y_X11_H */