Do not deliver release keys if client ungrab keys after get key press events 17/86417/2
authorJengHyun Kang <jhyuni.kang@samsung.com>
Thu, 1 Sep 2016 06:17:40 +0000 (15:17 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 5 Sep 2016 09:00:15 +0000 (02:00 -0700)
Change-Id: I71ab71ef6293ac1cd3c042101e6e4472e3a80cc9

src/e_mod_keyrouter_list.c
src/e_mod_main_wl.c [changed mode: 0755->0644]

index ceae655974e9397c04ae44c69e850d14945d4fc7..6631f3497e072bc71d826357d60641690d28f5cf 100644 (file)
@@ -239,15 +239,29 @@ e_keyrouter_find_and_remove_client_from_list(struct wl_resource *surface, struct
           {
              if (surface == key_node_data->surface)
                {
-                  *list = eina_list_remove_list(*list, l);
-                  E_FREE(key_node_data);
+                  if (mode == TIZEN_KEYROUTER_MODE_PRESSED)
+                    {
+                       key_node_data->deleted = EINA_TRUE;
+                    }
+                  else
+                    {
+                       *list = eina_list_remove_list(*list, l);
+                       E_FREE(key_node_data);
+                    }
                   KLDBG("Remove a %s Mode Grabbed key(%d) by surface(%p)\n", _mode_str_get(mode), key, surface);
                }
           }
         else if ((wc == key_node_data->wc))
           {
-             *list = eina_list_remove_list(*list, l);
-             E_FREE(key_node_data);
+             if (mode == TIZEN_KEYROUTER_MODE_PRESSED)
+               {
+                  key_node_data->deleted = EINA_TRUE;
+               }
+             else
+               {
+                  *list = eina_list_remove_list(*list, l);
+                  E_FREE(key_node_data);
+               }
              KLDBG("Remove a %s Mode Grabbed key(%d) by wc(%p)\n", _mode_str_get(mode), key, wc);
           }
      }
@@ -754,6 +768,7 @@ _mode_str_get(uint32_t mode)
       case TIZEN_KEYROUTER_MODE_TOPMOST:               str = "Topmost";               break;
       case TIZEN_KEYROUTER_MODE_SHARED:                str = "Shared";                break;
       case TIZEN_KEYROUTER_MODE_REGISTERED:            str = "Registered";            break;
+      case TIZEN_KEYROUTER_MODE_PRESSED:               str = "Pressed";               break;
       default: str = "UnknownMode"; break;
      }
 
@@ -771,6 +786,7 @@ _e_keyrouter_get_list(int mode, int key)
         case TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE: list = &krt->HardKeys[key].or_excl_ptr; break;
         case TIZEN_KEYROUTER_MODE_TOPMOST:               list = &krt->HardKeys[key].top_ptr;     break;
         case TIZEN_KEYROUTER_MODE_SHARED:                list = &krt->HardKeys[key].shared_ptr;  break;
+        case TIZEN_KEYROUTER_MODE_PRESSED:                list = &krt->HardKeys[key].press_ptr;  break;
         default: break;
      }
 
old mode 100755 (executable)
new mode 100644 (file)
index bba5fb1..702b99b
@@ -124,6 +124,9 @@ _e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface
         /* SHARED grab */
         e_keyrouter_find_and_remove_client_from_list(NULL, client, key, TIZEN_KEYROUTER_MODE_SHARED);
 
+        /* Press List */
+        e_keyrouter_find_and_remove_client_from_list(NULL, client, key, TIZEN_KEYROUTER_MODE_PRESSED);
+
         return TIZEN_KEYROUTER_ERROR_NONE;
      }
 
@@ -139,6 +142,9 @@ _e_keyrouter_keygrab_unset(struct wl_client *client, struct wl_resource *surface
    /* REGISTERED grab */
    e_keyrouter_unset_keyregister(surface, client, key);
 
+   /* Press List */
+   e_keyrouter_find_and_remove_client_from_list(surface, client, key, TIZEN_KEYROUTER_MODE_PRESSED);
+
    return TIZEN_KEYROUTER_ERROR_NONE;
 }