summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/render_widget_host_view_qt.cpp22
-rw-r--r--src/core/render_widget_host_view_qt.h1
-rw-r--r--src/core/render_widget_host_view_qt_delegate.h2
-rw-r--r--src/core/web_contents_delegate_qt.cpp11
-rw-r--r--src/core/web_contents_delegate_qt.h1
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.cpp10
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.h2
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quickwindow.h2
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp10
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h2
10 files changed, 60 insertions, 3 deletions
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index fec9caabc..a94ae6995 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -352,12 +352,19 @@ gfx::Rect RenderWidgetHostViewQt::GetViewBounds() const
// Return value indicates whether the mouse is locked successfully or not.
bool RenderWidgetHostViewQt::LockMouse()
{
- QT_NOT_USED
- return false;
+ mouse_locked_ = true;
+ m_lockedMousePosition = QCursor::pos();
+ m_delegate->lockMouse();
+ qApp->setOverrideCursor(Qt::BlankCursor);
+ return true;
}
+
void RenderWidgetHostViewQt::UnlockMouse()
{
- QT_NOT_USED
+ mouse_locked_ = false;
+ m_delegate->unlockMouse();
+ qApp->restoreOverrideCursor();
+ m_host->LostMouseLock();
}
void RenderWidgetHostViewQt::WasShown()
@@ -833,11 +840,20 @@ void RenderWidgetHostViewQt::handleMouseEvent(QMouseEvent* event)
m_clickHelper.lastPressPosition = QPointF(event->pos()).toPoint();
}
+ if (IsMouseLocked()) {
+ webEvent.movementX = -(m_lockedMousePosition.x() - event->globalX());
+ webEvent.movementY = -(m_lockedMousePosition.y() - event->globalY());
+ QCursor::setPos(m_lockedMousePosition);
+ }
+
m_host->ForwardMouseEvent(webEvent);
}
void RenderWidgetHostViewQt::handleKeyEvent(QKeyEvent *ev)
{
+ if (IsMouseLocked() && ev->key() == Qt::Key_Escape && ev->type() == QEvent::KeyRelease)
+ UnlockMouse();
+
content::NativeWebKeyboardEvent webEvent = WebEventFactory::toWebKeyboardEvent(ev);
m_host->ForwardKeyboardEvent(webEvent);
if (webEvent.type == blink::WebInputEvent::RawKeyDown && !ev->text().isEmpty()) {
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index fdb43dcae..6ba95213b 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -248,6 +248,7 @@ private:
QRect m_cursorRect;
size_t m_anchorPositionWithinSelection;
size_t m_cursorPositionWithinSelection;
+ QPoint m_lockedMousePosition;
bool m_initPending;
};
diff --git a/src/core/render_widget_host_view_qt_delegate.h b/src/core/render_widget_host_view_qt_delegate.h
index 0fb3d1d5f..018a914d8 100644
--- a/src/core/render_widget_host_view_qt_delegate.h
+++ b/src/core/render_widget_host_view_qt_delegate.h
@@ -77,6 +77,8 @@ public:
virtual QRectF contentsRect() const = 0;
virtual void setKeyboardFocus() = 0;
virtual bool hasKeyboardFocus() = 0;
+ virtual void lockMouse() = 0;
+ virtual void unlockMouse() = 0;
virtual void show() = 0;
virtual void hide() = 0;
virtual bool isVisible() const = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 9d53dc48d..f55300571 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -275,6 +275,17 @@ void WebContentsDelegateQt::DidNavigateAnyFrame(const content::LoadCommittedDeta
m_viewClient->browserContextAdapter()->visitedLinksManager()->addUrl(params.url);
}
+void WebContentsDelegateQt::RequestToLockMouse(content::WebContents *web_contents, bool user_gesture, bool last_unlocked_by_target)
+{
+ Q_UNUSED(user_gesture);
+
+ if (last_unlocked_by_target)
+ web_contents->GotResponseToLockMouseRequest(true);
+ else
+ // TODO: Send permission request
+ web_contents->GotResponseToLockMouseRequest(true);
+}
+
void WebContentsDelegateQt::overrideWebPreferences(content::WebContents *, WebPreferences *webPreferences)
{
m_viewClient->webEngineSettings()->overrideWebPreferences(webPreferences);
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 29a548f47..aa97b52cc 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -87,6 +87,7 @@ public:
virtual void RequestMediaAccessPermission(content::WebContents* web_contents, const content::MediaStreamRequest& request, const content::MediaResponseCallback& callback) Q_DECL_OVERRIDE;
virtual void UpdateTargetURL(content::WebContents *source, int32 page_id, const GURL &url) Q_DECL_OVERRIDE;
virtual void DidNavigateAnyFrame(const content::LoadCommittedDetails&, const content::FrameNavigateParams& params) Q_DECL_OVERRIDE;
+ virtual void RequestToLockMouse(content::WebContents *web_contents, bool user_gesture, bool last_unlocked_by_target) Q_DECL_OVERRIDE;
void overrideWebPreferences(content::WebContents *, WebPreferences*);
void allowCertificateError(const QExplicitlySharedDataPointer<CertificateErrorController> &) ;
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
index 92aabac8e..663232eda 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp
@@ -105,6 +105,16 @@ bool RenderWidgetHostViewQtDelegateQuick::hasKeyboardFocus()
return hasFocus();
}
+void RenderWidgetHostViewQtDelegateQuick::lockMouse()
+{
+ grabMouse();
+}
+
+void RenderWidgetHostViewQtDelegateQuick::unlockMouse()
+{
+ ungrabMouse();
+}
+
void RenderWidgetHostViewQtDelegateQuick::show()
{
setVisible(true);
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h
index 112d97377..305c14957 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quick.h
+++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h
@@ -53,6 +53,8 @@ public:
virtual QRectF contentsRect() const Q_DECL_OVERRIDE;
virtual void setKeyboardFocus() Q_DECL_OVERRIDE;
virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE;
+ virtual void lockMouse() Q_DECL_OVERRIDE;
+ virtual void unlockMouse() Q_DECL_OVERRIDE;
virtual void show() Q_DECL_OVERRIDE;
virtual void hide() Q_DECL_OVERRIDE;
virtual bool isVisible() const Q_DECL_OVERRIDE;
diff --git a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
index e6c793143..d3e81e497 100644
--- a/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
+++ b/src/webengine/render_widget_host_view_qt_delegate_quickwindow.h
@@ -56,6 +56,8 @@ public:
virtual QRectF contentsRect() const Q_DECL_OVERRIDE;
virtual void setKeyboardFocus() Q_DECL_OVERRIDE {}
virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE { return false; }
+ virtual void lockMouse() Q_DECL_OVERRIDE {}
+ virtual void unlockMouse() Q_DECL_OVERRIDE {}
virtual void show() Q_DECL_OVERRIDE;
virtual void hide() Q_DECL_OVERRIDE;
virtual bool isVisible() const Q_DECL_OVERRIDE;
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
index e49259a59..3880e4197 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp
@@ -121,6 +121,16 @@ bool RenderWidgetHostViewQtDelegateWidget::hasKeyboardFocus()
return hasFocus();
}
+void RenderWidgetHostViewQtDelegateWidget::lockMouse()
+{
+ grabMouse();
+}
+
+void RenderWidgetHostViewQtDelegateWidget::unlockMouse()
+{
+ releaseMouse();
+}
+
void RenderWidgetHostViewQtDelegateWidget::show()
{
// Check if we're attached to a QWebEngineView, we don't
diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h
index 670e22f31..8fc189124 100644
--- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h
+++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h
@@ -61,6 +61,8 @@ public:
virtual QRectF contentsRect() const Q_DECL_OVERRIDE;
virtual void setKeyboardFocus() Q_DECL_OVERRIDE;
virtual bool hasKeyboardFocus() Q_DECL_OVERRIDE;
+ virtual void lockMouse() Q_DECL_OVERRIDE;
+ virtual void unlockMouse() Q_DECL_OVERRIDE;
virtual void show() Q_DECL_OVERRIDE;
virtual void hide() Q_DECL_OVERRIDE;
virtual bool isVisible() const Q_DECL_OVERRIDE;