diff options
author | Mike Gorse <mgorse@suse.com> | 2021-05-12 15:46:05 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@suse.com> | 2021-05-12 15:46:05 -0500 |
commit | 1a7d59f174a66d2b46a7774c1f09154a94ea151c (patch) | |
tree | 424570b55d5ce0dd02934a9943f687cc1b241b1e /atspi/atspi-device-legacy.c | |
parent | 89c6d6051957025d57bc32c3b82dabab76eab3b3 (diff) | |
download | at-spi2-core-1a7d59f174a66d2b46a7774c1f09154a94ea151c.tar.gz |
AtspiDevice key grab fixes
Diffstat (limited to 'atspi/atspi-device-legacy.c')
-rw-r--r-- | atspi/atspi-device-legacy.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/atspi/atspi-device-legacy.c b/atspi/atspi-device-legacy.c index 6c19b790..eb677685 100644 --- a/atspi/atspi-device-legacy.c +++ b/atspi/atspi-device-legacy.c @@ -47,6 +47,7 @@ struct _AtspiDeviceLegacyPrivate GSList *modifiers; guint virtual_mods_enabled; gboolean keyboard_grabbed; + unsigned int numlock_physical_mask; }; GObjectClass *device_legacy_parent_class; @@ -91,13 +92,19 @@ key_cb (AtspiDeviceEvent *event, void *user_data) AtspiDeviceLegacy *legacy_device = ATSPI_DEVICE_LEGACY (user_data); AtspiDeviceLegacyPrivate *priv = atspi_device_legacy_get_instance_private (legacy_device); gboolean ret = priv->keyboard_grabbed; - + guint modifiers; + set_virtual_modifier (legacy_device, event->hw_code, event->type == (AtspiEventType)ATSPI_KEY_PRESS); + + modifiers = event->modifiers | priv->virtual_mods_enabled; + if (modifiers & (1 << ATSPI_MODIFIER_NUMLOCK)) + modifiers &= ~priv->numlock_physical_mask; + ret |= atspi_device_notify_key (ATSPI_DEVICE (legacy_device), event->type == (AtspiEventType)ATSPI_KEY_PRESS, event->hw_code, event->id, - event->modifiers | priv->virtual_mods_enabled, + modifiers, event->event_string); g_boxed_free (ATSPI_TYPE_DEVICE_EVENT, event); @@ -126,6 +133,9 @@ check_virtual_modifier (AtspiDeviceLegacy *legacy_device, guint modifier) AtspiDeviceLegacyPrivate *priv = atspi_device_legacy_get_instance_private (legacy_device); GSList *l; + if (modifier == (1 << ATSPI_MODIFIER_NUMLOCK)) + return TRUE; + for (l = priv->modifiers; l; l = l->next) { AtspiLegacyKeyModifier *entry = l->data; @@ -269,6 +279,8 @@ atspi_device_legacy_init (AtspiDeviceLegacy *device) priv->display=XOpenDisplay(""); if (priv->display) priv->window = DefaultRootWindow(priv->display); + priv->numlock_physical_mask = XkbKeysymToModifiers (priv->display, + XK_Num_Lock); #endif } |