summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2013-11-26 11:22:02 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-11 13:15:20 +0100
commitfcd089040ce6a3860ab4abccc6f56afcd99baeed (patch)
treefb9b18d76b5a8072e93972fd38bb9abb1e0ce39a /src
parent331b7fa11c84107e3300b14ece5fc5991cfc35e9 (diff)
Implement requestFullscreen for QQuickWebEngineView.
This patch adds a property isFullScreen and a signal fullScreenRequested to QQuickWebEngineViewExperimental. The signal fullScreenRequested is emitted when some web content requests fullscreen through the javascript API. The property isFullScreen is supposed to be set programmatically when the view is being shown fullscreen. This information is then available to the WebContentsDelegateQt when checking if the fullscreen request has been accepted. Change-Id: I04cbb45f263a188d26cc87d70ac53b0fbab63936 Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/web_contents_adapter_client.h2
-rw-r--r--src/core/web_contents_delegate_qt.cpp13
-rw-r--r--src/core/web_contents_delegate_qt.h2
-rw-r--r--src/webengine/api/qquickwebengineview.cpp22
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h10
-rw-r--r--src/webenginewidgets/api/qwebenginepage_p.h2
6 files changed, 51 insertions, 0 deletions
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index 077e21500..5a11fc8d8 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -127,6 +127,8 @@ public:
virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect & initialGeometry) = 0;
virtual void close() = 0;
virtual bool contextMenuRequested(const WebEngineContextMenuData&) = 0;
+ virtual void requestFullScreen(bool) = 0;
+ virtual bool isFullScreen() const = 0;
virtual void javascriptDialog(QSharedPointer<JavaScriptDialogController>) = 0;
virtual void runFileChooser(FileChooserMode, const QString &defaultFileName, const QStringList &acceptedMimeTypes) = 0;
virtual void didRunJavaScript(const QVariant& result, quint64 requestId) = 0;
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index 232bb95ef..16ec54afd 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -133,6 +133,19 @@ content::JavaScriptDialogManager *WebContentsDelegateQt::GetJavaScriptDialogMana
return JavaScriptDialogManagerQt::GetInstance();
}
+void WebContentsDelegateQt::ToggleFullscreenModeForTab(content::WebContents* web_contents, bool enter_fullscreen)
+{
+ if (m_viewClient->isFullScreen() != enter_fullscreen) {
+ m_viewClient->requestFullScreen(enter_fullscreen);
+ web_contents->GetRenderViewHost()->WasResized();
+ }
+}
+
+bool WebContentsDelegateQt::IsFullscreenForTabOrPending(const content::WebContents* web_contents) const
+{
+ return m_viewClient->isFullScreen();
+}
+
Q_STATIC_ASSERT_X(static_cast<int>(WebContentsAdapterClient::Open) == static_cast<int>(content::FileChooserParams::Open), "Enums out of sync");
Q_STATIC_ASSERT_X(static_cast<int>(WebContentsAdapterClient::Save) == static_cast<int>(content::FileChooserParams::Save), "Enums out of sync");
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index 019998241..460bb9ec2 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -73,6 +73,8 @@ public:
virtual void DidUpdateFaviconURL(int32 page_id, const std::vector<content::FaviconURL>& candidates) Q_DECL_OVERRIDE;
virtual void DidFailProvisionalLoad(int64 frame_id, bool is_main_frame, const GURL& validated_url, int error_code, const string16& error_description, content::RenderViewHost* render_view_host) Q_DECL_OVERRIDE;
virtual content::JavaScriptDialogManager *GetJavaScriptDialogManager() Q_DECL_OVERRIDE;
+ virtual void ToggleFullscreenModeForTab(content::WebContents* web_contents, bool enter_fullscreen) Q_DECL_OVERRIDE;
+ virtual bool IsFullscreenForTabOrPending(const content::WebContents* web_contents) const Q_DECL_OVERRIDE;
virtual void RunFileChooser(content::WebContents *, const content::FileChooserParams &params) Q_DECL_OVERRIDE;
virtual bool AddMessageToConsole(content::WebContents* source, int32 level, const string16& message, int32 line_no, const string16& source_id) Q_DECL_OVERRIDE;
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 2f5d868ea..e91f2ee75 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -70,6 +70,7 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate()
, loadProgress(0)
, inspectable(false)
, m_isLoading(false)
+ , m_isFullScreen(false)
, devicePixelRatio(QGuiApplication::primaryScreen()->devicePixelRatio())
, m_dpiScale(1.0)
{
@@ -324,6 +325,16 @@ void QQuickWebEngineViewPrivate::close()
Q_UNREACHABLE();
}
+void QQuickWebEngineViewPrivate::requestFullScreen(bool fullScreen)
+{
+ Q_EMIT e->fullScreenRequested(fullScreen);
+}
+
+bool QQuickWebEngineViewPrivate::isFullScreen() const
+{
+ return e->isFullScreen();
+}
+
void QQuickWebEngineViewPrivate::javaScriptConsoleMessage(int level, const QString& message, int lineNumber, const QString& sourceID)
{
Q_Q(QQuickWebEngineView);
@@ -438,6 +449,17 @@ void QQuickWebEngineView::setInspectable(bool enable)
d->adapter->enableInspector(enable);
}
+void QQuickWebEngineViewExperimental::setIsFullScreen(bool fullscreen)
+{
+ d_ptr->m_isFullScreen = fullscreen;
+ emit isFullScreenChanged();
+}
+
+bool QQuickWebEngineViewExperimental::isFullScreen() const
+{
+ return d_ptr->m_isFullScreen;
+}
+
void QQuickWebEngineViewExperimental::setExtraContextMenuEntriesComponent(QQmlComponent *contextMenuExtras)
{
if (d_ptr->contextMenuExtraItems == contextMenuExtras)
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 3de597469..d35758d70 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -93,8 +93,13 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObjec
Q_OBJECT
Q_PROPERTY(QQuickWebEngineViewport *viewport READ viewport)
Q_PROPERTY(QQmlComponent *extraContextMenuEntriesComponent READ extraContextMenuEntriesComponent WRITE setExtraContextMenuEntriesComponent NOTIFY extraContextMenuEntriesComponentChanged)
+ Q_PROPERTY(bool isFullScreen READ isFullScreen WRITE setIsFullScreen NOTIFY isFullScreenChanged)
public:
+ void setIsFullScreen(bool fullscreen);
+ bool isFullScreen() const;
+
+public Q_SLOTS:
QQuickWebEngineViewport *viewport() const;
Q_INVOKABLE void adoptHandle(QQuickWebEngineViewHandle *viewHandle);
void setExtraContextMenuEntriesComponent(QQmlComponent *);
@@ -102,6 +107,8 @@ public:
Q_SIGNALS:
void createWindow(const QJSValue &newViewHandle, const QString &newViewDisposition);
+ void fullScreenRequested(bool fullScreen);
+ void isFullScreenChanged();
void extraContextMenuEntriesComponentChanged();
private:
@@ -135,6 +142,8 @@ public:
virtual void focusContainer() Q_DECL_OVERRIDE;
virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &) Q_DECL_OVERRIDE;
virtual void close() Q_DECL_OVERRIDE;
+ virtual void requestFullScreen(bool) Q_DECL_OVERRIDE;
+ virtual bool isFullScreen() const Q_DECL_OVERRIDE;
virtual bool contextMenuRequested(const WebEngineContextMenuData &) Q_DECL_OVERRIDE;
virtual void javascriptDialog(QSharedPointer<JavaScriptDialogController>) Q_DECL_OVERRIDE;
virtual void runFileChooser(FileChooserMode, const QString &defaultFileName, const QStringList &acceptedMimeTypes) Q_DECL_OVERRIDE;
@@ -154,6 +163,7 @@ public:
int loadProgress;
bool inspectable;
bool m_isLoading;
+ bool m_isFullScreen;
qreal devicePixelRatio;
private:
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index 0a90eda07..0fa4299d8 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -78,6 +78,8 @@ public:
virtual void adoptNewWindow(WebContentsAdapter *newWebContents, WindowOpenDisposition disposition, const QRect &initialGeometry) Q_DECL_OVERRIDE;
virtual void close() Q_DECL_OVERRIDE;
virtual bool contextMenuRequested(const WebEngineContextMenuData &data) Q_DECL_OVERRIDE;
+ virtual void requestFullScreen(bool) Q_DECL_OVERRIDE { };
+ virtual bool isFullScreen() const Q_DECL_OVERRIDE { return false; };
virtual void javascriptDialog(QSharedPointer<JavaScriptDialogController>) Q_DECL_OVERRIDE;
virtual void runFileChooser(FileChooserMode, const QString &defaultFileName, const QStringList &acceptedMimeTypes) Q_DECL_OVERRIDE;
virtual void didRunJavaScript(const QVariant& result, quint64 requestId) Q_DECL_OVERRIDE;