add handling ecore cancel events and cancel recognizing gestures 29/323229/1
authorduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:11:10 +0000 (18:11 +0900)
committerduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:11:10 +0000 (18:11 +0900)
Change-Id: I951dccaa240db4f74f19b288d1cfa2f624650f28

src/e_mod_gesture_events.c
src/e_mod_main.c

index c9103384ba7d9a2141fffbf5a50cd394baf0ed45..1bd561604aab0d13988e019d1822993ee118f655 100644 (file)
@@ -1854,6 +1854,64 @@ _e_gesture_process_mouse_button_down(void *event)
    return gesture->event_state;
 }
 
+static E_Gesture_Event_State
+_e_gesture_process_mouse_button_cancel(void *event)
+{
+   Ecore_Event_Mouse_Button *ev = event;
+
+   //For Debug
+   GTWRN("Mouse Cancel. id:%d dev:%s", ev->multi.device,
+         ev->dev ? ecore_device_identifier_get(ev->dev) : "No device");
+
+   if (!_e_gesture_process_touch_check(ev->dev, ev->multi.device))
+     return E_GESTURE_EVENT_STATE_PROPAGATE;
+
+   gesture->gesture_events.base_point[ev->multi.device + 1].pressed = EINA_FALSE;
+   gesture->gesture_events.base_point[ev->multi.device + 1].axis.x = 0;
+   gesture->gesture_events.base_point[ev->multi.device + 1].axis.y = 0;
+
+   if (gesture->gesture_events.num_pressed != 0)
+     return E_GESTURE_EVENT_STATE_PROPAGATE;
+
+   if (!(gesture->gesture_filter & E_GESTURE_TYPE_EDGE_SWIPE))
+     {
+        _e_gesture_edge_swipe_cancel();
+     }
+   if (!(gesture->gesture_filter & E_GESTURE_TYPE_EDGE_DRAG))
+     {
+        _e_gesture_edge_drag_cancel();
+     }
+   if (!(gesture->gesture_filter & E_GESTURE_TYPE_PAN))
+     {
+        _e_gesture_pan_cancel();
+     }
+   if (!(gesture->gesture_filter & E_GESTURE_TYPE_PINCH))
+     {
+        _e_gesture_pinch_cancel();
+     }
+   if (!(gesture->gesture_filter & E_GESTURE_TYPE_TAP))
+     {
+        _e_gesture_tap_cancel();
+     }
+
+   if (gesture->gesture_events.recognized_gesture)
+     {
+        GTINF("Mouse Cancel. recognized_gesture has a value (%d). return E_GESTURE_EVENT_STATE_IGNORE",
+              gesture->gesture_events.recognized_gesture);
+        if (gesture->gesture_events.num_pressed == 0)
+          {
+             if (gesture->gesture_events.recognized_gesture & E_GESTURE_TYPE_PALM_COVER)
+               {
+                  gesture->event_state = gesture->prev_event_state;
+               }
+             gesture->gesture_events.recognized_gesture = 0x0;
+          }
+        return E_GESTURE_EVENT_STATE_IGNORE;
+     }
+
+   return gesture->event_state;
+}
+
 static E_Gesture_Event_State
 _e_gesture_process_mouse_button_up(void *event)
 {
@@ -2137,6 +2195,8 @@ e_gesture_process_events(void *event, int type)
      res = _e_gesture_process_mouse_button_up(event);
    else if (type == ECORE_EVENT_MOUSE_MOVE)
      res = _e_gesture_process_mouse_move(event);
+   else if (type == ECORE_EVENT_MOUSE_BUTTON_CANCEL)
+     res = _e_gesture_process_mouse_button_cancel(event);
    else if (type == ECORE_EVENT_KEY_DOWN)
      res = _e_gesture_process_key_down(event);
    else if (type == ECORE_EVENT_KEY_UP)
@@ -2166,7 +2226,8 @@ e_gesture_process_events(void *event, int type)
      }
 
    if (gesture->gesture_events.num_pressed == 0 &&
-       type == ECORE_EVENT_MOUSE_BUTTON_UP)
+       (type == ECORE_EVENT_MOUSE_BUTTON_UP ||
+        type == ECORE_EVENT_MOUSE_BUTTON_CANCEL))
      {
         if (gesture->grabbed_gesture & E_GESTURE_TYPE_TAP ||
              ((gesture->grabbed_gesture & E_GESTURE_TYPE_EDGE_SWIPE) &&
index ef63694523e46b69aaa010dd8f3c9d40ecaebe2b..114fb47c16da54a3c439272de63ab1dd9f4ce3ab 100644 (file)
@@ -1912,7 +1912,8 @@ _e_gesture_event_filter(void *data, void *loop_data EINA_UNUSED, int type, void
      {
         gesture->gesture_events.num_pressed++;
      }
-   else if (type == ECORE_EVENT_MOUSE_BUTTON_UP)
+   else if (type == ECORE_EVENT_MOUSE_BUTTON_UP ||
+            type == ECORE_EVENT_MOUSE_BUTTON_CANCEL)
      {
         gesture->gesture_events.num_pressed--;
         if (gesture->gesture_events.num_pressed < 0)