From 47e942bc67d8d5732c6ff43ee040ab648f399085 Mon Sep 17 00:00:00 2001 From: JengHyun Kang Date: Wed, 8 Mar 2017 14:43:59 +0900 Subject: [PATCH] Check grabbed edge when process a edge_swipe gesture Change-Id: I3fdbba711ef7ca407dd683771b4606e78f4b5ad9 --- src/e_mod_gesture_events.c | 16 ++++++++++------ src/e_mod_main.c | 17 ++++++++++++++++- src/e_mod_main.h | 3 +++ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/e_mod_gesture_events.c b/src/e_mod_gesture_events.c index fde9512..19666b4 100644 --- a/src/e_mod_gesture_events.c +++ b/src/e_mod_gesture_events.c @@ -316,12 +316,10 @@ _e_gesture_process_edge_swipe_down(Ecore_Event_Mouse_Button *ev) edge_swipes->edge = E_GESTURE_EDGE_RIGHT; else if (ev->x > e_comp->w - conf->edge_swipe.area_offset) edge_swipes->edge = E_GESTURE_EDGE_LEFT; - else - { - if (edge_swipes->event_keep) - _e_gesture_event_flush(); - _e_gesture_edge_swipe_cancel(); - } + + if (!((1 << (edge_swipes->edge - 1)) & edge_swipes->enabled_edge)) + edge_swipes->edge = E_GESTURE_EDGE_NONE; + if (edge_swipes->edge != E_GESTURE_EDGE_NONE) { edge_swipes->fingers[idx].start.x = ev->x; @@ -329,6 +327,12 @@ _e_gesture_process_edge_swipe_down(Ecore_Event_Mouse_Button *ev) edge_swipes->start_timer = ecore_timer_add(conf->edge_swipe.time_begin, _e_gesture_timer_edge_swipe_start, NULL); edge_swipes->done_timer = ecore_timer_add(conf->edge_swipe.time_done, _e_gesture_timer_edge_swipe_done, NULL); } + else + { + if (edge_swipes->event_keep) + _e_gesture_event_flush(); + _e_gesture_edge_swipe_cancel(); + } } else { diff --git a/src/e_mod_main.c b/src/e_mod_main.c index c2ad892..ad13585 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -173,6 +173,7 @@ _e_gesture_cb_grab_edge_swipe(struct wl_client *client, gesture->grabbed_gesture |= TIZEN_GESTURE_TYPE_EDGE_SWIPE; gev->edge_swipes.fingers[fingers].enabled = EINA_TRUE; if (gev->edge_swipes.event_keep) gesture->event_state = E_GESTURE_EVENT_STATE_KEEP; + gev->edge_swipes.enabled_edge |= grabbed_edge; if (!grabbed_edge) tizen_gesture_send_grab_edge_swipe_notify(resource, fingers, edge, TIZEN_GESTURE_ERROR_NONE); @@ -197,7 +198,7 @@ _e_gesture_cb_ungrab_edge_swipe(struct wl_client *client, { GTWRN("Do not support %d fingers (max: %d)\n", fingers, E_GESTURE_FINGER_MAX); ret = TIZEN_GESTURE_ERROR_INVALID_DATA; - goto finish; + goto notify; } gev = &gesture->gesture_events; @@ -274,6 +275,20 @@ _e_gesture_cb_ungrab_edge_swipe(struct wl_client *client, } finish: + gev->edge_swipes.enabled_edge &= ~edge; + for (i = 0; i < E_GESTURE_FINGER_MAX+1; i++) + { + for (j = 1; j < E_GESTURE_EDGE_MAX+1; j++) + { + if (gev->edge_swipes.fingers[i].edge[j].client) + { + gev->edge_swipes.enabled_edge |= (1 << (j - 1)); + } + } + if (gev->edge_swipes.enabled_edge == E_GESTURE_EDGE_ALL) break; + } + +notify: tizen_gesture_send_grab_edge_swipe_notify(resouce, fingers, edge, ret); return; } diff --git a/src/e_mod_main.h b/src/e_mod_main.h index da12291..96c3cd8 100644 --- a/src/e_mod_main.h +++ b/src/e_mod_main.h @@ -51,6 +51,7 @@ typedef enum _E_Gesture_Event_State E_Gesture_Event_State; extern E_GesturePtr gesture; #define E_GESTURE_EDGE_MAX 4 +#define E_GESTURE_EDGE_ALL (TIZEN_GESTURE_EDGE_TOP | TIZEN_GESTURE_EDGE_RIGHT | TIZEN_GESTURE_EDGE_BOTTOM | TIZEN_GESTURE_EDGE_LEFT) enum _E_Gesture_Edge { @@ -135,6 +136,8 @@ struct _E_Gesture_Event_Edge_Swipe unsigned int back_keycode; unsigned int enabled_finger; + unsigned int enabled_edge; + Ecore_Timer *start_timer; Ecore_Timer *done_timer; -- 2.7.4