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;
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
{
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);
{
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;
}
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;
}
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
{
unsigned int back_keycode;
unsigned int enabled_finger;
+ unsigned int enabled_edge;
+
Ecore_Timer *start_timer;
Ecore_Timer *done_timer;