summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/quick/quicknanobrowser/quickwindow.qml46
-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
7 files changed, 97 insertions, 0 deletions
diff --git a/examples/quick/quicknanobrowser/quickwindow.qml b/examples/quick/quicknanobrowser/quickwindow.qml
index 88fc9f8a0..d72c30021 100644
--- a/examples/quick/quicknanobrowser/quickwindow.qml
+++ b/examples/quick/quicknanobrowser/quickwindow.qml
@@ -44,6 +44,7 @@ import QtWebEngine.experimental 1.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import QtQuick.Layouts 1.0
+import QtQuick.Window 2.1
import QtQuick.Controls.Private 1.0
ApplicationWindow {
@@ -51,11 +52,21 @@ ApplicationWindow {
function load(url) { tabs.currentView.url = url }
function adoptHandle(viewHandle) { tabs.currentView.adoptHandle(viewHandle) }
+ property bool isFullScreen: visibility == Window.FullScreen
+ onIsFullScreenChanged: {
+ // This is for the case where the system forces us to leave fullscreen.
+ if (!isFullScreen && tabs.currentView.state == "FullScreen")
+ tabs.currentView.state = ""
+ }
+
height: 600
width: 800
visible: true
title: tabs.currentView && tabs.currentView.title
+ // Make sure the Qt.WindowFullscreenButtonHint is set on Mac.
+ Component.onCompleted: flags = flags | Qt.WindowFullscreenButtonHint
+
// Create a styleItem to determine the platform.
// When using style "mac", ToolButtons are not supposed to accept focus.
StyleItem { id: styleItem }
@@ -92,6 +103,14 @@ ApplicationWindow {
}
}
+ Action {
+ shortcut: "Escape"
+ onTriggered: {
+ if (browserWindow.isFullScreen)
+ browserWindow.showNormal()
+ }
+ }
+
toolBar: ToolBar {
id: navigationBar
RowLayout {
@@ -174,11 +193,38 @@ ApplicationWindow {
Component {
id: tabComponent
WebEngineView {
+ id: webEngineView
function adoptHandle(viewHandle) { experimental.adoptHandle(viewHandle) }
focus: true
+ states: [
+ State {
+ name: "FullScreen"
+ PropertyChanges {
+ target: tabs
+ frameVisible: false
+ tabsVisible: false
+ }
+ PropertyChanges {
+ target: navigationBar
+ visible: false
+ }
+ }
+ ]
+
experimental {
+ isFullScreen: webEngineView.state == "FullScreen" && browserWindow.isFullScreen
+ onFullScreenRequested: {
+ if (fullScreen) {
+ webEngineView.state = "FullScreen"
+ browserWindow.showFullScreen();
+ } else {
+ webEngineView.state = ""
+ browserWindow.showNormal();
+ }
+ }
+
onCreateWindow: {
if (newViewDisposition == "popup")
print("Warning: Ignored a popup window.")
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;