clean up events in queue when touch device is removed 31/323231/2
authorduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:16:39 +0000 (18:16 +0900)
committerduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:28:32 +0000 (18:28 +0900)
Change-Id: Ied45fa4aa9e551642d9d12d7387250a5ff8b7aca

src/e_mod_gesture_device.c

index 6846a57e9df8f2ec6b4d979fc367ad735f9161fd..a78b3fc22acdb97bba0a3e01400b915b2f2b1208 100644 (file)
@@ -124,17 +124,29 @@ E_Gesture_Event_State
 e_gesture_device_del(Ecore_Event_Device_Info *ev)
 {
    Eina_List *l, *l_next;
-   char *data;
+   char *name;
+   E_Gesture_Event_Info *data;
 
    if (ev->clas == ECORE_DEVICE_CLASS_TOUCH)
      {
-        EINA_LIST_FOREACH_SAFE(gesture->device.touch_devices, l, l_next, data)
+        EINA_LIST_FOREACH_SAFE(gesture->device.touch_devices, l, l_next, name)
           {
-             if (!strncmp(data, ev->identifier, strlen(ev->identifier) + 1))
+             if (!strncmp(name, ev->identifier, strlen(ev->identifier) + 1))
                {
                   GTINF("%s(%s) device is touch device: remove list\n", ev->name, ev->identifier);
-                  gesture->device.touch_devices = eina_list_remove(gesture->device.touch_devices, data);
+                  gesture->device.touch_devices = eina_list_remove(gesture->device.touch_devices, name);
+                  E_FREE(name);
+               }
+          }
+        if (eina_list_count(gesture->device.touch_devices) == 0)
+          {
+             GTWRN("No connected touch device. clean up events in queue cnt:%d", eina_list_count(gesture->event_queue));
+
+             EINA_LIST_FOREACH_SAFE(gesture->event_queue, l, l_next, data)
+               {
+                  E_FREE(data->event);
                   E_FREE(data);
+                  gesture->event_queue = eina_list_remove_list(gesture->event_queue, l);
                }
           }
      }