From e545ecaf29779950c0c91aa4b5e179b650e7ac8c Mon Sep 17 00:00:00 2001
From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Date: Mon, 7 Apr 2014 11:56:48 +0200
Subject: [PATCH] Update QWebEnginePage::WebWindowType

Expose the same values as currently available in
QQuickWebEngineView::NewViewDestination.

Rename the WebModalDialog to WebDialog, which actually replaces the
tool/status/menuBarVisibilityChangeRequested signals.

Change-Id: Icc103f434fb3eca49f1a53e476e101c3d6fffd36
Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
---
 examples/webenginewidgets/browser/webview.cpp   |  5 ++---
 src/webenginewidgets/api/qwebenginepage.cpp     | 17 ++++++++++++++++-
 src/webenginewidgets/api/qwebenginepage.h       |  3 ++-
 .../doc/src/qwebenginepage_lgpl.qdoc            |  5 +++--
 4 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/examples/webenginewidgets/browser/webview.cpp b/examples/webenginewidgets/browser/webview.cpp
index 193cb4797..6fdf316bd 100644
--- a/examples/webenginewidgets/browser/webview.cpp
+++ b/examples/webenginewidgets/browser/webview.cpp
@@ -175,11 +175,10 @@ QWebEnginePage *WebPage::createWindow(QWebEnginePage::WebWindowType type)
 {
     if (m_keyboardModifiers & Qt::ControlModifier || m_pressedButtons == Qt::MidButton)
         m_openInNewTab = true;
-    if (m_openInNewTab) {
+    if (m_openInNewTab || type == QWebEnginePage::WebBrowserTab) {
         m_openInNewTab = false;
         return mainWindow()->tabWidget()->newTab()->page();
-    }
-    if (type == QWebEnginePage::WebBrowserWindow) {
+    } else if (type == QWebEnginePage::WebBrowserWindow) {
         BrowserApplication::instance()->newMainWindow();
         BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
         return mainWindow->currentTab()->page();
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 04f24c62a..80f780dde 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -46,6 +46,21 @@
 
 QT_BEGIN_NAMESPACE
 
+static QWebEnginePage::WebWindowType toWindowType(WebContentsAdapterClient::WindowOpenDisposition disposition)
+{
+    switch (disposition) {
+    case WebContentsAdapterClient::NewForegroundTabDisposition:
+    case WebContentsAdapterClient::NewBackgroundTabDisposition:
+        return QWebEnginePage::WebBrowserTab;
+    case WebContentsAdapterClient::NewPopupDisposition:
+        return QWebEnginePage::WebDialog;
+    case WebContentsAdapterClient::NewWindowDisposition:
+        return QWebEnginePage::WebBrowserWindow;
+    default:
+        Q_UNREACHABLE();
+    }
+}
+
 CallbackDirectory::~CallbackDirectory()
 {
     // "Cancel" pending callbacks by calling them with an invalid value.
@@ -245,7 +260,7 @@ void QWebEnginePagePrivate::adoptNewWindow(WebContentsAdapter *newWebContents, W
 {
     Q_Q(QWebEnginePage);
     Q_UNUSED(userGesture);
-    QWebEnginePage *newPage = q->createWindow(disposition == WebContentsAdapterClient::NewPopupDisposition ? QWebEnginePage::WebModalDialog : QWebEnginePage::WebBrowserWindow);
+    QWebEnginePage *newPage = q->createWindow(toWindowType(disposition));
     // Overwrite the new page's WebContents with ours.
     if (newPage && newPage->d_func() != this) {
         newPage->d_func()->adapter = newWebContents;
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
index fcec92f85..eea7b52d2 100644
--- a/src/webenginewidgets/api/qwebenginepage.h
+++ b/src/webenginewidgets/api/qwebenginepage.h
@@ -261,7 +261,8 @@ public:
 
     enum WebWindowType {
         WebBrowserWindow,
-        WebModalDialog
+        WebBrowserTab,
+        WebDialog
     };
 
     enum PermissionPolicy {
diff --git a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
index 54569bdc5..225ad5a48 100644
--- a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
@@ -279,8 +279,9 @@
 
     This enum describes the types of window that can be created by the createWindow() function.
 
-    \value WebBrowserWindow The window is a regular web browser window.
-    \value WebModalDialog The window acts as modal dialog.
+    \value WebBrowserWindow The page should be opened in a complete web browser window.
+    \value WebBrowserTab The page should be opened as a web browser tab.
+    \value WebDialog The page should be opened in a window without decoration.
 */
 
 /*!
-- 
GitLab