Check grabbed edge when process a edge_swipe gesture 41/117941/1
authorJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 8 Mar 2017 05:43:59 +0000 (14:43 +0900)
committerJengHyun Kang <jhyuni.kang@samsung.com>
Wed, 8 Mar 2017 05:43:59 +0000 (14:43 +0900)
Change-Id: I3fdbba711ef7ca407dd683771b4606e78f4b5ad9

src/e_mod_gesture_events.c
src/e_mod_main.c
src/e_mod_main.h

index fde9512..19666b4 100644 (file)
@@ -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
      {
index c2ad892..ad13585 100644 (file)
@@ -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;
 }
index da12291..96c3cd8 100644 (file)
@@ -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;