Fix EWK support for switching between mouse and touch events
authorPiotr Tworek <p.tworek@samsung.com>
Fri, 13 Mar 2015 12:22:08 +0000 (13:22 +0100)
committerYoungsoo Choi <kenshin.choi@samsung.com>
Tue, 10 Jul 2018 06:57:09 +0000 (06:57 +0000)
EWK functions switching between mouse and touch events operate on the
view object. Unfortunately our current implementation operated on the
RenderWidgetHostView objects. There is no 1:1 translation between EWK
view and RenderWidgetHostView. As a result any modifications the
functions made were only valid until chromium decided to create a new
RWHV. Take the following use case.

  1. Launch ubrowser
  2. Load some page, for example google.com
  3. Enable touch events via extra actions menu.
  4. Load different page, ex xkcd.com

In such scenarion touch events should be still enabled for xkcd.com. The
problem is they weren't. Chromium creates new RWHVs for pages being
loaded from different domain. As a result loading xkcd page disabled
touch events once again.

This patch fixes the problem by moving input event toggling code the the
WebContentsView object. There is always only one object of that type per
WebContents/EWebView.

Change-Id: I6d16ded8cdbf252b1e12b34cc02f43f7566af5d3
Signed-off-by: Piotr Tworek <p.tworek@samsung.com>
tizen_src/chromium_impl/content/browser/renderer_host/render_widget_host_view_efl.cc
tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.cc
tizen_src/chromium_impl/content/browser/web_contents/web_contents_view_efl.h
tizen_src/ewk/efl_integration/eweb_view.cc

index 61aad28..47e48fe 100644 (file)
@@ -111,11 +111,7 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget)
     texture_id_(0),
     surface_id_(0),
     is_modifier_key_(false),
-#if defined(OS_TIZEN)
-    touch_events_enabled_(true),
-#else
     touch_events_enabled_(false),
-#endif
     should_restore_selection_menu_(false),
     selection_acked_on_tap_(false),
     was_scrolled_(false) {
@@ -123,13 +119,6 @@ RenderWidgetHostViewEfl::RenderWidgetHostViewEfl(RenderWidgetHost* widget)
   device_scale_factor_ = gfx::Screen::GetNativeScreen()->
       GetPrimaryDisplay().device_scale_factor();
 
-  base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
-  if (cmdline->HasSwitch(switches::kTouchEvents)) {
-    touch_events_enabled_ = cmdline->
-        GetSwitchValueASCII(switches::kTouchEvents) ==
-           switches::kTouchEventsEnabled;
-  }
-
   host_->SetView(this);
 
   static bool scale_factor_initialized = false;
index e3c01bd..c130bf7 100644 (file)
@@ -8,6 +8,7 @@
 #include <Elementary.h>
 
 #include "base/logging.h"
+#include "base/command_line.h"
 #include "base/strings/utf_string_conversions.h"
 #include "content/browser/renderer_host/render_widget_host_view_efl.h"
 #include "content/browser/web_contents/web_contents_impl.h"
@@ -16,6 +17,7 @@
 #include "content/public/browser/web_contents_view_delegate.h"
 #include "content/public/browser/interstitial_page.h"
 #include "efl/window_factory.h"
+#include "ui/events/event_switches.h"
 #include "ui/gl/gl_shared_context_efl.h"
 
 namespace content {
@@ -35,7 +37,19 @@ WebContentsViewEfl::WebContentsViewEfl(WebContents* contents,
     , native_view_(NULL)
     , drag_dest_delegate_(NULL)
     , orientation_(0)
-    , web_contents_(contents) {}
+#if defined(OS_TIZEN)
+    , touch_enabled_(true)
+#else
+    , touch_enabled_(false)
+#endif
+    , web_contents_(contents) {
+  base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
+  if (cmdline->HasSwitch(switches::kTouchEvents)) {
+    touch_enabled_ = cmdline->
+        GetSwitchValueASCII(switches::kTouchEvents) ==
+            switches::kTouchEventsEnabled;
+  }
+}
 
 WebContentsViewEfl::~WebContentsViewEfl() {
 }
@@ -62,6 +76,7 @@ RenderWidgetHostViewBase* WebContentsViewEfl::CreateViewForWidget(
   RenderWidgetHostViewEfl* view =
       new RenderWidgetHostViewEfl(render_widget_host);
   view->Init(native_view_);
+  view->SetTouchEventsEnabled(touch_enabled_);
   view->Show();
 
   SetOrientation(orientation_);
@@ -239,4 +254,12 @@ void WebContentsViewEfl::SetOrientation(int orientation) {
   orientation_ = orientation;
 }
 
+void WebContentsViewEfl::SetTouchEventsEnabled(bool enabled) {
+  touch_enabled_ = enabled;
+  RenderWidgetHostViewEfl* rwhv = static_cast<RenderWidgetHostViewEfl*>(
+      web_contents_->GetRenderWidgetHostView());
+  if (rwhv)
+    rwhv->SetTouchEventsEnabled(enabled);
+}
+
 } // namespace content
index eb99f42..e242e3c 100644 (file)
@@ -62,6 +62,7 @@ class WebContentsViewEfl
   void UpdateDragDest(RenderViewHost* host);
 
   void SetOrientation(int orientation);
+  void SetTouchEventsEnabled(bool);
 
 private:
   // Our optional views wrapper.
@@ -76,6 +77,7 @@ private:
   scoped_ptr<WebDragDestEfl> drag_dest_;
 
   int orientation_;
+  bool touch_enabled_;
 
   WebContents* web_contents_;
 
index 99f92c9..9376c6a 100644 (file)
@@ -882,9 +882,7 @@ void EWebView::SetTouchEventsEnabled(bool enabled) {
     return;
 
   touch_events_enabled_ = enabled;
-
-  if(rwhv())
-    rwhv()->SetTouchEventsEnabled(enabled);
+  GetWebContentsViewEfl()->SetTouchEventsEnabled(enabled);
 }
 
 bool EWebView::MouseEventsEnabled() const {
@@ -896,9 +894,7 @@ void EWebView::SetMouseEventsEnabled(bool enabled) {
     return;
 
   mouse_events_enabled_ = enabled;
-
- if(rwhv())
-    rwhv()->SetTouchEventsEnabled(!enabled);
+  GetWebContentsViewEfl()->SetTouchEventsEnabled(!enabled);
 }
 
 namespace {