palm_cover: separate palm_cover BEGIN and END events sending 28/311928/2
authorduna.oh <duna.oh@samsung.com>
Thu, 30 May 2024 12:41:30 +0000 (21:41 +0900)
committerduna.oh <duna.oh@samsung.com>
Fri, 5 Jul 2024 06:55:52 +0000 (15:55 +0900)
Before, the palm_cover event was regarded as a momentary gesture rather than
a continuous one.

Current:
event's axis value is 1, both the palm_cover BEGIN and END events are sent.
event's axis value is 0, no palm_cover event is sent.

Modified:
event's axis value is 1, palm_cover BEGIN event is sent.
event's axis value is 0, palm_cover END event is set.

(FYI, How palm_cover gesture is generated:
ABS_MT_PALM value --> libinput touch event's aux data
--> E20 ecore_event_add(ECORE_EVENT_AXIS_UPDATE,
--> e-mod-tizen-gesture sends palm_cover event using tizen_gesture protocol)

Change-Id: If08bc917f9faa069397fd34ae6bc3faa84623f6c

src/e_mod_gesture_events.c
src/e_mod_main.h

index 3c6ee48..bdba43c 100644 (file)
@@ -1852,7 +1852,7 @@ _e_gesture_process_key_up(void *event)
 }
 
 static void
-_e_gesture_send_palm_cover(void)
+_e_gesture_send_palm_cover(int mode)
 {
    Ecore_Event_Mouse_Button *ev_cancel;
    E_Gesture_Event_Palm_Cover *palm_covers = &gesture->gesture_events.palm_covers;
@@ -1882,8 +1882,6 @@ _e_gesture_send_palm_cover(void)
         ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_CANCEL, ev_cancel, NULL, NULL);
      }
 
-   _e_gesture_util_center_axis_get(gesture->gesture_events.num_pressed, &cx, &cy);
-
    GTINF("Send palm_cover gesture to client: %p\n", palm_covers->client_info.client);
 
    if (palm_covers->client_info.client == E_GESTURE_SERVER_CLIENT)
@@ -1891,18 +1889,7 @@ _e_gesture_send_palm_cover(void)
         ev_palm_cover = E_NEW(E_Event_Gesture_Palm_Cover, 1);
         EINA_SAFETY_ON_NULL_RETURN(ev_palm_cover);
 
-        ev_palm_cover->mode = E_GESTURE_MODE_BEGIN;
-        ev_palm_cover->duration = duration;
-        ev_palm_cover->cx = cx;
-        ev_palm_cover->cy = cy;
-        ev_palm_cover->size = size;
-        ev_palm_cover->pressure = 0.0;
-        ecore_event_add(E_EVENT_GESTURE_PALM_COVER, ev_palm_cover, NULL, NULL);
-
-        ev_palm_cover = E_NEW(E_Event_Gesture_Palm_Cover, 1);
-        EINA_SAFETY_ON_NULL_RETURN(ev_palm_cover);
-
-        ev_palm_cover->mode = E_GESTURE_MODE_END;
+        ev_palm_cover->mode = mode;
         ev_palm_cover->duration = duration;
         ev_palm_cover->cx = cx;
         ev_palm_cover->cy = cy;
@@ -1940,36 +1927,55 @@ _e_gesture_send_palm_cover(void)
           }
         else
           {
-             tizen_gesture_send_palm_cover(res, surface, E_GESTURE_MODE_BEGIN, duration, size, pressure, cx, cy);
-             tizen_gesture_send_palm_cover(res, surface, E_GESTURE_MODE_END, duration, size, pressure, cx, cy);
+             tizen_gesture_send_palm_cover(res, surface, mode, duration, size, pressure, cx, cy);
           }
      }
+}
 
-   gesture->prev_event_state = gesture->event_state;
-   gesture->event_state = E_GESTURE_EVENT_STATE_IGNORE;
-   gesture->gesture_events.recognized_gesture |= E_GESTURE_TYPE_PALM_COVER;
+static void
+_e_gesture_palm_cover_cancel(void)
+{
+   _e_gesture_send_palm_cover(E_GESTURE_MODE_END);
+
+   gesture->event_state = gesture->prev_event_state;
+   gesture->gesture_filter |= E_GESTURE_TYPE_PALM_COVER;
+   gesture->gesture_events.recognized_gesture &= ~E_GESTURE_TYPE_PALM_COVER;
 }
 
 static void
 _e_gesture_process_palm_cover(int val)
 {
-   if (gesture->gesture_events.recognized_gesture)
+   E_Gesture_Event_Palm_Cover *palm_covers = &gesture->gesture_events.palm_covers;
+
+   if (val == 1)
      {
-        return;
-     }
+        if (gesture->gesture_events.recognized_gesture)
+          {
+             GTWRN("Palm Cover recognized_gesture has a value(%d). return",
+              gesture->gesture_events.recognized_gesture);
+             return;
+          }
+        _e_gesture_send_palm_cover(E_GESTURE_MODE_BEGIN);
 
-   _e_gesture_send_palm_cover();
+        gesture->prev_event_state = gesture->event_state;
+        gesture->event_state = E_GESTURE_EVENT_STATE_IGNORE;
+        gesture->gesture_events.recognized_gesture |= E_GESTURE_TYPE_PALM_COVER;
+     }
+   else if (val == 0)
+     {
+        _e_gesture_palm_cover_cancel();
+     }
 }
 
 static void
 _e_gesture_process_palm(int val)
 {
-   if (val <= 0) return;
    if (!gesture->grabbed_gesture) return;
 
    if (!(gesture->gesture_filter & E_GESTURE_TYPE_PALM_COVER) &&
        gesture->gesture_events.palm_covers.activation.active)
      {
+        GTINF("Palm Cover processing.. val: %d", val);
         _e_gesture_process_palm_cover(val);
      }
 }
index 7d275fc..61d4e49 100644 (file)
@@ -330,7 +330,6 @@ struct _E_Gesture_Event_Palm_Cover
    E_Gesture_Activate_Info activation;
    E_Gesture_Event_Client client_info;
    Eina_List *select_surface_list;
-   unsigned int start_time;
 };
 
 struct _E_Gesture_Grabbed_Client