Defer to SelectionControllerEfl more gesture handling.
authorAntonio Gomes <a1.gomes@samsung.com>
Fri, 14 Aug 2015 16:15:29 +0000 (12:15 -0400)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
There is no funcionality change, but similarly to [1]
patch frees RWHVEfl from text selection specific gesture
handling. Logic now is centrilized SelectionControllerEfl.

This makes an eventual switch to chromium's composited
text selection more smooth from a RWHVEfl perspective.

The following class members and related logic were moved:
- should_restore_selection_menu_
- selection_acked_on_tap_
- single_tap_performed_
- was_scrolled_

[1] http://165.213.202.130/gerrit/#/c/86367

Original beta/m42 patch:
- http://165.213.202.130/gerrit/#/c/85200/ , reviewed by
Janusz Majnert, Arnaud Renevier.

Bug: http://107.108.218.239/bugzilla/show_bug.cgi?id=6663

Reviewed by: arno renevier, Janusz Majnert, SeungSeop Park, David Michael Barr

Change-Id: I24115b21d4901ce1cb9070ac9f68a21c54843ead
Signed-off-by: Antonio Gomes <a1.gomes@samsung.com>
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.h
tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.cc
tizen_src/chromium_impl/content/browser/selection/selection_controller_efl.h

index 269721d..2448ce7 100755 (executable)
@@ -156,11 +156,7 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget,
     surface_id_(0),
     is_modifier_key_(false),
     touch_events_enabled_(false),
-    should_restore_selection_menu_(false),
-    selection_acked_on_tap_(false),
-    was_scrolled_(false),
     web_contents_(web_contents),
-    single_tap_performed_(false),
     compositor_(NULL),
     root_layer_(new ui::Layer(ui::LAYER_SOLID_COLOR)),
     delegated_frame_host_(new DelegatedFrameHost(this)),
