From: Junkyeong Kim Date: Fri, 14 Mar 2025 09:20:32 +0000 (+0900) Subject: gesture: Add efl_util_gesture_grab_mode_set X-Git-Tag: accepted/tizen/unified/20250321.080620~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cee0ffe2cabf4d2e37a2109c610f27652011b8a2;p=platform%2Fcore%2Fapi%2Fefl-util.git gesture: Add efl_util_gesture_grab_mode_set Support new shared_grab protocol. Change-Id: If7ef8eba2bc29192c232eb4bade0c8f85b8f7507 Signed-off-by: Junkyeong Kim --- diff --git a/include/efl_util.h b/include/efl_util.h index 1a96634..2b96c0e 100644 --- a/include/efl_util.h +++ b/include/efl_util.h @@ -652,6 +652,18 @@ typedef enum _efl_util_gesture_edge_size_e EFL_UTIL_GESTURE_EDGE_SIZE_PARTIAL /**< Part of edge */ } efl_util_gesture_edge_size_e; +/** + * @platform + * @brief Enumeration of gesture grab mode. + * @since_tizen 9.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 +1071,20 @@ 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 9.0 + * @privlevel platform + * @privilege %http://tizen.org/privilege/gesturegrab + * @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); /** * @} */ diff --git a/src/efl_util.c b/src/efl_util.c index ef50b2a..77ad0c7 100644 --- a/src/efl_util.c +++ b/src/efl_util.c @@ -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 @@ -2757,20 +2758,20 @@ _efl_util_gesture_convert_error(int ret) { switch (ret) { - case TIZEN_GESTURE_ERROR_NONE: - return EFL_UTIL_ERROR_NONE; - case TIZEN_GESTURE_ERROR_INVALID_DATA: - return EFL_UTIL_ERROR_INVALID_PARAMETER; - case TIZEN_GESTURE_ERROR_NO_PERMISSION: - return EFL_UTIL_ERROR_PERMISSION_DENIED; - case TIZEN_GESTURE_ERROR_NO_SYSTEM_RESOURCES: - return EFL_UTIL_ERROR_OUT_OF_MEMORY; - case TIZEN_GESTURE_ERROR_GRABBED_ALREADY: - return EFL_UTIL_ERROR_NO_RESOURCE_AVAILABLE; - case TIZEN_GESTURE_ERROR_NOT_SUPPORTED: - return EFL_UTIL_ERROR_NOT_SUPPORTED; - default : - return EFL_UTIL_ERROR_NONE; + case TIZEN_GESTURE_ERROR_NONE: + return EFL_UTIL_ERROR_NONE; + case TIZEN_GESTURE_ERROR_INVALID_DATA: + return EFL_UTIL_ERROR_INVALID_PARAMETER; + case TIZEN_GESTURE_ERROR_NO_PERMISSION: + return EFL_UTIL_ERROR_PERMISSION_DENIED; + case TIZEN_GESTURE_ERROR_NO_SYSTEM_RESOURCES: + return EFL_UTIL_ERROR_OUT_OF_MEMORY; + case TIZEN_GESTURE_ERROR_GRABBED_ALREADY: + return EFL_UTIL_ERROR_NO_RESOURCE_AVAILABLE; + case TIZEN_GESTURE_ERROR_NOT_SUPPORTED: + return EFL_UTIL_ERROR_NOT_SUPPORTED; + default : + return EFL_UTIL_ERROR_NONE; } } @@ -2790,7 +2791,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; @@ -2818,9 +2819,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(); @@ -2828,7 +2834,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; @@ -2856,9 +2862,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(); @@ -2866,7 +2877,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; @@ -2888,9 +2899,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(); @@ -2898,7 +2914,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; @@ -2912,9 +2928,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(); @@ -3264,20 +3285,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; @@ -3298,20 +3319,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; @@ -3485,3 +3506,23 @@ API int efl_util_gesture_palm_cover_cb_set(efl_util_gesture_h gesture_h, efl_uti return ret; } + +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; +} diff --git a/test/tc-efl-util.cpp b/test/tc-efl-util.cpp index 9c0487b..e49983f 100644 --- a/test/tc-efl-util.cpp +++ b/test/tc-efl-util.cpp @@ -2266,3 +2266,61 @@ TEST_F(EFLUtil, gesture_palm_cover_cb_set) ret = efl_util_gesture_deinitialize(h_gesture); EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); } + +TEST_F(EFLUtil, gesture_shared_grab_p) +{ + int ret = EFL_UTIL_ERROR_NONE; + efl_util_gesture_h h_gesture = NULL; + efl_util_gesture_data d_edge_swipe = NULL; + + h_gesture = efl_util_gesture_initialize(); + ret = get_last_result(); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + EXPECT_NE(h_gesture, nullptr); + + d_edge_swipe = efl_util_gesture_edge_swipe_new(h_gesture, 1, EFL_UTIL_GESTURE_EDGE_TOP); + ret = get_last_result(); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + EXPECT_NE(d_edge_swipe, nullptr); + + ret = efl_util_gesture_grab_mode_set(h_gesture, d_edge_swipe, EFL_UTIL_GESTURE_GRAB_MODE_SHARED); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + + ret = efl_util_gesture_grab(h_gesture, d_edge_swipe); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + + ret = efl_util_gesture_ungrab(h_gesture, d_edge_swipe); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + + ret = efl_util_gesture_edge_swipe_free(h_gesture, d_edge_swipe); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + + ret = efl_util_gesture_deinitialize(h_gesture); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); +} + +TEST_F(EFLUtil, gesture_shared_grab_n) +{ + int ret = EFL_UTIL_ERROR_NONE; + efl_util_gesture_h h_gesture = NULL; + efl_util_gesture_data d_edge_swipe = NULL; + + h_gesture = efl_util_gesture_initialize(); + ret = get_last_result(); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + EXPECT_NE(h_gesture, nullptr); + + d_edge_swipe = efl_util_gesture_edge_swipe_new(h_gesture, 1, EFL_UTIL_GESTURE_EDGE_TOP); + ret = get_last_result(); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + EXPECT_NE(d_edge_swipe, nullptr); + + ret = efl_util_gesture_grab_mode_set(h_gesture, d_edge_swipe, EFL_UTIL_GESTURE_GRAB_MODE_NONE); + EXPECT_EQ(ret, EFL_UTIL_ERROR_INVALID_PARAMETER); + + ret = efl_util_gesture_edge_swipe_free(h_gesture, d_edge_swipe); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); + + ret = efl_util_gesture_deinitialize(h_gesture); + EXPECT_EQ(ret, EFL_UTIL_ERROR_NONE); +}