device: Fix a bug to remove keys if this key is pressed or not 00/81000/3 accepted/tizen/common/20160721.180719 accepted/tizen/ivi/20160721.100436 accepted/tizen/mobile/20160721.102510 accepted/tizen/tv/20160721.102124 accepted/tizen/wearable/20160721.100018 submit/tizen/20160721.085724
authorJengHyun Kang <jhyuni.kang@samsung.com>
Thu, 21 Jul 2016 08:32:25 +0000 (17:32 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Thu, 21 Jul 2016 08:42:37 +0000 (17:42 +0900)
Change-Id: I345ce0f930bbcbbc22d4a95163a5c12299cca521

src/e_devicemgr_device.c

index ad7ce52008fa7ca528cf29efe025717efd02cb07..fb5df82a0451014846b7a927e5e51c63841c67d3 100644 (file)
@@ -443,10 +443,13 @@ e_devicemgr_block_check_keyboard(int type, void *event)
           {
              EINA_LIST_FOREACH_SAFE(input_devmgr_data->pressed_keys, l, l_next, data)
                {
-                  DMERR("%d is already press key. Propagate this key event.\n", *data);
-                  input_devmgr_data->pressed_keys = eina_list_remove_list(input_devmgr_data->pressed_keys, l);
-                  E_FREE(data);
-                  return ECORE_CALLBACK_PASS_ON;
+                  if (ev->keycode == *data)
+                    {
+                       DMERR("%d is already press key. Propagate this key event.\n", *data);
+                       input_devmgr_data->pressed_keys = eina_list_remove_list(input_devmgr_data->pressed_keys, l);
+                       E_FREE(data);
+                       return ECORE_CALLBACK_PASS_ON;
+                    }
                }
           }
         return ECORE_CALLBACK_DONE;
@@ -455,11 +458,17 @@ e_devicemgr_block_check_keyboard(int type, void *event)
    if (type == ECORE_EVENT_KEY_DOWN)
      {
         keycode = E_NEW(int, 1);
+        EINA_SAFETY_ON_NULL_RETURN_VAL(keycode, ECORE_CALLBACK_PASS_ON);
+
         *keycode = ev->keycode;
 
         EINA_LIST_FOREACH(input_devmgr_data->pressed_keys, l, data)
           {
-             if (*data == *keycode) break;
+             if (*data == *keycode)
+               {
+                  E_FREE(keycode);
+                  return ECORE_CALLBACK_PASS_ON;
+               }
           }
         input_devmgr_data->pressed_keys = eina_list_append(input_devmgr_data->pressed_keys, keycode);
      }
@@ -467,8 +476,11 @@ e_devicemgr_block_check_keyboard(int type, void *event)
      {
         EINA_LIST_FOREACH_SAFE(input_devmgr_data->pressed_keys, l, l_next, data)
           {
-             input_devmgr_data->pressed_keys = eina_list_remove_list(input_devmgr_data->pressed_keys, l);
-             E_FREE(data);
+             if (ev->keycode == *data)
+               {
+                  input_devmgr_data->pressed_keys = eina_list_remove_list(input_devmgr_data->pressed_keys, l);
+                  E_FREE(data);
+               }
           }
      }