From 5fac32e6653e713f6e3e65e02e5c1b81df56c075 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 14 Nov 2018 17:45:13 +0100 Subject: Fix emulated touch events Touch events now does hit-testing based on surface, so we need to register outselves as a surface to have touch events do anything. Fixes: QTBUG-71801 Change-Id: Iafd43dfcecf029f9c11e0c0c58a349ff38badbaa Reviewed-by: Alexandru Croitor --- src/core/render_widget_host_view_qt.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/core/render_widget_host_view_qt.cpp') diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index bc41337d9..af7471759 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -54,6 +54,7 @@ #include "content/browser/frame_host/frame_tree.h" #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/common/content_switches_internal.h" +#include "content/browser/renderer_host/render_widget_host_input_event_router.h" #include "content/common/cursors/webcursor.h" #include "content/common/input_messages.h" #include "third_party/skia/include/core/SkColor.h" @@ -274,6 +275,9 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget , m_wheelAckPending(false) , m_pendingResize(false) , m_mouseWheelPhaseHandler(this) + // This frame-sink id is based on what RenderWidgetHostViewChildFrame does: + , m_frameSinkId(base::checked_cast(widget->GetProcess()->GetID()), + base::checked_cast(widget->GetRoutingID())) { host()->SetView(this); #ifndef QT_NO_ACCESSIBILITY @@ -291,6 +295,9 @@ RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost *widget m_imeHasHiddenTextCapability = context && context->hasCapability(QPlatformInputContext::HiddenTextCapability); m_localSurfaceId = m_localSurfaceIdAllocator.GenerateId(); + + if (host()->delegate() && host()->delegate()->GetInputEventRouter()) + host()->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner(GetFrameSinkId(), this); } RenderWidgetHostViewQt::~RenderWidgetHostViewQt() @@ -1682,7 +1689,7 @@ viz::SurfaceId RenderWidgetHostViewQt::GetCurrentSurfaceId() const const viz::FrameSinkId &RenderWidgetHostViewQt::GetFrameSinkId() const { - return viz::FrameSinkIdAllocator::InvalidFrameSinkId(); + return m_frameSinkId; } const viz::LocalSurfaceId &RenderWidgetHostViewQt::GetLocalSurfaceId() const -- cgit v1.2.3 From 44abfea789b8677a741530c44a0cd35e5276ddf3 Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Mon, 19 Nov 2018 13:43:54 +0100 Subject: Fix IME with negative start position Change-Id: I64a39975788cc40c5e0595c1a0c5db9000889bfd Reviewed-by: Allan Sandfeld Jensen --- src/core/render_widget_host_view_qt.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'src/core/render_widget_host_view_qt.cpp') diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp index af7471759..267460bdc 100644 --- a/src/core/render_widget_host_view_qt.cpp +++ b/src/core/render_widget_host_view_qt.cpp @@ -1316,14 +1316,9 @@ void RenderWidgetHostViewQt::handleInputMethodEvent(QInputMethodEvent *ev) if (replacementLength > 0) { - int start = ev->replacementStart(); - - if (start >= 0) - replacementRange = gfx::Range(start, start + replacementLength); - else if (m_surroundingText.length() + start >= 0) { - start = m_surroundingText.length() + start; - replacementRange = gfx::Range(start, start + replacementLength); - } + int replacementStart = ev->replacementStart() < 0 ? m_cursorPosition + ev->replacementStart() : ev->replacementStart(); + if (replacementStart >= 0 && replacementStart < m_surroundingText.length()) + replacementRange = gfx::Range(replacementStart, replacementStart + replacementLength); } // There are so-far two known cases, when an empty QInputMethodEvent is received. -- cgit v1.2.3