Revert "Allocate a grab list memory in the client" 64/77164/1 accepted/tizen/common/20160629.223018 accepted/tizen/ivi/20160629.071123 accepted/tizen/mobile/20160629.071305 accepted/tizen/tv/20160629.070921 accepted/tizen/wearable/20160629.071111 submit/tizen/20160629.023614
authorJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 29 Jun 2016 02:32:20 +0000 (11:32 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 29 Jun 2016 02:33:19 +0000 (11:33 +0900)
This reverts commit 871d382855bf77f472d608cf6d47abb8bc56c376.

Change-Id: Ie8a25d44fc385397b389a58f35d15311e04df1d8

src/e_mod_main_wl.c
src/e_mod_main_wl.h

index 9f646fa..38636e9 100644 (file)
@@ -191,57 +191,76 @@ _e_keyrouter_cb_get_keygrab_status(struct wl_client *client, struct wl_resource
 static void
 _e_keyrouter_cb_keygrab_set_list(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, struct wl_array *grab_list)
 {
+   struct wl_array grab_result_list = {0,};
+   E_Keyrouter_Grab_Result *grab_result = NULL;
    E_Keyrouter_Grab_Request *grab_request = NULL;
    int res = TIZEN_KEYROUTER_ERROR_NONE;
 
    TRACE_INPUT_BEGIN(_e_keyrouter_cb_keygrab_set_list);
 
-   if (0 != (_e_keyrouter_wl_array_length(grab_list) % 3))
+   wl_array_init(&grab_result_list);
+
+   if (0 != (_e_keyrouter_wl_array_length(grab_list) % 2))
      {
         /* FIX ME: Which way is effectively to notify invalid pair to client */
         KLWRN("Invalid keycode and grab mode pair. Check arguments in a list\n");
-        TRACE_INPUT_END();
-        tizen_keyrouter_send_keygrab_notify_list(resource, surface, NULL);
-        return;
+        grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
+        if (grab_result)
+          {
+             grab_result->request_data.key = 0;
+             grab_result->request_data.mode = 0;
+             grab_result->err = TIZEN_KEYROUTER_ERROR_INVALID_ARRAY;
+          }
+        goto send_notify;
      }
 
    wl_array_for_each(grab_request, grab_list)
      {
         KLINF("Grab request using list  (client: %p, surface: %p, pid: %d, key: %d, mode: %d]\n", client, surface, e_keyrouter_util_get_pid(client, surface), grab_request->key, grab_request->mode);
         res = _e_keyrouter_keygrab_set(client, surface, grab_request->key, grab_request->mode);
-        grab_request->err = res;
+        grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
+        if (grab_result)
+          {
+             grab_result->request_data.key = grab_request->key;
+             grab_result->request_data.mode = grab_request->mode;
+             grab_result->err = res;
+          }
      }
 
+send_notify:
    TRACE_INPUT_END();
-   tizen_keyrouter_send_keygrab_notify_list(resource, surface, grab_list);
+   tizen_keyrouter_send_keygrab_notify_list(resource, surface, &grab_result_list);
+   wl_array_release(&grab_result_list);
 }
 
 static void
 _e_keyrouter_cb_keygrab_unset_list(struct wl_client *client, struct wl_resource *resource, struct wl_resource *surface, struct wl_array *ungrab_list)
 {
-   E_Keyrouter_Ungrab_Request *ungrab_request = NULL;
+   struct wl_array grab_result_list = {0,};
+   E_Keyrouter_Grab_Result *grab_result = NULL;
+   int *ungrab_request = NULL;
    int res = TIZEN_KEYROUTER_ERROR_NONE;
 
    TRACE_INPUT_BEGIN(_e_keyrouter_cb_keygrab_unset_list);
 
-   if (0 != (_e_keyrouter_wl_array_length(ungrab_list) % 2))
-     {
-        /* FIX ME: Which way is effectively to notify invalid pair to client */
-        KLWRN("Invalid keycode and error pair. Check arguments in a list\n");
-        TRACE_INPUT_END();
-        tizen_keyrouter_send_keygrab_notify_list(resource, surface, ungrab_list);
-        return;
-     }
+   wl_array_init(&grab_result_list);
 
    wl_array_for_each(ungrab_request, ungrab_list)
      {
-        KLINF("Ungrab request using list  (client: %p, surface: %p, pid: %d, key: %d, res: %d]\n", client, surface, e_keyrouter_util_get_pid(client, surface), ungrab_request->key, res);
-        res = _e_keyrouter_keygrab_unset(client, surface, ungrab_request->key);
-        ungrab_request->err = res;
+        KLINF("Ungrab request using list  (client: %p, surface: %p, pid: %d, key: %d, res: %d]\n", client, surface, e_keyrouter_util_get_pid(client, surface), *ungrab_request, res);
+        res = _e_keyrouter_keygrab_unset(client, surface, *ungrab_request);
+        grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
+        if (grab_result)
+          {
+             grab_result->request_data.key = *ungrab_request;
+             grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_NONE;
+             grab_result->err = res;
+          }
      }
 
    TRACE_INPUT_END();
-   tizen_keyrouter_send_keygrab_notify_list(resource, surface, ungrab_list);
+   tizen_keyrouter_send_keygrab_notify_list(resource, surface, &grab_result_list);
+   wl_array_release(&grab_result_list);
 }
 
 static void
@@ -409,7 +428,7 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
 {
    E_Keyrouter_Key_List_NodePtr key_node_data = NULL;
    struct wl_array grab_result_list = {0,};
-   E_Keyrouter_Grab_Request *grab_result = NULL;
+   E_Keyrouter_Grab_Result *grab_result = NULL;
    E_Keyrouter_Registered_Window_Info *rwin_info = NULL;
    Eina_List *l = NULL, *ll = NULL, *l_next = NULL;
    int *key_data;
@@ -425,12 +444,11 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
           {
              if (surface == key_node_data->surface)
                {
-                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Request));
+                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
                   if (grab_result)
                     {
-                       grab_result->key = i;
-                       grab_result->mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
-                       grab_result->err = TIZEN_KEYROUTER_ERROR_NONE;
+                       grab_result->request_data.key = i;
+                       grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_EXCLUSIVE;
                     }
                }
           }
@@ -438,12 +456,11 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
           {
              if (surface == key_node_data->surface)
                {
-                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Request));
+                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
                   if (grab_result)
                     {
-                       grab_result->key = i;
-                       grab_result->mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
-                       grab_result->err = TIZEN_KEYROUTER_ERROR_NONE;
+                       grab_result->request_data.key = i;
+                       grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_OVERRIDABLE_EXCLUSIVE;
                     }
                }
           }
