diff options
Diffstat (limited to 'clutter/clutter/x11/clutter-virtual-input-device-x11.c')
-rw-r--r-- | clutter/clutter/x11/clutter-virtual-input-device-x11.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/clutter/clutter/x11/clutter-virtual-input-device-x11.c b/clutter/clutter/x11/clutter-virtual-input-device-x11.c index e16ba3fd0..cab26c38c 100644 --- a/clutter/clutter/x11/clutter-virtual-input-device-x11.c +++ b/clutter/clutter/x11/clutter-virtual-input-device-x11.c @@ -143,8 +143,13 @@ clutter_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtu if (!clutter_keymap_x11_keycode_for_keyval (keymap, keyval, &keycode, &level)) { - g_warning ("No keycode found for keyval %x in current group", keyval); - return; + level = 0; + + if (!clutter_keymap_x11_reserve_keycode (keymap, keyval, &keycode)) + { + g_warning ("No keycode found for keyval %x in current group", keyval); + return; + } } if (!_clutter_keymap_x11_get_is_modifier (keymap, keycode) && @@ -155,9 +160,13 @@ clutter_virtual_input_device_x11_notify_keyval (ClutterVirtualInputDevice *virtu (KeyCode) keycode, key_state == CLUTTER_KEY_STATE_PRESSED, 0); - if (!_clutter_keymap_x11_get_is_modifier (keymap, keycode) && - key_state == CLUTTER_KEY_STATE_RELEASED) - clutter_keymap_x11_latch_modifiers (keymap, level, FALSE); + + if (key_state == CLUTTER_KEY_STATE_RELEASED) + { + if (!_clutter_keymap_x11_get_is_modifier (keymap, keycode)) + clutter_keymap_x11_latch_modifiers (keymap, level, FALSE); + clutter_keymap_x11_release_keycode_if_needed (keymap, keycode); + } } static void |