gesture: Add efl_util_gesture_grab_mode_set 34/321134/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 14 Mar 2025 09:20:32 +0000 (18:20 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 14 Mar 2025 09:20:40 +0000 (18:20 +0900)
Support new shared_grab protocol.

Change-Id: If7ef8eba2bc29192c232eb4bade0c8f85b8f7507
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
include/efl_util.h
src/efl_util.c

index 1a96634917668466dcfdef42de58c3ccdaee6c5c..fbe25aacd41c656b4a6aea0556aac849b68011df 100644 (file)
@@ -652,6 +652,17 @@ typedef enum _efl_util_gesture_edge_size_e
    EFL_UTIL_GESTURE_EDGE_SIZE_PARTIAL  /**< Part of edge */
 } efl_util_gesture_edge_size_e;
 
+/**
+ * @brief Enumeration of gesture edge size.
+ * @since_tizen 10.0
+ */
+typedef enum _efl_util_gesture_grab_mode_e
+{
+   EFL_UTIL_GESTURE_GRAB_MODE_NONE = 0,  /**< none mode */
+   EFL_UTIL_GESTURE_GRAB_MODE_EXCLUSIVE, /**< exclusive mode */
+   EFL_UTIL_GESTURE_GRAB_MODE_SHARED,    /**< shared grab mode */
+} efl_util_gesture_grab_mode_e;
+
 /**
  * @brief Definition for the gesture data handle.
  * @since_tizen 4.0
@@ -1059,6 +1070,18 @@ API int efl_util_gesture_tap_cb_set(efl_util_gesture_h gesture_h, efl_util_gestu
  * @retval #EFL_UTIL_ERROR_INVALID_PARAMETER Invalid parameter
  */
 API int efl_util_gesture_palm_cover_cb_set(efl_util_gesture_h gesture_h, efl_util_gesture_palm_cover_cb cb_func, void *data);
+
+/**
+ * @brief Sets gesture grab mode.
+ * @since_tizen 10.0
+ * @param[in] gesture_h The #efl_util_gesture_h handle
+ * @param[in] data      The data to be passed to the callback function
+ * @param[in] mode      The #efl_util_gesture_grab_mode_e mode
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #EFL_UTIL_ERROR_NONE Successful
+ * @retval #EFL_UTIL_ERROR_INVALID_PARAMETER Invalid parameter
+ */
+API int efl_util_gesture_grab_mode_set(efl_util_gesture_h gesture_h, efl_util_gesture_data data, efl_util_gesture_grab_mode_e mode);
 /**
  * @}
  */
index f6d2b89d3d5034a92eeab46531a31d64063ca345..693c0605a90d712a9f82eb423f43f7a90c6311dd 100644 (file)
@@ -84,6 +84,7 @@ typedef struct _Efl_Util_Wl_Output_Info
 typedef struct _Efl_Util_Gesture_Common_Grab_Data
 {
    int type;
+   efl_util_gesture_grab_mode_e mode;
 } Efl_Util_Gesture_Common_Grab_Data;
 
 typedef struct _Efl_Util_Gesture_Edge_Swipe_Grab_Data
@@ -2783,7 +2784,7 @@ _efl_util_gesture_verify_request_notified()
 }
 
 static int