@@ -451,12 +468,11 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
           {
              if (surface == key_node_data->surface)
                {
-                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Request));
+                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
                   if (grab_result)
                     {
-                       grab_result->key = i;
-                       grab_result->mode = TIZEN_KEYROUTER_MODE_TOPMOST;
-                       grab_result->err = TIZEN_KEYROUTER_ERROR_NONE;
+                       grab_result->request_data.key = i;
+                       grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_TOPMOST;
                     }
                }
           }
@@ -464,12 +480,11 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
           {
              if (surface == key_node_data->surface)
                {
-                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Request));
+                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
                   if (grab_result)
                     {
-                       grab_result->key = i;
-                       grab_result->mode = TIZEN_KEYROUTER_MODE_SHARED;
-                       grab_result->err = TIZEN_KEYROUTER_ERROR_NONE;
+                       grab_result->request_data.key = i;
+                       grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_SHARED;
                     }
                }
           }
@@ -481,12 +496,11 @@ _e_keyrouter_cb_keygrab_get_list(struct wl_client *client, struct wl_resource *r
           {
              EINA_LIST_FOREACH(rwin_info->keys, ll, key_data)
                {
-                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Request));
+                  grab_result = wl_array_add(&grab_result_list, sizeof(E_Keyrouter_Grab_Result));
                   if (grab_result)
                     {
-                       grab_result->key = *key_data;
-                       grab_result->mode = TIZEN_KEYROUTER_MODE_REGISTERED;
-                       grab_result->err = TIZEN_KEYROUTER_ERROR_NONE;
+                       grab_result->request_data.key = *key_data;
+                       grab_result->request_data.mode = TIZEN_KEYROUTER_MODE_REGISTERED;
                     }
                }
           }
index 27c63c9..972f85c 100644 (file)
@@ -45,7 +45,7 @@ typedef struct _E_Keyrouter_Key_List_Node* E_Keyrouter_Key_List_NodePtr;
 typedef struct _E_Keyrouter_Tizen_HWKey E_Keyrouter_Tizen_HWKey;
 typedef struct _E_Keyrouter_Grabbed_Key E_Keyrouter_Grabbed_Key;
 typedef struct _E_Keyrouter_Grab_Request E_Keyrouter_Grab_Request;
-typedef struct _E_Keyrouter_Ungrab_Request E_Keyrouter_Ungrab_Request;
+typedef struct _E_Keyrouter_Grab_Result E_Keyrouter_Grab_Result;
 typedef struct _E_Keyrouter_Registered_Window_Info E_Keyrouter_Registered_Window_Info;
 
 typedef struct _E_Keyrouter_Conf_Edd E_Keyrouter_Conf_Edd;
@@ -143,11 +143,10 @@ struct _E_Keyrouter
 struct _E_Keyrouter_Grab_Request {
    int key;
    int mode;
-   int err;
 };
 
-struct _E_Keyrouter_Ungrab_Request {
-   int key;
+struct _E_Keyrouter_Grab_Result {
+   E_Keyrouter_Grab_Request request_data;
    int err;
 };