Emit 2 fingers double tap and hold gesture 81/135981/1
authorShinwoo Kim <cinoo.kim@samsung.com>
Wed, 29 Mar 2017 11:17:05 +0000 (20:17 +0900)
committerShinwoo Kim <cinoo.kim@samsung.com>
Tue, 27 Jun 2017 23:13:42 +0000 (08:13 +0900)
The "2 fingers double tap and hold" gesture will work to change between
selection and edit mdoe.

Change-Id: I0ec772d429f406971ee27d5949c6a160693094d8

src/e_mod_main.c
src/e_screen_reader_gestures.c
src/e_screen_reader_private.h

index 81806bd..78f6f2b 100644 (file)
@@ -141,6 +141,12 @@ static const char *_gesture_enum_to_string(Gesture g)
          return "ThreeFingersFlickUpReturn";
       case THREE_FINGERS_FLICK_DOWN_RETURN:
          return "ThreeFingersFlickDownReturn";
+      case ONE_FINGER_DOUBLE_TAP_N_HOLD:
+         return "OneFingerDoubleTapNHold";
+      case TWO_FINGERS_DOUBLE_TAP_N_HOLD:
+         return "TwoFingersDoubleTapNHold";
+      case THREE_FINGERS_DOUBLE_TAP_N_HOLD:
+         return "ThreeFingersDoubleTapNHold";
       default:
          ERROR("[atspi] dbus: unhandled gesture enum");
          return NULL;
index 0284806..99a0d79 100644 (file)
@@ -710,6 +710,20 @@ _on_hover_timeout(void *data)
    cov->hover_gesture.longpressed = EINA_TRUE;
    cov->hover_gesture.timer = NULL;
 
+   if (cov->tap_n_hold_gesture_data.double_tap && cov->n_taps == 2)
+     {
+        /* longpressed is not for the 'Double Tap & Hold', it should work with
+           'Tap & Hold' only which is for HOVER event */
+        cov->hover_gesture.longpressed = EINA_FALSE;
+
+        _event_emit(TWO_FINGERS_DOUBLE_TAP_N_HOLD,
+                    cov->hover_gesture.x[0], cov->hover_gesture.y[0],
+                    cov->hover_gesture.x[1], cov->hover_gesture.y[1],
+                    GESTURE_FINISHED, cov->event_time);
+
+        return EINA_FALSE;
+     }
+
    if (cov->hover_gesture.last_emission_time == -1)
      {
         _hover_event_emit(cov, GESTURE_NOT_STARTED);
@@ -1048,7 +1062,9 @@ _on_tap_timer_expire(void *data)
    Cover *cov = data;
    DEBUG("Timer expired");
 
-   if (cov->tap_n_hold_gesture_data.n_taps == 2 && cov->tap_gesture_data.tap_type == ONE_FINGER_GESTURE)
+   if (cov->tap_n_hold_gesture_data.n_taps == 2 &&
+       (cov->tap_gesture_data.tap_type == ONE_FINGER_GESTURE ||
+        cov->tap_gesture_data.tap_type == TWO_FINGERS_GESTURE))
       cov->tap_n_hold_gesture_data.double_tap = EINA_TRUE;
 
    if (cov->tap_gesture_data.started && !cov->tap_gesture_data.pressed)
@@ -1158,7 +1174,6 @@ _tap_gestures_mouse_down(Ecore_Event_Mouse_Button *ev, Cover *cov)
                      _tap_gestures_mouse_down(ev, cov);
                      return;
                   }
-
                cov->tap_gesture_data.x_org[0] = ev->root.x;
                cov->tap_gesture_data.y_org[0] = ev->root.y;
                cov->tap_n_hold_gesture_data.n_taps++;
@@ -1266,8 +1281,10 @@ _tap_gestures_mouse_up(Ecore_Event_Mouse_Button *ev, Cover *cov)
 static void
 _tap_gestures_move(Ecore_Event_Mouse_Move *ev, Cover *cov)
 {
+   /* mouse move event comes once before mouse down event. So we do not have to
+      evaluate this mouse move event using condition (i < cov->n_taps) below. */
    int i;
-   for (i = 0; i < sizeof(cov->tap_gesture_data.finger) / sizeof(cov->tap_gesture_data.finger[0]); i++)
+   for (i = 0; (i < cov->n_taps) && (i < sizeof(cov->tap_gesture_data.finger) / sizeof(cov->tap_gesture_data.finger[0])); i++)
      {
         if (ev->multi.device == cov->tap_gesture_data.finger[i])
           {
@@ -1294,6 +1311,8 @@ static Eina_Bool
 _mouse_move(int type, Ecore_Event_Mouse_Move *event)
 {
    Ecore_Event_Mouse_Move *ev = event;
+   /* flick_to_scroll: 2 fingers touch and move
+      drag_start: 1 finger tap and hold move */
    if (ev->multi.radius >= MAGIC_NUMBER || cover->flick_gesture.flick_to_scroll || cover->tap_n_hold_gesture_data.drag_start)
      {
         if (ev->multi.radius >= MAGIC_NUMBER) ev->multi.radius -= MAGIC_NUMBER;
index 98de33d..21f0647 100644 (file)
@@ -51,6 +51,9 @@ enum _Gesture {
      THREE_FINGERS_FLICK_RIGHT_RETURN,
      THREE_FINGERS_FLICK_UP_RETURN,
      THREE_FINGERS_FLICK_DOWN_RETURN,
+     ONE_FINGER_DOUBLE_TAP_N_HOLD,
+     TWO_FINGERS_DOUBLE_TAP_N_HOLD,
+     THREE_FINGERS_DOUBLE_TAP_N_HOLD,
      GESTURES_COUNT,
 };
 typedef enum _Gesture Gesture;