-_efl_util_gesture_grab_edge_swipe(efl_util_gesture_data data, Eina_Bool grabbed)
+_efl_util_gesture_grab_edge_swipe(efl_util_gesture_data data, Eina_Bool grabbed, efl_util_gesture_grab_mode_e mode)
 {
    LOGD("");
    int ret = EFL_UTIL_ERROR_NONE;
@@ -2811,9 +2812,14 @@ _efl_util_gesture_grab_edge_swipe(efl_util_gesture_data data, Eina_Bool grabbed)
    end_point = edge_swipe_data->end_point;
 
    if (grabbed)
-      tizen_gesture_grab_edge_swipe(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     {
+        if (mode == EFL_UTIL_GESTURE_GRAB_MODE_SHARED)
+          tizen_gesture_shared_grab_edge_swipe(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+        else
+          tizen_gesture_grab_edge_swipe(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     }
    else
-      tizen_gesture_ungrab_edge_swipe(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     tizen_gesture_ungrab_edge_swipe(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
 
    ret = _efl_util_gesture_verify_request_notified();
 
@@ -2821,7 +2827,7 @@ _efl_util_gesture_grab_edge_swipe(efl_util_gesture_data data, Eina_Bool grabbed)
 }
 
 static int
-_efl_util_gesture_grab_edge_drag(efl_util_gesture_data data, Eina_Bool grabbed)
+_efl_util_gesture_grab_edge_drag(efl_util_gesture_data data, Eina_Bool grabbed, efl_util_gesture_grab_mode_e mode)
 {
    LOGD("");
    int ret = EFL_UTIL_ERROR_NONE;
@@ -2849,9 +2855,14 @@ _efl_util_gesture_grab_edge_drag(efl_util_gesture_data data, Eina_Bool grabbed)
    end_point = edge_drag_data->end_point;
 
    if (grabbed)
-      tizen_gesture_grab_edge_drag(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     {
+        if (mode == EFL_UTIL_GESTURE_GRAB_MODE_SHARED)
+          tizen_gesture_shared_grab_edge_drag(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+        else
+          tizen_gesture_grab_edge_drag(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     }
    else
-      tizen_gesture_ungrab_edge_drag(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
+     tizen_gesture_ungrab_edge_drag(_eflutil_defaultqueue.wl.gesture.proto, fingers, edge, edge_size, start_point, end_point);
 
    ret = _efl_util_gesture_verify_request_notified();
 
@@ -2859,7 +2870,7 @@ _efl_util_gesture_grab_edge_drag(efl_util_gesture_data data, Eina_Bool grabbed)
 }
 
 static int
-_efl_util_gesture_grab_tap(efl_util_gesture_data data, Eina_Bool grabbed)
+_efl_util_gesture_grab_tap(efl_util_gesture_data data, Eina_Bool grabbed, efl_util_gesture_grab_mode_e mode)
 {
    LOGD("");
    int ret = EFL_UTIL_ERROR_NONE;
@@ -2881,9 +2892,14 @@ _efl_util_gesture_grab_tap(efl_util_gesture_data data, Eina_Bool grabbed)
    repeats = tap_data->repeats;
 
    if (grabbed)
-      tizen_gesture_grab_tap(_eflutil_defaultqueue.wl.gesture.proto, fingers, repeats);
+     {
+        if (mode == EFL_UTIL_GESTURE_GRAB_MODE_SHARED)
+          tizen_gesture_shared_grab_tap(_eflutil_defaultqueue.wl.gesture.proto, fingers, repeats);
+        else
+          tizen_gesture_grab_tap(_eflutil_defaultqueue.wl.gesture.proto, fingers, repeats);
+     }
    else
-      tizen_gesture_ungrab_tap(_eflutil_defaultqueue.wl.gesture.proto, fingers, repeats);
+     tizen_gesture_ungrab_tap(_eflutil_defaultqueue.wl.gesture.proto, fingers, repeats);
 
    ret = _efl_util_gesture_verify_request_notified();
 
@@ -2891,7 +2907,7 @@ _efl_util_gesture_grab_tap(efl_util_gesture_data data, Eina_Bool grabbed)
 }
 
 static int
-_efl_util_gesture_grab_palm_cover(efl_util_gesture_data data, Eina_Bool grabbed)
+_efl_util_gesture_grab_palm_cover(efl_util_gesture_data data, Eina_Bool grabbed, efl_util_gesture_grab_mode_e mode)
 {
    LOGD("");
    int ret = EFL_UTIL_ERROR_NONE;
@@ -2905,9 +2921,14 @@ _efl_util_gesture_grab_palm_cover(efl_util_gesture_data data, Eina_Bool grabbed)
                                   EFL_UTIL_ERROR_INVALID_PARAMETER);
 
    if (grabbed)
-      tizen_gesture_grab_palm_cover(_eflutil_defaultqueue.wl.gesture.proto);
+     {
+        if (mode == EFL_UTIL_GESTURE_GRAB_MODE_SHARED)
+          tizen_gesture_shared_grab_palm_cover(_eflutil_defaultqueue.wl.gesture.proto);
+        else
+          tizen_gesture_grab_palm_cover(_eflutil_defaultqueue.wl.gesture.proto);
+     }
    else
-      tizen_gesture_ungrab_palm_cover(_eflutil_defaultqueue.wl.gesture.proto);
+     tizen_gesture_ungrab_palm_cover(_eflutil_defaultqueue.wl.gesture.proto);
 
    ret = _efl_util_gesture_verify_request_notified();
 
@@ -3257,20 +3278,20 @@ efl_util_gesture_grab(efl_util_gesture_h gesture_h, efl_util_gesture_data data)
 
    switch (base_data->type)
      {
-        case TIZEN_GESTURE_TYPE_EDGE_SWIPE:
-           ret = _efl_util_gesture_grab_edge_swipe(data, EINA_TRUE);
-           break;
-        case TIZEN_GESTURE_TYPE_EDGE_DRAG:
-           ret = _efl_util_gesture_grab_edge_drag(data, EINA_TRUE);
-           break;
-        case TIZEN_GESTURE_TYPE_TAP:
-           ret = _efl_util_gesture_grab_tap(data, EINA_TRUE);
-           break;
-        case TIZEN_GESTURE_TYPE_PALM_COVER:
-           ret = _efl_util_gesture_grab_palm_cover(data, EINA_TRUE);
-           break;
-        default:
-           return EFL_UTIL_ERROR_INVALID_PARAMETER;
+      case TIZEN_GESTURE_TYPE_EDGE_SWIPE:
+        ret = _efl_util_gesture_grab_edge_swipe(data, EINA_TRUE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_EDGE_DRAG:
+        ret = _efl_util_gesture_grab_edge_drag(data, EINA_TRUE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_TAP:
+        ret = _efl_util_gesture_grab_tap(data, EINA_TRUE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_PALM_COVER:
+        ret = _efl_util_gesture_grab_palm_cover(data, EINA_TRUE, base_data->mode);
+        break;
+      default:
+        ret = EFL_UTIL_ERROR_INVALID_PARAMETER;
      }
 
    return ret;
@@ -3291,20 +3312,20 @@ efl_util_gesture_ungrab(efl_util_gesture_h gesture_h, efl_util_gesture_data data
 
    switch (base_data->type)
      {
-        case TIZEN_GESTURE_TYPE_EDGE_SWIPE:
-           ret = _efl_util_gesture_grab_edge_swipe(data, EINA_FALSE);
-           break;
-        case TIZEN_GESTURE_TYPE_EDGE_DRAG:
-           ret = _efl_util_gesture_grab_edge_drag(data, EINA_FALSE);
-           break;
-        case TIZEN_GESTURE_TYPE_TAP:
-           ret = _efl_util_gesture_grab_tap(data, EINA_FALSE);
-           break;
-        case TIZEN_GESTURE_TYPE_PALM_COVER:
-           ret = _efl_util_gesture_grab_palm_cover(data, EINA_FALSE);
-           break;
-        default:
-           return EFL_UTIL_ERROR_INVALID_PARAMETER;
+      case TIZEN_GESTURE_TYPE_EDGE_SWIPE:
+        ret = _efl_util_gesture_grab_edge_swipe(data, EINA_FALSE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_EDGE_DRAG:
+        ret = _efl_util_gesture_grab_edge_drag(data, EINA_FALSE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_TAP:
+        ret = _efl_util_gesture_grab_tap(data, EINA_FALSE, base_data->mode);
+        break;
+      case TIZEN_GESTURE_TYPE_PALM_COVER:
+        ret = _efl_util_gesture_grab_palm_cover(data, EINA_FALSE, base_data->mode);
+        break;
+      default:
+        ret = EFL_UTIL_ERROR_INVALID_PARAMETER;
      }
 
    return ret;
@@ -3478,3 +3499,25 @@ API int efl_util_gesture_palm_cover_cb_set(efl_util_gesture_h gesture_h, efl_uti
 
    return ret;
 }
+
+/* LCOV_EXCL_START */
+API int
+efl_util_gesture_grab_mode_set(efl_util_gesture_h gesture_h, efl_util_gesture_data data, efl_util_gesture_grab_mode_e mode)
+{
+   LOGD("");
+   Efl_Util_Gesture_Common_Grab_Data *base_data = NULL;
+
+   base_data = (Efl_Util_Gesture_Common_Grab_Data *)data;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(gesture_h, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(gesture_h->init, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(base_data, EFL_UTIL_ERROR_INVALID_PARAMETER);
+   if (mode > EFL_UTIL_GESTURE_GRAB_MODE_SHARED) return EFL_UTIL_ERROR_INVALID_PARAMETER;
+   if (mode <= EFL_UTIL_GESTURE_GRAB_MODE_NONE || mode > EFL_UTIL_GESTURE_GRAB_MODE_SHARED)
+     return EFL_UTIL_ERROR_INVALID_PARAMETER;
+
+   base_data->mode = mode;
+
+   return EFL_UTIL_ERROR_NONE;
+}
+/* LCOV_EXCL_STOP */