From 2a8d7cf0a81f7a6b1bd287de313cc1002c1d07d9 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Mon, 7 Mar 2011 16:49:23 +0900 Subject: [PATCH] Revert to use fakekey_send_event. --- src/desktop-client.c | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/desktop-client.c b/src/desktop-client.c index 38d04a3b..104ec1e9 100644 --- a/src/desktop-client.c +++ b/src/desktop-client.c @@ -604,6 +604,23 @@ on_xkl_state_changed (XklEngine *xklengine, } #ifdef HAVE_FAKEKEY +G_INLINE_FUNC FakeKeyModifier +get_fakekey_modifiers (EekModifierType modifiers) +{ + FakeKeyModifier retval = 0; + + if (modifiers & EEK_SHIFT_MASK) + retval |= FAKEKEYMOD_SHIFT; + if (modifiers & EEK_CONTROL_MASK) + retval |= FAKEKEYMOD_CONTROL; + if (modifiers & EEK_MOD1_MASK) + retval |= FAKEKEYMOD_ALT; + if (modifiers & EEK_META_MASK) + retval |= FAKEKEYMOD_META; + + return retval; +} + static void on_key_pressed (EekKeyboard *keyboard, EekKey *key, @@ -616,10 +633,21 @@ on_key_pressed (EekKeyboard *keyboard, symbol = eek_key_get_symbol_with_fallback (key, 0, 0); if (EEK_IS_KEYSYM(symbol) && !eek_symbol_is_modifier (symbol)) { - fakekey_press_keysym (client->fakekey, - eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)), - 0); - fakekey_release (client->fakekey); + guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol)); + guint keycode = + XKeysymToKeycode (GDK_DISPLAY_XDISPLAY (client->display), xkeysym); + EekModifierType modifiers = + eek_keyboard_get_modifiers (client->keyboard); + FakeKeyModifier fakekey_modifiers = get_fakekey_modifiers (modifiers); + + fakekey_send_keyevent (client->fakekey, + keycode, + TRUE, + fakekey_modifiers); + fakekey_send_keyevent (client->fakekey, + keycode, + FALSE, + fakekey_modifiers); } }