[dev/m42][uBrowser] Wrong output on double tap.
authorAntonio Gomes <a1.gomes@samsung.com>
Tue, 12 May 2015 19:21:23 +0000 (15:21 -0400)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
RWHVEfl makes use of chromium's GestureRecognizer class
in order to provide gestures support. GestureRecognizer
itself is abstract and gets concrete by its child,
GestureRecognizerImpl, which holds and encapsulates
a GestureProviderAura instance. Problem is that GestureProviderAura
has 'double tap' support disabled by default.

Patch provides the following solution:

- Specialize GestureRecognizerImpl into a class called
  GestureRecognizerImplEfl. The later overrides and makes
  ::GetGestureProviderForConsumer public, granting access to
  its GestureProviderAura instance.
- Override GestureRecognizer::Create method, and instantiate
  a GestureRecognizerImplEfl object (instead of GestureRecognizerImplEfl).

Once accessible, calling GestureProviderAura::SetDoubleTapSupportForPlatformEnabled
fixes the problem.

Bug: http://107.108.218.239/bugzilla/show_bug.cgi?id=12717
Change-Id: I81d5a06b80a453acd5b58d68a38e55648822a8b3
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/ui/events/gestures/gesture_recognizer_impl_efl.cc [new file with mode: 0644]
tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_efl.h [new file with mode: 0644]
tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_override.cc [new file with mode: 0644]
tizen_src/chromium_impl/ui/ui_targets_efl.gyp

index 3c0bcb7..ee12e8a 100644 (file)
 #include "third_party/WebKit/public/web/WebInputEvent.h"
 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
 #include "third_party/WebKit/public/web/WebTouchPoint.h"
+#include "ui/base/clipboard/clipboard_helper_efl.h"
 #include "ui/base/layout.h"
+#include "ui/events/event_switches.h"
+#include "ui/events/event_utils.h"
+#define private public
+#include "ui/events/gestures/gesture_provider_aura.h"
+#undef private
+#include "ui/events/gestures/gesture_recognizer_impl_efl.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/geometry/dip_util.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/screen.h"
-#include "ui/events/event_utils.h"
 #include "ui/gl/gl_shared_context_efl.h"
-#include "ui/base/clipboard/clipboard_helper_efl.h"
-#include "ui/events/event_switches.h"
 
 #define EFL_MAX_WIDTH 10000
 #define EFL_MAX_HEIGHT 10000  // borrowed from GTK+ port
@@ -125,6 +129,14 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget)
     selection_acked_on_tap_(false),
     was_scrolled_(false) {
 
+  // Enable double tap support, disabled by default in  GestureProviderAura ctor.
+  ui::GestureRecognizerImplEfl* gesture_recognizer_efl =
+      static_cast<ui::GestureRecognizerImplEfl*>(gesture_recognizer_.get());
+  DCHECK(gesture_recognizer_efl);
+  ui::GestureProviderAura* gesture_provider_aura =
+      gesture_recognizer_efl->GetGestureProviderForConsumer(this);
+  gesture_provider_aura->filtered_gesture_provider_.SetDoubleTapSupportForPlatformEnabled(true);
+
   device_scale_factor_ = gfx::Screen::GetNativeScreen()->
       GetPrimaryDisplay().device_scale_factor();
 
diff --git a/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_efl.cc b/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_efl.cc
new file mode 100644 (file)
index 0000000..f92accb
--- /dev/null
@@ -0,0 +1,37 @@
+// Copyright 2015 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/gestures/gesture_recognizer_impl_efl.h"
+
+#include "ui/events/gestures/gesture_recognizer_impl.h"
+#include "ui/events/gestures/gesture_recognizer.h"
+
+namespace ui {
+
+// The two methods below are originally defined in
+// ui/events/gestures/gesture_recognizer_impl.cc. The reason
+// for EFL port to redefine them are:
+// 1) ::Create method instantiates our own GestureRegnizerImplEfl,
+//    instead of its parent GestureRecognizerImpl.
+//    See gesture_recognizer_impl_override.cc.
+// 2) In GestureRegnizerImplEfl, ::GetGestureProviderForConsumer method
+//    is overloaded and made public. In practice, it just calls its
+//    parent class implementation.
+//
+// We use the getter to access the instance of GestureProviderAura
+// object associated with GestureRecognizer{Impl}. Further customizations
+// are then possible, including enabling double tap support.
+
+GestureProviderAura* GestureRecognizerImplEfl::GetGestureProviderForConsumer(
+    GestureConsumer* c) {
+  return GestureRecognizerImpl::GetGestureProviderForConsumer(c);
+}
+
+// GestureRecognizer, static
+GestureRecognizer* GestureRecognizer::Create() {
+  return new GestureRecognizerImplEfl();
+}
+
+} // namespace ui
+
diff --git a/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_efl.h b/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_efl.h
new file mode 100644 (file)
index 0000000..6c4d2fb
--- /dev/null
@@ -0,0 +1,22 @@
+// Copyright 2015 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_EVENTS_GESTURES_GESTURE_RECOGNIZER_IMPL_EFL_H_
+#define UI_EVENTS_GESTURES_GESTURE_RECOGNIZER_IMPL_EFL_H_
+
+#include "ui/events/gestures/gesture_recognizer_impl.h"
+
+namespace ui {
+class GestureConsumer;
+
+class EVENTS_EXPORT GestureRecognizerImplEfl : public GestureRecognizerImpl {
+ public:
+
+  GestureProviderAura* GetGestureProviderForConsumer(
+      GestureConsumer* c) override;
+};
+
+}  // namespace ui
+
+#endif  // UI_EVENTS_GESTURES_GESTURE_RECOGNIZER_IMPL_EFL_H_
diff --git a/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_override.cc b/tizen_src/chromium_impl/ui/events/gestures/gesture_recognizer_impl_override.cc
new file mode 100644 (file)
index 0000000..81d219c
--- /dev/null
@@ -0,0 +1,7 @@
+// Copyright 2015 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Define "Create" method to something else, because we want to have our own.
+#define Create not_Create
+#include "ui/events/gestures/gesture_recognizer_impl.cc"
index 1aec56e..4bad119 100644 (file)
       'target_name': 'ui_events_source_inject',
       'type': 'static_library',
       'sources': [
-        '<(DEPTH)/ui/events/gestures/gesture_recognizer_impl.cc',
-        '<(DEPTH)/ui/events/gestures/gesture_recognizer_impl.h',
+        # Indirectly includes ui/events/gestures/gesture_recognizer_impl_efl.cc/h.
+        'events/gestures/gesture_recognizer_impl_override.cc',
+        'events/gestures/gesture_recognizer_impl_efl.cc',
+        'events/gestures/gesture_recognizer_impl_efl.h',
         '<(DEPTH)/ui/events/gestures/gesture_provider_aura.cc',
         '<(DEPTH)/ui/events/gestures/gesture_provider_aura.h',
         '<(DEPTH)/ui/events/gestures/motion_event_aura.cc',