backends: Move keyboard a11y into backends
And out of Clutter API. This is mainly set via settings, or the windowing itself, so we don't need to leak these details up our own backend. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1403>
This commit is contained in:
parent
4013bed6e4
commit
c3acaeb251
@ -387,44 +387,6 @@ typedef enum
|
|||||||
CLUTTER_MODIFIER_MASK = 0x5c001fff
|
CLUTTER_MODIFIER_MASK = 0x5c001fff
|
||||||
} ClutterModifierType;
|
} ClutterModifierType;
|
||||||
|
|
||||||
/**
|
|
||||||
* ClutterKeyboardA11yFlags:
|
|
||||||
* @CLUTTER_A11Y_KEYBOARD_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_TIMEOUT_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_MOUSE_KEYS_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_SLOW_KEYS_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS:
|
|
||||||
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT:
|
|
||||||
* @CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT:
|
|
||||||
* @CLUTTER_A11Y_BOUNCE_KEYS_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT:
|
|
||||||
* @CLUTTER_A11Y_TOGGLE_KEYS_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_STICKY_KEYS_ENABLED:
|
|
||||||
* @CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF:
|
|
||||||
* @CLUTTER_A11Y_STICKY_KEYS_BEEP:
|
|
||||||
* @CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP:
|
|
||||||
*
|
|
||||||
* Keyboard accessibility features applied to a ClutterInputDevice keyboard.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
CLUTTER_A11Y_KEYBOARD_ENABLED = 1 << 0,
|
|
||||||
CLUTTER_A11Y_TIMEOUT_ENABLED = 1 << 1,
|
|
||||||
CLUTTER_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
|
|
||||||
CLUTTER_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
|
|
||||||
CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
|
|
||||||
CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
|
|
||||||
CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
|
|
||||||
CLUTTER_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
|
|
||||||
CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
|
|
||||||
CLUTTER_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
|
|
||||||
CLUTTER_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
|
|
||||||
CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
|
|
||||||
CLUTTER_A11Y_STICKY_KEYS_BEEP = 1 << 12,
|
|
||||||
CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
|
|
||||||
} ClutterKeyboardA11yFlags;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterPointerA11yFlags:
|
* ClutterPointerA11yFlags:
|
||||||
* @CLUTTER_A11Y_POINTER_ENABLED:
|
* @CLUTTER_A11Y_POINTER_ENABLED:
|
||||||
|
@ -65,9 +65,6 @@ struct _ClutterSeatPrivate
|
|||||||
|
|
||||||
unsigned int inhibit_unfocus_count;
|
unsigned int inhibit_unfocus_count;
|
||||||
|
|
||||||
/* Keyboard a11y */
|
|
||||||
ClutterKbdA11ySettings kbd_a11y_settings;
|
|
||||||
|
|
||||||
/* Pointer a11y */
|
/* Pointer a11y */
|
||||||
ClutterPointerA11ySettings pointer_a11y_settings;
|
ClutterPointerA11ySettings pointer_a11y_settings;
|
||||||
};
|
};
|
||||||
@ -404,43 +401,6 @@ clutter_seat_get_keymap (ClutterSeat *seat)
|
|||||||
return CLUTTER_SEAT_GET_CLASS (seat)->get_keymap (seat);
|
return CLUTTER_SEAT_GET_CLASS (seat)->get_keymap (seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
|
|
||||||
ClutterKbdA11ySettings *b)
|
|
||||||
{
|
|
||||||
return (memcmp (a, b, sizeof (ClutterKbdA11ySettings)) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
clutter_seat_set_kbd_a11y_settings (ClutterSeat *seat,
|
|
||||||
ClutterKbdA11ySettings *settings)
|
|
||||||
{
|
|
||||||
ClutterSeatClass *seat_class;
|
|
||||||
ClutterSeatPrivate *priv = clutter_seat_get_instance_private (seat);
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_SEAT (seat));
|
|
||||||
|
|
||||||
if (are_kbd_a11y_settings_equal (&priv->kbd_a11y_settings, settings))
|
|
||||||
return;
|
|
||||||
|
|
||||||
priv->kbd_a11y_settings = *settings;
|
|
||||||
|
|
||||||
seat_class = CLUTTER_SEAT_GET_CLASS (seat);
|
|
||||||
if (seat_class->apply_kbd_a11y_settings)
|
|
||||||
seat_class->apply_kbd_a11y_settings (seat, settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
clutter_seat_get_kbd_a11y_settings (ClutterSeat *seat,
|
|
||||||
ClutterKbdA11ySettings *settings)
|
|
||||||
{
|
|
||||||
ClutterSeatPrivate *priv = clutter_seat_get_instance_private (seat);
|
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_SEAT (seat));
|
|
||||||
|
|
||||||
*settings = priv->kbd_a11y_settings;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
clutter_seat_ensure_a11y_state (ClutterSeat *seat)
|
clutter_seat_ensure_a11y_state (ClutterSeat *seat)
|
||||||
{
|
{
|
||||||
|
@ -37,24 +37,6 @@ CLUTTER_EXPORT
|
|||||||
G_DECLARE_DERIVABLE_TYPE (ClutterSeat, clutter_seat,
|
G_DECLARE_DERIVABLE_TYPE (ClutterSeat, clutter_seat,
|
||||||
CLUTTER, SEAT, GObject)
|
CLUTTER, SEAT, GObject)
|
||||||
|
|
||||||
/**
|
|
||||||
* ClutterKbdA11ySettings:
|
|
||||||
*
|
|
||||||
* The #ClutterKbdA11ySettings structure contains keyboard accessibility
|
|
||||||
* settings
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
typedef struct _ClutterKbdA11ySettings
|
|
||||||
{
|
|
||||||
ClutterKeyboardA11yFlags controls;
|
|
||||||
gint slowkeys_delay;
|
|
||||||
gint debounce_delay;
|
|
||||||
gint timeout_delay;
|
|
||||||
gint mousekeys_init_delay;
|
|
||||||
gint mousekeys_max_speed;
|
|
||||||
gint mousekeys_accel_time;
|
|
||||||
} ClutterKbdA11ySettings;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterPointerA11ySettings:
|
* ClutterPointerA11ySettings:
|
||||||
*
|
*
|
||||||
@ -126,10 +108,6 @@ struct _ClutterSeatClass
|
|||||||
void (* free_event_data) (ClutterSeat *seat,
|
void (* free_event_data) (ClutterSeat *seat,
|
||||||
ClutterEvent *event);
|
ClutterEvent *event);
|
||||||
|
|
||||||
/* Keyboard accessibility */
|
|
||||||
void (* apply_kbd_a11y_settings) (ClutterSeat *seat,
|
|
||||||
ClutterKbdA11ySettings *settings);
|
|
||||||
|
|
||||||
/* Virtual devices */
|
/* Virtual devices */
|
||||||
ClutterVirtualInputDevice * (* create_virtual_device) (ClutterSeat *seat,
|
ClutterVirtualInputDevice * (* create_virtual_device) (ClutterSeat *seat,
|
||||||
ClutterInputDeviceType device_type);
|
ClutterInputDeviceType device_type);
|
||||||
@ -149,12 +127,6 @@ void clutter_seat_bell_notify (ClutterSeat *seat);
|
|||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
ClutterKeymap * clutter_seat_get_keymap (ClutterSeat *seat);
|
ClutterKeymap * clutter_seat_get_keymap (ClutterSeat *seat);
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
void clutter_seat_set_kbd_a11y_settings (ClutterSeat *seat,
|
|
||||||
ClutterKbdA11ySettings *settings);
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
void clutter_seat_get_kbd_a11y_settings (ClutterSeat *seat,
|
|
||||||
ClutterKbdA11ySettings *settings);
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
void clutter_seat_ensure_a11y_state (ClutterSeat *seat);
|
void clutter_seat_ensure_a11y_state (ClutterSeat *seat);
|
||||||
|
|
||||||
|
@ -36,6 +36,42 @@
|
|||||||
G_DECLARE_DERIVABLE_TYPE (MetaInputSettings, meta_input_settings,
|
G_DECLARE_DERIVABLE_TYPE (MetaInputSettings, meta_input_settings,
|
||||||
META, INPUT_SETTINGS, GObject)
|
META, INPUT_SETTINGS, GObject)
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
META_A11Y_KEYBOARD_ENABLED = 1 << 0,
|
||||||
|
META_A11Y_TIMEOUT_ENABLED = 1 << 1,
|
||||||
|
META_A11Y_MOUSE_KEYS_ENABLED = 1 << 2,
|
||||||
|
META_A11Y_SLOW_KEYS_ENABLED = 1 << 3,
|
||||||
|
META_A11Y_SLOW_KEYS_BEEP_PRESS = 1 << 4,
|
||||||
|
META_A11Y_SLOW_KEYS_BEEP_ACCEPT = 1 << 5,
|
||||||
|
META_A11Y_SLOW_KEYS_BEEP_REJECT = 1 << 6,
|
||||||
|
META_A11Y_BOUNCE_KEYS_ENABLED = 1 << 7,
|
||||||
|
META_A11Y_BOUNCE_KEYS_BEEP_REJECT = 1 << 8,
|
||||||
|
META_A11Y_TOGGLE_KEYS_ENABLED = 1 << 9,
|
||||||
|
META_A11Y_STICKY_KEYS_ENABLED = 1 << 10,
|
||||||
|
META_A11Y_STICKY_KEYS_TWO_KEY_OFF = 1 << 11,
|
||||||
|
META_A11Y_STICKY_KEYS_BEEP = 1 << 12,
|
||||||
|
META_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
|
||||||
|
} MetaKeyboardA11yFlags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MetaKbdA11ySettings:
|
||||||
|
*
|
||||||
|
* The #MetaKbdA11ySettings structure contains keyboard accessibility
|
||||||
|
* settings
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef struct _MetaKbdA11ySettings
|
||||||
|
{
|
||||||
|
MetaKeyboardA11yFlags controls;
|
||||||
|
int slowkeys_delay;
|
||||||
|
int debounce_delay;
|
||||||
|
int timeout_delay;
|
||||||
|
int mousekeys_init_delay;
|
||||||
|
int mousekeys_max_speed;
|
||||||
|
int mousekeys_accel_time;
|
||||||
|
} MetaKbdA11ySettings;
|
||||||
|
|
||||||
struct _MetaInputSettingsClass
|
struct _MetaInputSettingsClass
|
||||||
{
|
{
|
||||||
GObjectClass parent_class;
|
GObjectClass parent_class;
|
||||||
@ -150,4 +186,7 @@ void meta_input_settings_set_device_aspect_ratio (MetaInputSettings *input_sett
|
|||||||
ClutterInputDevice *device,
|
ClutterInputDevice *device,
|
||||||
double aspect_ratio);
|
double aspect_ratio);
|
||||||
|
|
||||||
|
void meta_input_settings_get_kbd_a11y_settings (MetaInputSettings *input_settings,
|
||||||
|
MetaKbdA11ySettings *a11y_settings);
|
||||||
|
|
||||||
#endif /* META_INPUT_SETTINGS_PRIVATE_H */
|
#endif /* META_INPUT_SETTINGS_PRIVATE_H */
|
||||||
|
@ -82,6 +82,8 @@ struct _MetaInputSettingsPrivate
|
|||||||
GHashTable *current_tools;
|
GHashTable *current_tools;
|
||||||
|
|
||||||
GHashTable *two_finger_devices;
|
GHashTable *two_finger_devices;
|
||||||
|
|
||||||
|
MetaKbdA11ySettings kbd_a11y_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef gboolean (* ConfigBoolMappingFunc) (MetaInputSettings *input_settings,
|
typedef gboolean (* ConfigBoolMappingFunc) (MetaInputSettings *input_settings,
|
||||||
@ -100,6 +102,14 @@ typedef void (*ConfigUintFunc) (MetaInputSettings *input_settings,
|
|||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (MetaInputSettings, meta_input_settings, G_TYPE_OBJECT)
|
G_DEFINE_TYPE_WITH_PRIVATE (MetaInputSettings, meta_input_settings, G_TYPE_OBJECT)
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
KBD_A11Y_CHANGED,
|
||||||
|
N_SIGNALS
|
||||||
|
};
|
||||||
|
|
||||||
|
static guint signals[N_SIGNALS] = { 0 };
|
||||||
|
|
||||||
static GSList *
|
static GSList *
|
||||||
meta_input_settings_get_devices (MetaInputSettings *settings,
|
meta_input_settings_get_devices (MetaInputSettings *settings,
|
||||||
ClutterInputDeviceType type)
|
ClutterInputDeviceType type)
|
||||||
@ -1150,39 +1160,31 @@ apply_mappable_device_settings (MetaInputSettings *input_settings,
|
|||||||
|
|
||||||
struct _keyboard_a11y_settings_flags_pair {
|
struct _keyboard_a11y_settings_flags_pair {
|
||||||
const char *name;
|
const char *name;
|
||||||
ClutterKeyboardA11yFlags flag;
|
MetaKeyboardA11yFlags flag;
|
||||||
} keyboard_a11y_settings_flags_pair[] = {
|
} keyboard_a11y_settings_flags_pair[] = {
|
||||||
{ "enable", CLUTTER_A11Y_KEYBOARD_ENABLED },
|
{ "enable", META_A11Y_KEYBOARD_ENABLED },
|
||||||
{ "timeout-enable", CLUTTER_A11Y_TIMEOUT_ENABLED },
|
{ "timeout-enable", META_A11Y_TIMEOUT_ENABLED },
|
||||||
{ "mousekeys-enable", CLUTTER_A11Y_MOUSE_KEYS_ENABLED },
|
{ "mousekeys-enable", META_A11Y_MOUSE_KEYS_ENABLED },
|
||||||
{ "slowkeys-enable", CLUTTER_A11Y_SLOW_KEYS_ENABLED },
|
{ "slowkeys-enable", META_A11Y_SLOW_KEYS_ENABLED },
|
||||||
{ "slowkeys-beep-press", CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS },
|
{ "slowkeys-beep-press", META_A11Y_SLOW_KEYS_BEEP_PRESS },
|
||||||
{ "slowkeys-beep-accept", CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT },
|
{ "slowkeys-beep-accept", META_A11Y_SLOW_KEYS_BEEP_ACCEPT },
|
||||||
{ "slowkeys-beep-reject", CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT },
|
{ "slowkeys-beep-reject", META_A11Y_SLOW_KEYS_BEEP_REJECT },
|
||||||
{ "bouncekeys-enable", CLUTTER_A11Y_BOUNCE_KEYS_ENABLED },
|
{ "bouncekeys-enable", META_A11Y_BOUNCE_KEYS_ENABLED },
|
||||||
{ "bouncekeys-beep-reject", CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT },
|
{ "bouncekeys-beep-reject", META_A11Y_BOUNCE_KEYS_BEEP_REJECT },
|
||||||
{ "togglekeys-enable", CLUTTER_A11Y_TOGGLE_KEYS_ENABLED },
|
{ "togglekeys-enable", META_A11Y_TOGGLE_KEYS_ENABLED },
|
||||||
{ "stickykeys-enable", CLUTTER_A11Y_STICKY_KEYS_ENABLED },
|
{ "stickykeys-enable", META_A11Y_STICKY_KEYS_ENABLED },
|
||||||
{ "stickykeys-modifier-beep", CLUTTER_A11Y_STICKY_KEYS_BEEP },
|
{ "stickykeys-modifier-beep", META_A11Y_STICKY_KEYS_BEEP },
|
||||||
{ "stickykeys-two-key-off", CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF },
|
{ "stickykeys-two-key-off", META_A11Y_STICKY_KEYS_TWO_KEY_OFF },
|
||||||
{ "feature-state-change-beep", CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP },
|
{ "feature-state-change-beep", META_A11Y_FEATURE_STATE_CHANGE_BEEP },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
load_keyboard_a11y_settings (MetaInputSettings *input_settings,
|
load_keyboard_a11y_settings (MetaInputSettings *input_settings)
|
||||||
ClutterInputDevice *device)
|
|
||||||
{
|
{
|
||||||
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
ClutterKbdA11ySettings kbd_a11y_settings = { 0 };
|
MetaKbdA11ySettings kbd_a11y_settings = { 0 };
|
||||||
ClutterInputDevice *core_keyboard;
|
|
||||||
ClutterBackend *backend = clutter_get_default_backend ();
|
|
||||||
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
|
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
core_keyboard = clutter_seat_get_keyboard (priv->seat);
|
|
||||||
if (device && device != core_keyboard)
|
|
||||||
return;
|
|
||||||
|
|
||||||
kbd_a11y_settings.controls = 0;
|
kbd_a11y_settings.controls = 0;
|
||||||
for (i = 0; i < G_N_ELEMENTS (keyboard_a11y_settings_flags_pair); i++)
|
for (i = 0; i < G_N_ELEMENTS (keyboard_a11y_settings_flags_pair); i++)
|
||||||
{
|
{
|
||||||
@ -1203,13 +1205,14 @@ load_keyboard_a11y_settings (MetaInputSettings *input_settings,
|
|||||||
kbd_a11y_settings.mousekeys_accel_time = g_settings_get_int (priv->keyboard_a11y_settings,
|
kbd_a11y_settings.mousekeys_accel_time = g_settings_get_int (priv->keyboard_a11y_settings,
|
||||||
"mousekeys-accel-time");
|
"mousekeys-accel-time");
|
||||||
|
|
||||||
clutter_seat_set_kbd_a11y_settings (seat, &kbd_a11y_settings);
|
priv->kbd_a11y_settings = kbd_a11y_settings;
|
||||||
|
g_signal_emit (input_settings, signals[KBD_A11Y_CHANGED], 0, &priv->kbd_a11y_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_keyboard_a11y_settings_changed (ClutterSeat *seat,
|
on_keyboard_a11y_settings_changed (ClutterSeat *seat,
|
||||||
ClutterKeyboardA11yFlags new_flags,
|
MetaKeyboardA11yFlags new_flags,
|
||||||
ClutterKeyboardA11yFlags what_changed,
|
MetaKeyboardA11yFlags what_changed,
|
||||||
MetaInputSettings *input_settings)
|
MetaInputSettings *input_settings)
|
||||||
{
|
{
|
||||||
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
MetaInputSettingsPrivate *priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
@ -1231,7 +1234,7 @@ meta_input_keyboard_a11y_settings_changed (GSettings *settings,
|
|||||||
{
|
{
|
||||||
MetaInputSettings *input_settings = META_INPUT_SETTINGS (user_data);
|
MetaInputSettings *input_settings = META_INPUT_SETTINGS (user_data);
|
||||||
|
|
||||||
load_keyboard_a11y_settings (input_settings, NULL);
|
load_keyboard_a11y_settings (input_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct _pointer_a11y_settings_flags_pair {
|
struct _pointer_a11y_settings_flags_pair {
|
||||||
@ -1493,7 +1496,6 @@ apply_device_settings (MetaInputSettings *input_settings,
|
|||||||
update_pointer_accel_profile (input_settings,
|
update_pointer_accel_profile (input_settings,
|
||||||
priv->trackball_settings,
|
priv->trackball_settings,
|
||||||
device);
|
device);
|
||||||
load_keyboard_a11y_settings (input_settings, device);
|
|
||||||
load_pointer_a11y_settings (input_settings, device);
|
load_pointer_a11y_settings (input_settings, device);
|
||||||
|
|
||||||
update_middle_click_emulation (input_settings, priv->mouse_settings, device);
|
update_middle_click_emulation (input_settings, priv->mouse_settings, device);
|
||||||
@ -1717,6 +1719,8 @@ meta_input_settings_constructed (GObject *object)
|
|||||||
apply_device_settings (input_settings, NULL);
|
apply_device_settings (input_settings, NULL);
|
||||||
update_keyboard_repeat (input_settings);
|
update_keyboard_repeat (input_settings);
|
||||||
check_mappable_devices (input_settings);
|
check_mappable_devices (input_settings);
|
||||||
|
|
||||||
|
load_keyboard_a11y_settings (input_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1729,6 +1733,14 @@ meta_input_settings_class_init (MetaInputSettingsClass *klass)
|
|||||||
|
|
||||||
quark_tool_settings =
|
quark_tool_settings =
|
||||||
g_quark_from_static_string ("meta-input-settings-tool-settings");
|
g_quark_from_static_string ("meta-input-settings-tool-settings");
|
||||||
|
|
||||||
|
signals[KBD_A11Y_CHANGED] =
|
||||||
|
g_signal_new ("kbd-a11y-changed",
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
G_SIGNAL_RUN_LAST,
|
||||||
|
0, NULL, NULL, NULL,
|
||||||
|
G_TYPE_NONE, 1,
|
||||||
|
G_TYPE_POINTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1876,3 +1888,16 @@ meta_input_settings_set_device_aspect_ratio (MetaInputSettings *input_settings,
|
|||||||
info->aspect_ratio = aspect_ratio;
|
info->aspect_ratio = aspect_ratio;
|
||||||
update_tablet_keep_aspect (input_settings, info->settings, device);
|
update_tablet_keep_aspect (input_settings, info->settings, device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_input_settings_get_kbd_a11y_settings (MetaInputSettings *input_settings,
|
||||||
|
MetaKbdA11ySettings *a11y_settings)
|
||||||
|
{
|
||||||
|
MetaInputSettingsPrivate *priv;
|
||||||
|
|
||||||
|
g_return_if_fail (META_IS_INPUT_SETTINGS (input_settings));
|
||||||
|
|
||||||
|
priv = meta_input_settings_get_instance_private (input_settings);
|
||||||
|
|
||||||
|
*a11y_settings = priv->kbd_a11y_settings;
|
||||||
|
}
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include "backends/meta-stage-private.h"
|
#include "backends/meta-stage-private.h"
|
||||||
#include "backends/native/meta-clutter-backend-native.h"
|
#include "backends/native/meta-clutter-backend-native.h"
|
||||||
#include "backends/native/meta-event-native.h"
|
#include "backends/native/meta-event-native.h"
|
||||||
|
#include "backends/native/meta-input-device-native.h"
|
||||||
#include "backends/native/meta-input-settings-native.h"
|
#include "backends/native/meta-input-settings-native.h"
|
||||||
#include "backends/native/meta-kms.h"
|
#include "backends/native/meta-kms.h"
|
||||||
#include "backends/native/meta-kms-device.h"
|
#include "backends/native/meta-kms-device.h"
|
||||||
@ -234,6 +235,21 @@ meta_backend_native_create_renderer (MetaBackend *backend,
|
|||||||
return META_RENDERER (renderer_native);
|
return META_RENDERER (renderer_native);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
kbd_a11y_changed_cb (MetaInputSettings *input_settings,
|
||||||
|
MetaKbdA11ySettings *a11y_settings,
|
||||||
|
MetaBackend *backend)
|
||||||
|
{
|
||||||
|
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
|
||||||
|
ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend);
|
||||||
|
ClutterInputDevice *device;
|
||||||
|
|
||||||
|
device = clutter_seat_get_keyboard (seat);
|
||||||
|
if (device)
|
||||||
|
meta_input_device_native_apply_kbd_a11y_settings (META_INPUT_DEVICE_NATIVE (device),
|
||||||
|
a11y_settings);
|
||||||
|
}
|
||||||
|
|
||||||
static MetaInputSettings *
|
static MetaInputSettings *
|
||||||
meta_backend_native_create_input_settings (MetaBackend *backend)
|
meta_backend_native_create_input_settings (MetaBackend *backend)
|
||||||
{
|
{
|
||||||
@ -243,6 +259,8 @@ meta_backend_native_create_input_settings (MetaBackend *backend)
|
|||||||
{
|
{
|
||||||
backend_native->input_settings =
|
backend_native->input_settings =
|
||||||
g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE, NULL);
|
g_object_new (META_TYPE_INPUT_SETTINGS_NATIVE, NULL);
|
||||||
|
g_signal_connect_object (backend_native->input_settings, "kbd-a11y-changed",
|
||||||
|
G_CALLBACK (kbd_a11y_changed_cb), backend, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return backend_native->input_settings;
|
return backend_native->input_settings;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <cairo-gobject.h>
|
#include <cairo-gobject.h>
|
||||||
|
|
||||||
|
#include "backends/meta-backend-private.h"
|
||||||
#include "backends/native/meta-input-device-tool-native.h"
|
#include "backends/native/meta-input-device-tool-native.h"
|
||||||
#include "backends/native/meta-input-device-native.h"
|
#include "backends/native/meta-input-device-native.h"
|
||||||
#include "backends/native/meta-seat-native.h"
|
#include "backends/native/meta-seat-native.h"
|
||||||
@ -238,11 +239,11 @@ clear_slow_keys (MetaInputDeviceNative *device)
|
|||||||
static guint
|
static guint
|
||||||
get_slow_keys_delay (ClutterInputDevice *device)
|
get_slow_keys_delay (ClutterInputDevice *device)
|
||||||
{
|
{
|
||||||
MetaInputDeviceNative *device_native = META_INPUT_DEVICE_NATIVE (device);
|
MetaKbdA11ySettings a11y_settings;
|
||||||
ClutterKbdA11ySettings a11y_settings;
|
MetaInputSettings *input_settings;
|
||||||
|
|
||||||
clutter_seat_get_kbd_a11y_settings (CLUTTER_SEAT (device_native->seat),
|
input_settings = meta_backend_get_input_settings (meta_get_backend ());
|
||||||
&a11y_settings);
|
meta_input_settings_get_kbd_a11y_settings (input_settings, &a11y_settings);
|
||||||
/* Settings use int, we use uint, make sure we dont go negative */
|
/* Settings use int, we use uint, make sure we dont go negative */
|
||||||
return MAX (0, a11y_settings.slowkeys_delay);
|
return MAX (0, a11y_settings.slowkeys_delay);
|
||||||
}
|
}
|
||||||
@ -263,7 +264,7 @@ trigger_slow_keys (gpointer data)
|
|||||||
device->slow_keys_list = g_list_remove (device->slow_keys_list, slow_keys_event);
|
device->slow_keys_list = g_list_remove (device->slow_keys_list, slow_keys_event);
|
||||||
meta_input_device_native_free_pending_slow_key (slow_keys_event);
|
meta_input_device_native_free_pending_slow_key (slow_keys_event);
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT)
|
if (device->a11y_flags & META_A11Y_SLOW_KEYS_BEEP_ACCEPT)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
|
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
@ -301,7 +302,7 @@ start_slow_keys (ClutterEvent *event,
|
|||||||
slow_keys_event);
|
slow_keys_event);
|
||||||
device->slow_keys_list = g_list_append (device->slow_keys_list, slow_keys_event);
|
device->slow_keys_list = g_list_append (device->slow_keys_list, slow_keys_event);
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS)
|
if (device->a11y_flags & META_A11Y_SLOW_KEYS_BEEP_PRESS)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,7 +322,7 @@ stop_slow_keys (ClutterEvent *event,
|
|||||||
device->slow_keys_list = g_list_delete_link (device->slow_keys_list, item);
|
device->slow_keys_list = g_list_delete_link (device->slow_keys_list, item);
|
||||||
meta_input_device_native_free_pending_slow_key (slow_keys_event);
|
meta_input_device_native_free_pending_slow_key (slow_keys_event);
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT)
|
if (device->a11y_flags & META_A11Y_SLOW_KEYS_BEEP_REJECT)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -334,11 +335,11 @@ stop_slow_keys (ClutterEvent *event,
|
|||||||
static guint
|
static guint
|
||||||
get_debounce_delay (ClutterInputDevice *device)
|
get_debounce_delay (ClutterInputDevice *device)
|
||||||
{
|
{
|
||||||
MetaInputDeviceNative *device_native = META_INPUT_DEVICE_NATIVE (device);
|
MetaKbdA11ySettings a11y_settings;
|
||||||
ClutterKbdA11ySettings a11y_settings;
|
MetaInputSettings *input_settings;
|
||||||
|
|
||||||
clutter_seat_get_kbd_a11y_settings (CLUTTER_SEAT (device_native->seat),
|
input_settings = meta_backend_get_input_settings (meta_get_backend ());
|
||||||
&a11y_settings);
|
meta_input_settings_get_kbd_a11y_settings (input_settings, &a11y_settings);
|
||||||
/* Settings use int, we use uint, make sure we dont go negative */
|
/* Settings use int, we use uint, make sure we dont go negative */
|
||||||
return MAX (0, a11y_settings.debounce_delay);
|
return MAX (0, a11y_settings.debounce_delay);
|
||||||
}
|
}
|
||||||
@ -376,7 +377,7 @@ stop_bounce_keys (MetaInputDeviceNative *device)
|
|||||||
static void
|
static void
|
||||||
notify_bounce_keys_reject (MetaInputDeviceNative *device)
|
notify_bounce_keys_reject (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT)
|
if (device->a11y_flags & META_A11Y_BOUNCE_KEYS_BEEP_REJECT)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,20 +491,20 @@ notify_stickykeys_change (MetaInputDeviceNative *device)
|
|||||||
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
||||||
"kbd-a11y-flags-changed",
|
"kbd-a11y-flags-changed",
|
||||||
device->a11y_flags,
|
device->a11y_flags,
|
||||||
CLUTTER_A11Y_STICKY_KEYS_ENABLED);
|
META_A11Y_STICKY_KEYS_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_stickykeys_off (MetaInputDeviceNative *device)
|
set_stickykeys_off (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
device->a11y_flags &= ~CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
device->a11y_flags &= ~META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
notify_stickykeys_change (device);
|
notify_stickykeys_change (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_stickykeys_on (MetaInputDeviceNative *device)
|
set_stickykeys_on (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
device->a11y_flags |= CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
device->a11y_flags |= META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
notify_stickykeys_change (device);
|
notify_stickykeys_change (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,23 +519,23 @@ clear_stickykeys_event (ClutterEvent *event,
|
|||||||
static void
|
static void
|
||||||
set_slowkeys_off (MetaInputDeviceNative *device)
|
set_slowkeys_off (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
device->a11y_flags &= ~CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
device->a11y_flags &= ~META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
|
|
||||||
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
||||||
"kbd-a11y-flags-changed",
|
"kbd-a11y-flags-changed",
|
||||||
device->a11y_flags,
|
device->a11y_flags,
|
||||||
CLUTTER_A11Y_SLOW_KEYS_ENABLED);
|
META_A11Y_SLOW_KEYS_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_slowkeys_on (MetaInputDeviceNative *device)
|
set_slowkeys_on (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
device->a11y_flags |= CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
device->a11y_flags |= META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
|
|
||||||
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
g_signal_emit_by_name (CLUTTER_INPUT_DEVICE (device)->seat,
|
||||||
"kbd-a11y-flags-changed",
|
"kbd-a11y-flags-changed",
|
||||||
device->a11y_flags,
|
device->a11y_flags,
|
||||||
CLUTTER_A11Y_SLOW_KEYS_ENABLED);
|
META_A11Y_SLOW_KEYS_ENABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -550,7 +551,7 @@ handle_stickykeys_press (ClutterEvent *event,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (device->stickykeys_depressed_mask &&
|
if (device->stickykeys_depressed_mask &&
|
||||||
(device->a11y_flags & CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF))
|
(device->a11y_flags & META_A11Y_STICKY_KEYS_TWO_KEY_OFF))
|
||||||
{
|
{
|
||||||
clear_stickykeys_event (event, device);
|
clear_stickykeys_event (event, device);
|
||||||
return;
|
return;
|
||||||
@ -596,7 +597,7 @@ handle_stickykeys_release (ClutterEvent *event,
|
|||||||
|
|
||||||
if (key_event_is_modifier (event))
|
if (key_event_is_modifier (event))
|
||||||
{
|
{
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_STICKY_KEYS_BEEP)
|
if (device->a11y_flags & META_A11Y_STICKY_KEYS_BEEP)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -615,10 +616,10 @@ trigger_toggle_slowkeys (gpointer data)
|
|||||||
|
|
||||||
device->toggle_slowkeys_timer = 0;
|
device->toggle_slowkeys_timer = 0;
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP)
|
if (device->a11y_flags & META_A11Y_FEATURE_STATE_CHANGE_BEEP)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_SLOW_KEYS_ENABLED)
|
if (device->a11y_flags & META_A11Y_SLOW_KEYS_ENABLED)
|
||||||
set_slowkeys_off (device);
|
set_slowkeys_off (device);
|
||||||
else
|
else
|
||||||
set_slowkeys_on (device);
|
set_slowkeys_on (device);
|
||||||
@ -677,10 +678,10 @@ handle_enablekeys_release (ClutterEvent *event,
|
|||||||
{
|
{
|
||||||
device->shift_count = 0;
|
device->shift_count = 0;
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP)
|
if (device->a11y_flags & META_A11Y_FEATURE_STATE_CHANGE_BEEP)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
|
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_STICKY_KEYS_ENABLED)
|
if (device->a11y_flags & META_A11Y_STICKY_KEYS_ENABLED)
|
||||||
set_stickykeys_off (device);
|
set_stickykeys_off (device);
|
||||||
else
|
else
|
||||||
set_stickykeys_on (device);
|
set_stickykeys_on (device);
|
||||||
@ -748,7 +749,7 @@ emulate_button_click (MetaInputDeviceNative *device)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
update_mousekeys_params (MetaInputDeviceNative *device,
|
update_mousekeys_params (MetaInputDeviceNative *device,
|
||||||
ClutterKbdA11ySettings *settings)
|
MetaKbdA11ySettings *settings)
|
||||||
{
|
{
|
||||||
/* Prevent us from broken settings values */
|
/* Prevent us from broken settings values */
|
||||||
device->mousekeys_max_speed = MAX (1, settings->mousekeys_max_speed);
|
device->mousekeys_max_speed = MAX (1, settings->mousekeys_max_speed);
|
||||||
@ -1117,7 +1118,7 @@ meta_input_device_native_process_kbd_a11y_event (ClutterEvent *eve
|
|||||||
if (event->key.flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)
|
if (event->key.flags & CLUTTER_EVENT_FLAG_INPUT_METHOD)
|
||||||
goto emit_event;
|
goto emit_event;
|
||||||
|
|
||||||
if (device_evdev->a11y_flags & CLUTTER_A11Y_KEYBOARD_ENABLED)
|
if (device_evdev->a11y_flags & META_A11Y_KEYBOARD_ENABLED)
|
||||||
{
|
{
|
||||||
if (event->type == CLUTTER_KEY_PRESS)
|
if (event->type == CLUTTER_KEY_PRESS)
|
||||||
handle_enablekeys_press (event, device_evdev);
|
handle_enablekeys_press (event, device_evdev);
|
||||||
@ -1125,7 +1126,7 @@ meta_input_device_native_process_kbd_a11y_event (ClutterEvent *eve
|
|||||||
handle_enablekeys_release (event, device_evdev);
|
handle_enablekeys_release (event, device_evdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device_evdev->a11y_flags & CLUTTER_A11Y_MOUSE_KEYS_ENABLED)
|
if (device_evdev->a11y_flags & META_A11Y_MOUSE_KEYS_ENABLED)
|
||||||
{
|
{
|
||||||
if (event->type == CLUTTER_KEY_PRESS &&
|
if (event->type == CLUTTER_KEY_PRESS &&
|
||||||
handle_mousekeys_press (event, device_evdev))
|
handle_mousekeys_press (event, device_evdev))
|
||||||
@ -1135,7 +1136,7 @@ meta_input_device_native_process_kbd_a11y_event (ClutterEvent *eve
|
|||||||
return; /* swallow event */
|
return; /* swallow event */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((device_evdev->a11y_flags & CLUTTER_A11Y_BOUNCE_KEYS_ENABLED) &&
|
if ((device_evdev->a11y_flags & META_A11Y_BOUNCE_KEYS_ENABLED) &&
|
||||||
(get_debounce_delay (device) != 0))
|
(get_debounce_delay (device) != 0))
|
||||||
{
|
{
|
||||||
if ((event->type == CLUTTER_KEY_PRESS) && debounce_key (event, device_evdev))
|
if ((event->type == CLUTTER_KEY_PRESS) && debounce_key (event, device_evdev))
|
||||||
@ -1148,7 +1149,7 @@ meta_input_device_native_process_kbd_a11y_event (ClutterEvent *eve
|
|||||||
start_bounce_keys (event, device_evdev);
|
start_bounce_keys (event, device_evdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((device_evdev->a11y_flags & CLUTTER_A11Y_SLOW_KEYS_ENABLED) &&
|
if ((device_evdev->a11y_flags & META_A11Y_SLOW_KEYS_ENABLED) &&
|
||||||
(get_slow_keys_delay (device) != 0))
|
(get_slow_keys_delay (device) != 0))
|
||||||
{
|
{
|
||||||
if (event->type == CLUTTER_KEY_PRESS)
|
if (event->type == CLUTTER_KEY_PRESS)
|
||||||
@ -1159,7 +1160,7 @@ meta_input_device_native_process_kbd_a11y_event (ClutterEvent *eve
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device_evdev->a11y_flags & CLUTTER_A11Y_STICKY_KEYS_ENABLED)
|
if (device_evdev->a11y_flags & META_A11Y_STICKY_KEYS_ENABLED)
|
||||||
{
|
{
|
||||||
if (event->type == CLUTTER_KEY_PRESS)
|
if (event->type == CLUTTER_KEY_PRESS)
|
||||||
handle_stickykeys_press (event, device_evdev);
|
handle_stickykeys_press (event, device_evdev);
|
||||||
@ -1173,33 +1174,33 @@ emit_event:
|
|||||||
|
|
||||||
void
|
void
|
||||||
meta_input_device_native_apply_kbd_a11y_settings (MetaInputDeviceNative *device,
|
meta_input_device_native_apply_kbd_a11y_settings (MetaInputDeviceNative *device,
|
||||||
ClutterKbdA11ySettings *settings)
|
MetaKbdA11ySettings *settings)
|
||||||
{
|
{
|
||||||
ClutterKeyboardA11yFlags changed_flags = (device->a11y_flags ^ settings->controls);
|
MetaKeyboardA11yFlags changed_flags = (device->a11y_flags ^ settings->controls);
|
||||||
|
|
||||||
if (changed_flags & (CLUTTER_A11Y_KEYBOARD_ENABLED | CLUTTER_A11Y_SLOW_KEYS_ENABLED))
|
if (changed_flags & (META_A11Y_KEYBOARD_ENABLED | META_A11Y_SLOW_KEYS_ENABLED))
|
||||||
clear_slow_keys (device);
|
clear_slow_keys (device);
|
||||||
|
|
||||||
if (changed_flags & (CLUTTER_A11Y_KEYBOARD_ENABLED | CLUTTER_A11Y_BOUNCE_KEYS_ENABLED))
|
if (changed_flags & (META_A11Y_KEYBOARD_ENABLED | META_A11Y_BOUNCE_KEYS_ENABLED))
|
||||||
device->debounce_key = 0;
|
device->debounce_key = 0;
|
||||||
|
|
||||||
if (changed_flags & (CLUTTER_A11Y_KEYBOARD_ENABLED | CLUTTER_A11Y_STICKY_KEYS_ENABLED))
|
if (changed_flags & (META_A11Y_KEYBOARD_ENABLED | META_A11Y_STICKY_KEYS_ENABLED))
|
||||||
{
|
{
|
||||||
device->stickykeys_depressed_mask = 0;
|
device->stickykeys_depressed_mask = 0;
|
||||||
update_internal_xkb_state (device, 0, 0);
|
update_internal_xkb_state (device, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed_flags & CLUTTER_A11Y_KEYBOARD_ENABLED)
|
if (changed_flags & META_A11Y_KEYBOARD_ENABLED)
|
||||||
{
|
{
|
||||||
device->toggle_slowkeys_timer = 0;
|
device->toggle_slowkeys_timer = 0;
|
||||||
device->shift_count = 0;
|
device->shift_count = 0;
|
||||||
device->last_shift_time = 0;
|
device->last_shift_time = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed_flags & (CLUTTER_A11Y_KEYBOARD_ENABLED | CLUTTER_A11Y_MOUSE_KEYS_ENABLED))
|
if (changed_flags & (META_A11Y_KEYBOARD_ENABLED | META_A11Y_MOUSE_KEYS_ENABLED))
|
||||||
{
|
{
|
||||||
if (settings->controls &
|
if (settings->controls &
|
||||||
(CLUTTER_A11Y_KEYBOARD_ENABLED | CLUTTER_A11Y_MOUSE_KEYS_ENABLED))
|
(META_A11Y_KEYBOARD_ENABLED | META_A11Y_MOUSE_KEYS_ENABLED))
|
||||||
enable_mousekeys (device);
|
enable_mousekeys (device);
|
||||||
else
|
else
|
||||||
disable_mousekeys (device);
|
disable_mousekeys (device);
|
||||||
@ -1213,7 +1214,7 @@ meta_input_device_native_apply_kbd_a11y_settings (MetaInputDeviceNative *device
|
|||||||
void
|
void
|
||||||
meta_input_device_native_a11y_maybe_notify_toggle_keys (MetaInputDeviceNative *device)
|
meta_input_device_native_a11y_maybe_notify_toggle_keys (MetaInputDeviceNative *device)
|
||||||
{
|
{
|
||||||
if (device->a11y_flags & CLUTTER_A11Y_TOGGLE_KEYS_ENABLED)
|
if (device->a11y_flags & META_A11Y_TOGGLE_KEYS_ENABLED)
|
||||||
meta_input_device_native_bell_notify (device);
|
meta_input_device_native_bell_notify (device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <glib-object.h>
|
#include <glib-object.h>
|
||||||
|
|
||||||
#include "backends/meta-input-device-private.h"
|
#include "backends/meta-input-device-private.h"
|
||||||
|
#include "backends/meta-input-settings-private.h"
|
||||||
#include "backends/native/meta-seat-native.h"
|
#include "backends/native/meta-seat-native.h"
|
||||||
#include "clutter/clutter-mutter.h"
|
#include "clutter/clutter-mutter.h"
|
||||||
|
|
||||||
@ -81,7 +82,7 @@ struct _MetaInputDeviceNative
|
|||||||
float pointer_y;
|
float pointer_y;
|
||||||
|
|
||||||
/* Keyboard a11y */
|
/* Keyboard a11y */
|
||||||
ClutterKeyboardA11yFlags a11y_flags;
|
MetaKeyboardA11yFlags a11y_flags;
|
||||||
GList *slow_keys_list;
|
GList *slow_keys_list;
|
||||||
guint debounce_timer;
|
guint debounce_timer;
|
||||||
uint16_t debounce_key;
|
uint16_t debounce_key;
|
||||||
@ -135,7 +136,7 @@ void meta_input_device_native_set_mapping_mode (ClutterInpu
|
|||||||
MetaInputDeviceMapping mapping);
|
MetaInputDeviceMapping mapping);
|
||||||
|
|
||||||
void meta_input_device_native_apply_kbd_a11y_settings (MetaInputDeviceNative *device,
|
void meta_input_device_native_apply_kbd_a11y_settings (MetaInputDeviceNative *device,
|
||||||
ClutterKbdA11ySettings *settings);
|
MetaKbdA11ySettings *settings);
|
||||||
|
|
||||||
void meta_input_device_native_a11y_maybe_notify_toggle_keys (MetaInputDeviceNative *device_evdev);
|
void meta_input_device_native_a11y_maybe_notify_toggle_keys (MetaInputDeviceNative *device_evdev);
|
||||||
|
|
||||||
|
@ -2705,18 +2705,6 @@ meta_seat_native_free_event_data (ClutterSeat *seat,
|
|||||||
meta_event_native_free (event_evdev);
|
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 guint
|
static guint
|
||||||
bump_virtual_touch_slot_base (MetaSeatNative *seat_native)
|
bump_virtual_touch_slot_base (MetaSeatNative *seat_native)
|
||||||
{
|
{
|
||||||
@ -2880,7 +2868,6 @@ meta_seat_native_class_init (MetaSeatNativeClass *klass)
|
|||||||
seat_class->get_keymap = meta_seat_native_get_keymap;
|
seat_class->get_keymap = meta_seat_native_get_keymap;
|
||||||
seat_class->copy_event_data = meta_seat_native_copy_event_data;
|
seat_class->copy_event_data = meta_seat_native_copy_event_data;
|
||||||
seat_class->free_event_data = meta_seat_native_free_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;
|
|
||||||
seat_class->create_virtual_device = meta_seat_native_create_virtual_device;
|
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->get_supported_virtual_device_types = meta_seat_native_get_supported_virtual_device_types;
|
||||||
seat_class->compress_motion = meta_seat_native_compress_motion;
|
seat_class->compress_motion = meta_seat_native_compress_motion;
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#include "backends/x11/meta-seat-x11.h"
|
#include "backends/x11/meta-seat-x11.h"
|
||||||
#include "backends/x11/meta-stage-x11.h"
|
#include "backends/x11/meta-stage-x11.h"
|
||||||
#include "backends/x11/meta-renderer-x11.h"
|
#include "backends/x11/meta-renderer-x11.h"
|
||||||
|
#include "backends/x11/meta-xkb-a11y-x11.h"
|
||||||
#include "clutter/clutter.h"
|
#include "clutter/clutter.h"
|
||||||
#include "clutter/x11/clutter-x11.h"
|
#include "clutter/x11/clutter-x11.h"
|
||||||
#include "compositor/compositor-private.h"
|
#include "compositor/compositor-private.h"
|
||||||
@ -519,6 +520,17 @@ on_monitors_changed (MetaMonitorManager *manager,
|
|||||||
priv->cached_current_logical_monitor = NULL;
|
priv->cached_current_logical_monitor = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_kbd_a11y_changed (MetaInputSettings *input_settings,
|
||||||
|
MetaKbdA11ySettings *a11y_settings,
|
||||||
|
MetaBackend *backend)
|
||||||
|
{
|
||||||
|
ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend);
|
||||||
|
ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend);
|
||||||
|
|
||||||
|
meta_seat_x11_apply_kbd_a11y_settings (seat, a11y_settings);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_backend_x11_post_init (MetaBackend *backend)
|
meta_backend_x11_post_init (MetaBackend *backend)
|
||||||
{
|
{
|
||||||
@ -527,6 +539,7 @@ meta_backend_x11_post_init (MetaBackend *backend)
|
|||||||
MetaMonitorManager *monitor_manager;
|
MetaMonitorManager *monitor_manager;
|
||||||
ClutterBackend *clutter_backend;
|
ClutterBackend *clutter_backend;
|
||||||
ClutterSeat *seat;
|
ClutterSeat *seat;
|
||||||
|
MetaInputSettings *input_settings;
|
||||||
int major, minor;
|
int major, minor;
|
||||||
gboolean has_xi = FALSE;
|
gboolean has_xi = FALSE;
|
||||||
|
|
||||||
@ -584,6 +597,15 @@ meta_backend_x11_post_init (MetaBackend *backend)
|
|||||||
seat = clutter_backend_get_default_seat (clutter_backend);
|
seat = clutter_backend_get_default_seat (clutter_backend);
|
||||||
meta_seat_x11_notify_devices (META_SEAT_X11 (seat),
|
meta_seat_x11_notify_devices (META_SEAT_X11 (seat),
|
||||||
CLUTTER_STAGE (meta_backend_get_stage (backend)));
|
CLUTTER_STAGE (meta_backend_get_stage (backend)));
|
||||||
|
|
||||||
|
input_settings = meta_backend_get_input_settings (backend);
|
||||||
|
|
||||||
|
if (input_settings)
|
||||||
|
{
|
||||||
|
g_signal_connect_object (meta_backend_get_input_settings (backend),
|
||||||
|
"kbd-a11y-changed",
|
||||||
|
G_CALLBACK (on_kbd_a11y_changed), backend, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static ClutterBackend *
|
static ClutterBackend *
|
||||||
|
@ -1325,13 +1325,15 @@ static void
|
|||||||
on_keymap_state_change (MetaKeymapX11 *keymap_x11,
|
on_keymap_state_change (MetaKeymapX11 *keymap_x11,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
ClutterSeat *seat = CLUTTER_SEAT (data);
|
ClutterSeat *seat = data;
|
||||||
ClutterKbdA11ySettings kbd_a11y_settings;
|
MetaInputSettings *input_settings;
|
||||||
|
MetaKbdA11ySettings kbd_a11y_settings;
|
||||||
|
|
||||||
/* On keymaps state change, just reapply the current settings, it'll
|
/* On keymaps state change, just reapply the current settings, it'll
|
||||||
* take care of enabling/disabling mousekeys based on NumLock state.
|
* take care of enabling/disabling mousekeys based on NumLock state.
|
||||||
*/
|
*/
|
||||||
clutter_seat_get_kbd_a11y_settings (seat, &kbd_a11y_settings);
|
input_settings = meta_backend_get_input_settings (meta_get_backend ());
|
||||||
|
meta_input_settings_get_kbd_a11y_settings (input_settings, &kbd_a11y_settings);
|
||||||
meta_seat_x11_apply_kbd_a11y_settings (seat, &kbd_a11y_settings);
|
meta_seat_x11_apply_kbd_a11y_settings (seat, &kbd_a11y_settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1755,7 +1757,6 @@ meta_seat_x11_class_init (MetaSeatX11Class *klass)
|
|||||||
seat_class->get_keymap = meta_seat_x11_get_keymap;
|
seat_class->get_keymap = meta_seat_x11_get_keymap;
|
||||||
seat_class->copy_event_data = meta_seat_x11_copy_event_data;
|
seat_class->copy_event_data = meta_seat_x11_copy_event_data;
|
||||||
seat_class->free_event_data = meta_seat_x11_free_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;
|
|
||||||
seat_class->create_virtual_device = meta_seat_x11_create_virtual_device;
|
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->get_supported_virtual_device_types = meta_seat_x11_get_supported_virtual_device_types;
|
||||||
seat_class->warp_pointer = meta_seat_x11_warp_pointer;
|
seat_class->warp_pointer = meta_seat_x11_warp_pointer;
|
||||||
|
@ -78,40 +78,43 @@ static void
|
|||||||
check_settings_changed (ClutterSeat *seat)
|
check_settings_changed (ClutterSeat *seat)
|
||||||
{
|
{
|
||||||
Display *xdisplay = clutter_x11_get_default_display ();
|
Display *xdisplay = clutter_x11_get_default_display ();
|
||||||
ClutterKbdA11ySettings kbd_a11y_settings;
|
MetaKbdA11ySettings kbd_a11y_settings;
|
||||||
ClutterKeyboardA11yFlags what_changed = 0;
|
MetaKeyboardA11yFlags what_changed = 0;
|
||||||
|
MetaInputSettings *input_settings;
|
||||||
XkbDescRec *desc;
|
XkbDescRec *desc;
|
||||||
|
|
||||||
desc = get_xkb_desc_rec (xdisplay);
|
desc = get_xkb_desc_rec (xdisplay);
|
||||||
if (!desc)
|
if (!desc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
clutter_seat_get_kbd_a11y_settings (seat, &kbd_a11y_settings);
|
input_settings = meta_backend_get_input_settings (meta_get_backend ());
|
||||||
|
meta_input_settings_get_kbd_a11y_settings (input_settings,
|
||||||
|
&kbd_a11y_settings);
|
||||||
|
|
||||||
if (desc->ctrls->enabled_ctrls & XkbSlowKeysMask &&
|
if (desc->ctrls->enabled_ctrls & XkbSlowKeysMask &&
|
||||||
!(kbd_a11y_settings.controls & CLUTTER_A11Y_SLOW_KEYS_ENABLED))
|
!(kbd_a11y_settings.controls & META_A11Y_SLOW_KEYS_ENABLED))
|
||||||
{
|
{
|
||||||
what_changed |= CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
what_changed |= META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
kbd_a11y_settings.controls |= CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
kbd_a11y_settings.controls |= META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
}
|
}
|
||||||
else if (!(desc->ctrls->enabled_ctrls & XkbSlowKeysMask) &&
|
else if (!(desc->ctrls->enabled_ctrls & XkbSlowKeysMask) &&
|
||||||
kbd_a11y_settings.controls & CLUTTER_A11Y_SLOW_KEYS_ENABLED)
|
kbd_a11y_settings.controls & META_A11Y_SLOW_KEYS_ENABLED)
|
||||||
{
|
{
|
||||||
what_changed |= CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
what_changed |= META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
kbd_a11y_settings.controls &= ~CLUTTER_A11Y_SLOW_KEYS_ENABLED;
|
kbd_a11y_settings.controls &= ~META_A11Y_SLOW_KEYS_ENABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc->ctrls->enabled_ctrls & XkbStickyKeysMask &&
|
if (desc->ctrls->enabled_ctrls & XkbStickyKeysMask &&
|
||||||
!(kbd_a11y_settings.controls & CLUTTER_A11Y_STICKY_KEYS_ENABLED))
|
!(kbd_a11y_settings.controls & META_A11Y_STICKY_KEYS_ENABLED))
|
||||||
{
|
{
|
||||||
what_changed |= CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
what_changed |= META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
kbd_a11y_settings.controls |= CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
kbd_a11y_settings.controls |= META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
}
|
}
|
||||||
else if (!(desc->ctrls->enabled_ctrls & XkbStickyKeysMask) &&
|
else if (!(desc->ctrls->enabled_ctrls & XkbStickyKeysMask) &&
|
||||||
kbd_a11y_settings.controls & CLUTTER_A11Y_STICKY_KEYS_ENABLED)
|
kbd_a11y_settings.controls & META_A11Y_STICKY_KEYS_ENABLED)
|
||||||
{
|
{
|
||||||
what_changed |= CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
what_changed |= META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
kbd_a11y_settings.controls &= ~CLUTTER_A11Y_STICKY_KEYS_ENABLED;
|
kbd_a11y_settings.controls &= ~META_A11Y_STICKY_KEYS_ENABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (what_changed)
|
if (what_changed)
|
||||||
@ -183,8 +186,8 @@ set_value_mask (gboolean flag,
|
|||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
set_xkb_ctrl (XkbDescRec *desc,
|
set_xkb_ctrl (XkbDescRec *desc,
|
||||||
ClutterKeyboardA11yFlags settings,
|
MetaKeyboardA11yFlags settings,
|
||||||
ClutterKeyboardA11yFlags flag,
|
MetaKeyboardA11yFlags flag,
|
||||||
unsigned long mask)
|
unsigned long mask)
|
||||||
{
|
{
|
||||||
gboolean result = (settings & flag) == flag;
|
gboolean result = (settings & flag) == flag;
|
||||||
@ -195,7 +198,7 @@ set_xkb_ctrl (XkbDescRec *desc,
|
|||||||
|
|
||||||
void
|
void
|
||||||
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
||||||
ClutterKbdA11ySettings *kbd_a11y_settings)
|
MetaKbdA11ySettings *kbd_a11y_settings)
|
||||||
{
|
{
|
||||||
Display *xdisplay = clutter_x11_get_default_display ();
|
Display *xdisplay = clutter_x11_get_default_display ();
|
||||||
XkbDescRec *desc;
|
XkbDescRec *desc;
|
||||||
@ -206,13 +209,13 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* general */
|
/* general */
|
||||||
enable_accessX = kbd_a11y_settings->controls & CLUTTER_A11Y_KEYBOARD_ENABLED;
|
enable_accessX = kbd_a11y_settings->controls & META_A11Y_KEYBOARD_ENABLED;
|
||||||
|
|
||||||
desc->ctrls->enabled_ctrls = set_value_mask (enable_accessX,
|
desc->ctrls->enabled_ctrls = set_value_mask (enable_accessX,
|
||||||
desc->ctrls->enabled_ctrls,
|
desc->ctrls->enabled_ctrls,
|
||||||
XkbAccessXKeysMask);
|
XkbAccessXKeysMask);
|
||||||
|
|
||||||
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, CLUTTER_A11Y_TIMEOUT_ENABLED,
|
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls, META_A11Y_TIMEOUT_ENABLED,
|
||||||
XkbAccessXTimeoutMask))
|
XkbAccessXTimeoutMask))
|
||||||
{
|
{
|
||||||
desc->ctrls->ax_timeout = kbd_a11y_settings->timeout_delay;
|
desc->ctrls->ax_timeout = kbd_a11y_settings->timeout_delay;
|
||||||
@ -226,17 +229,17 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
|||||||
}
|
}
|
||||||
|
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_FEATURE_STATE_CHANGE_BEEP,
|
||||||
desc->ctrls->ax_options,
|
desc->ctrls->ax_options,
|
||||||
XkbAccessXFeedbackMask | XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask);
|
XkbAccessXFeedbackMask | XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask);
|
||||||
|
|
||||||
/* bounce keys */
|
/* bounce keys */
|
||||||
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
||||||
CLUTTER_A11Y_BOUNCE_KEYS_ENABLED, XkbBounceKeysMask))
|
META_A11Y_BOUNCE_KEYS_ENABLED, XkbBounceKeysMask))
|
||||||
{
|
{
|
||||||
desc->ctrls->debounce_delay = kbd_a11y_settings->debounce_delay;
|
desc->ctrls->debounce_delay = kbd_a11y_settings->debounce_delay;
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_BOUNCE_KEYS_BEEP_REJECT,
|
||||||
desc->ctrls->ax_options,
|
desc->ctrls->ax_options,
|
||||||
XkbAccessXFeedbackMask | XkbAX_BKRejectFBMask);
|
XkbAccessXFeedbackMask | XkbAX_BKRejectFBMask);
|
||||||
}
|
}
|
||||||
@ -248,7 +251,7 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
|||||||
desc->ctrls->enabled_ctrls &= ~(XkbMouseKeysMask | XkbMouseKeysAccelMask);
|
desc->ctrls->enabled_ctrls &= ~(XkbMouseKeysMask | XkbMouseKeysAccelMask);
|
||||||
}
|
}
|
||||||
else if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
else if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
||||||
CLUTTER_A11Y_MOUSE_KEYS_ENABLED, XkbMouseKeysMask | XkbMouseKeysAccelMask))
|
META_A11Y_MOUSE_KEYS_ENABLED, XkbMouseKeysMask | XkbMouseKeysAccelMask))
|
||||||
{
|
{
|
||||||
int mk_max_speed;
|
int mk_max_speed;
|
||||||
int mk_accel_time;
|
int mk_accel_time;
|
||||||
@ -273,16 +276,16 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
|||||||
|
|
||||||
/* slow keys */
|
/* slow keys */
|
||||||
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
||||||
CLUTTER_A11Y_SLOW_KEYS_ENABLED, XkbSlowKeysMask))
|
META_A11Y_SLOW_KEYS_ENABLED, XkbSlowKeysMask))
|
||||||
{
|
{
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_SLOW_KEYS_BEEP_PRESS,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKPressFBMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKPressFBMask);
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_SLOW_KEYS_BEEP_ACCEPT,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKAcceptFBMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKAcceptFBMask);
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_SLOW_KEYS_BEEP_REJECT,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKRejectFBMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_SKRejectFBMask);
|
||||||
desc->ctrls->slow_keys_delay = kbd_a11y_settings->slowkeys_delay;
|
desc->ctrls->slow_keys_delay = kbd_a11y_settings->slowkeys_delay;
|
||||||
/* anything larger than 500 seems to loose all keyboard input */
|
/* anything larger than 500 seems to loose all keyboard input */
|
||||||
@ -292,20 +295,20 @@ meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
|||||||
|
|
||||||
/* sticky keys */
|
/* sticky keys */
|
||||||
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
if (set_xkb_ctrl (desc, kbd_a11y_settings->controls,
|
||||||
CLUTTER_A11Y_STICKY_KEYS_ENABLED, XkbStickyKeysMask))
|
META_A11Y_STICKY_KEYS_ENABLED, XkbStickyKeysMask))
|
||||||
{
|
{
|
||||||
desc->ctrls->ax_options |= XkbAX_LatchToLockMask;
|
desc->ctrls->ax_options |= XkbAX_LatchToLockMask;
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_STICKY_KEYS_TWO_KEY_OFF,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_TwoKeysMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_TwoKeysMask);
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_STICKY_KEYS_BEEP,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_STICKY_KEYS_BEEP,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_StickyKeysFBMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_StickyKeysFBMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* toggle keys */
|
/* toggle keys */
|
||||||
desc->ctrls->ax_options =
|
desc->ctrls->ax_options =
|
||||||
set_value_mask (kbd_a11y_settings->controls & CLUTTER_A11Y_TOGGLE_KEYS_ENABLED,
|
set_value_mask (kbd_a11y_settings->controls & META_A11Y_TOGGLE_KEYS_ENABLED,
|
||||||
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_IndicatorFBMask);
|
desc->ctrls->ax_options, XkbAccessXFeedbackMask | XkbAX_IndicatorFBMask);
|
||||||
|
|
||||||
set_xkb_desc_rec (xdisplay, desc);
|
set_xkb_desc_rec (xdisplay, desc);
|
||||||
|
@ -26,11 +26,12 @@
|
|||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
#include "backends/meta-input-settings-private.h"
|
||||||
#include "clutter/clutter.h"
|
#include "clutter/clutter.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
meta_seat_x11_apply_kbd_a11y_settings (ClutterSeat *seat,
|
||||||
ClutterKbdA11ySettings *kbd_a11y_settings);
|
MetaKbdA11ySettings *kbd_a11y_settings);
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
meta_seat_x11_a11y_init (ClutterSeat *seat);
|
meta_seat_x11_a11y_init (ClutterSeat *seat);
|
||||||
|
Loading…
Reference in New Issue
Block a user