@@ -1582,30 +1578,15 @@ void RenderWidgetHostViewEfl::SendGestureEvent(
 
 void RenderWidgetHostViewEfl::HandleGestureBegin() {
   EnsureEdgeEffect().Enable();
-  selection_acked_on_tap_ = false;
-  single_tap_performed_ = false;
-  was_scrolled_ = false;
   if (GetSelectionController()) {
-    should_restore_selection_menu_ =
-        GetSelectionController()->IsAnyHandleVisible();
-
     GetSelectionController()->HandleGestureBegin();
   }
 }
 
 void RenderWidgetHostViewEfl::HandleGestureEnd() {
-  if (GetSelectionController()) {
-    if (should_restore_selection_menu_ && !was_scrolled_ &&
-        !selection_acked_on_tap_ &&
-        !(single_tap_performed_ &&
-          GetSelectionController()->GetSelectionEditable())) {
-      should_restore_selection_menu_ = false;
-      GetSelectionController()->HideHandleAndContextMenu();
-    }
-
+  if (GetSelectionController())
     GetSelectionController()->HandleGestureEnd();
-  }
-  single_tap_performed_ = false;
+
   // Edge effect should be disabled upon scroll end/fling start.
   // Gesture end comes just after those events, so it's disabled here.
   EnsureEdgeEffect().Disable();
@@ -1615,8 +1596,7 @@ void RenderWidgetHostViewEfl::HandleGesture(
     blink::WebGestureEvent& event) {
   SelectionControllerEfl* controller = GetSelectionController();
   if (controller)
-    controller->HandleGesture(event,
-        should_restore_selection_menu_);
+    controller->HandleGesture(event);
 
   if (event.type == blink::WebInputEvent::GestureDoubleTap ||
       event.type == blink::WebInputEvent::GesturePinchBegin ||
@@ -1643,13 +1623,6 @@ void RenderWidgetHostViewEfl::HandleGesture(
     fling_cancel.type = blink::WebInputEvent::GestureFlingCancel;
     fling_cancel.sourceDevice = blink::WebGestureDeviceTouchscreen;
     SendGestureEvent(fling_cancel);
-    single_tap_performed_ = true;
-  } else if (event.type == blink::WebInputEvent::GestureTapCancel ||
-      event.type == blink::WebInputEvent::GestureTapUnconfirmed) {
-    selection_acked_on_tap_ = should_restore_selection_menu_;
-    single_tap_performed_ = false;
-  } else if (event.type == blink::WebInputEvent::GestureScrollBegin) {
-    was_scrolled_ = true;
   } else if (event.type == blink::WebInputEvent::GestureScrollUpdate) {
     if (event.data.scrollUpdate.deltaX < 0)
       EnsureEdgeEffect().Hide("edge,left");
index 907c080..bedc934 100755 (executable)
@@ -406,12 +406,6 @@ class CONTENT_EXPORT RenderWidgetHostViewEfl
 
   bool touch_events_enabled_;
 
-  bool should_restore_selection_menu_;
-  bool selection_acked_on_tap_;
-  // Used only to indicate that user scrolled view
-  // after gesture GestureTapDown.
-  bool was_scrolled_;
-
   // The last scroll offset of the view.
   gfx::Vector2dF last_scroll_offset_;
 
@@ -419,8 +413,6 @@ class CONTENT_EXPORT RenderWidgetHostViewEfl
 
   WebContents& web_contents_;
 
-  bool single_tap_performed_;
-
   IDMap<ScreenshotCapturedCallback, IDMapOwnPointer> screen_capture_cb_map_;
   ui::Compositor* compositor_;
   scoped_ptr<ui::Layer> root_layer_;
index f7dce57..71d3c28 100644 (file)
@@ -76,6 +76,10 @@ SelectionControllerEfl::SelectionControllerEfl(Evas_Object* parent_view, WebCont
        mouse_press_(false),
        scrolling_(false),
        show_after_scroll_(false),
+       should_restore_selection_menu_(false),
+       selection_acked_on_tap_(false),
+       single_tap_performed_(false),
+       was_scrolled_(false),
        postponed_(false),
        expecting_update_(false),
        long_mouse_press_(false),
@@ -537,8 +541,7 @@ bool SelectionControllerEfl::AsyncRequestHitTestDataAtBlinkCords(int x, int y,
   return false;
 }
 
-void SelectionControllerEfl::HandleGesture(blink::WebGestureEvent& event,
-    bool should_restore_selection_menu) {
+void SelectionControllerEfl::HandleGesture(blink::WebGestureEvent& event) {
   if (event.type == blink::WebInputEvent::GestureTap) {
     if (GetCaretSelectionStatus())
       restore_showing_large_handle_on_gesture_end_.reset();
@@ -550,9 +553,16 @@ void SelectionControllerEfl::HandleGesture(blink::WebGestureEvent& event,
     restore_showing_large_handle_on_gesture_end_.reset();
     HandlePostponedGesture(
         event.x, event.y, ui::ET_GESTURE_LONG_PRESS);
+  } else if (event.type == blink::WebInputEvent::GestureTapDown) {
+    single_tap_performed_ = true;
+  } else if (event.type == blink::WebInputEvent::GestureTapCancel ||
+      event.type == blink::WebInputEvent::GestureTapUnconfirmed) {
+    selection_acked_on_tap_ = should_restore_selection_menu_;
+    single_tap_performed_ = false;
   }
 
   if (event.type == blink::WebInputEvent::GestureScrollBegin) {
+    was_scrolled_ = true;
     SetScrollStatus(true);
   } else if (event.type == blink::WebInputEvent::GestureScrollEnd) {
     if (GetScrollStatus())
@@ -568,12 +578,17 @@ void SelectionControllerEfl::HandleGesture(blink::WebGestureEvent& event,
           GetLeftRect(),
           GetRightRect(),
           false /* unused */,
-          should_restore_selection_menu);
+          should_restore_selection_menu_);
     }
   }
 }
 
 void SelectionControllerEfl::HandleGestureBegin() {
+  selection_acked_on_tap_ = false;
+  single_tap_performed_ = false;
+  was_scrolled_ = false;
+  should_restore_selection_menu_ = IsAnyHandleVisible();
+
   // There can be multiple GestureBegin, but we need
   // only state of showing large handle at first time
   if (!restore_showing_large_handle_on_gesture_end_) {
@@ -584,11 +599,19 @@ void SelectionControllerEfl::HandleGestureBegin() {
 }
 
 void SelectionControllerEfl::HandleGestureEnd() {
+  if (should_restore_selection_menu_ && !was_scrolled_ &&
+      !selection_acked_on_tap_ &&
+         !(single_tap_performed_ && GetSelectionEditable())) {
+    should_restore_selection_menu_ = false;
+    HideHandleAndContextMenu();
+  }
+
   if (restore_showing_large_handle_on_gesture_end_) {
     SetShowOnlyLargeHandle(
         *restore_showing_large_handle_on_gesture_end_);
     restore_showing_large_handle_on_gesture_end_.reset();
   }
+  single_tap_performed_ = false;
 }
 
 void SelectionControllerEfl::HandlePostponedGesture(int x, int y, ui::EventType type) {
index 083df89..1fe3713 100644 (file)
@@ -118,8 +118,7 @@ class CONTENT_EXPORT SelectionControllerEfl {
 
   // Gesture handlers.
   void HandlePostponedGesture(int x, int y, ui::EventType type);
-  void HandleGesture(blink::WebGestureEvent& event,
-      bool should_restore_selection_menu);
+  void HandleGesture(blink::WebGestureEvent& event);
   void HandleGestureBegin();
   void HandleGestureEnd();
 
@@ -170,6 +169,12 @@ class CONTENT_EXPORT SelectionControllerEfl {
 
   // Saves state of context popup menu and handlers before scroll
   bool show_after_scroll_;
+  bool should_restore_selection_menu_;
+  bool selection_acked_on_tap_;
+  bool single_tap_performed_;
+  // Used only to indicate that user scrolled view
+  // after gesture GestureTapDown.
+  bool was_scrolled_;
 
   // Flag which indicates if showing handlers and popup menu was prevented due to selection
   // behind other layer.