add handling ecore cancel events and cancel recognizing gestures 30/323230/1
authorduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:12:00 +0000 (18:12 +0900)
committerduna.oh <duna.oh@samsung.com>
Thu, 24 Apr 2025 09:12:00 +0000 (18:12 +0900)
Change-Id: Id0a901c8c022c4e0e22955f361e0cf991c1c726a

src/e_mod_gesture_events.c
src/e_mod_main.c

index 6a6b0b3a60b7156aad7a237b097c579384a60815..cd22a0acea0bb014b924d54e7e6c046ed4e204ef 100644 (file)
@@ -1841,6 +1841,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)
 {
@@ -2124,6 +2182,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)
@@ -2153,7 +2213,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 933ac4b8deaa14d4b1b077f6cac1074799c17f3b..1774054346c66b5b875a4b5e5c76f5dc4b82b24e 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)