Check shift after X Keyboard Mapping changed 09/33709/1
authorLi Zhang <li2012.zhang@samsung.com>
Thu, 13 Nov 2014 10:10:20 +0000 (18:10 +0800)
committerLi Zhang <li2012.zhang@samsung.com>
Wed, 14 Jan 2015 02:44:17 +0000 (10:44 +0800)
[model] All
[binary_type] PDA
[customer] OPEN
[issue#] P141110-00525
[problem] when try to type some letters as upper case characters, lower case characters were inputed until 7 characters
[cause] Shift status check error
[solution] Check shift after X Keyboard Mapping changed
[team] Input Framework
[request] N/A
[horizontal_expansion] N/A

Change-Id: I4d5a3571dd9a2cec3380b26e3eca4dacf0a9b0e6

ism/extras/efl_immodule/isf_imf_context.cpp

index e73003c..957f651 100644 (file)
@@ -3810,7 +3810,7 @@ static void send_x_key_event (const KeyEvent &key, bool fake)
 
     ::KeyCode keycode = 0;
     ::KeySym keysym = 0;
-    int shift = 0;
+    bool shift = false;
     char key_string[256] = {0};
     char keysym_str[256] = {0};
     Window focus_win;
@@ -3853,11 +3853,11 @@ static void send_x_key_event (const KeyEvent &key, bool fake)
     keycode = _keyname_to_keycode (keysym_str);
     if (XkbKeycodeToKeysym (display, keycode, 0, 0) != keysym) {
         if (XkbKeycodeToKeysym (display, keycode, 0, 1) == keysym)
-            shift = 1;
+            shift = true;
         else
             keycode = 0;
     } else {
-        shift = 0;
+        shift = false;
     }
 
     if (keycode == 0) {
@@ -3882,6 +3882,13 @@ static void send_x_key_event (const KeyEvent &key, bool fake)
             XSync (display, False);
             keycode = keycode_max - mod - 1;
         }
+
+        if (XkbKeycodeToKeysym (display, keycode, 0, 0) != keysym) {
+            if (XkbKeycodeToKeysym (display, keycode, 0, 1) == keysym)
+                shift = true;
+        } else {
+            shift = false;
+        }
     }
 
     unsigned int modifier = scim_x11_keymask_scim_to_x11 (display, key.mask);