summaryrefslogtreecommitdiff
path: root/clutter/clutter/x11/clutter-virtual-input-device-x11.c
diff options
context:
space:
mode:
Diffstat (limited to 'clutter/clutter/x11/clutter-virtual-input-device-x11.c')
-rw-r--r--clutter/clutter/x11/clutter-virtual-input-device-x11.c19
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