summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2015-03-05 05:07:04 -0800
committerSzabolcs David <davidsz@inf.u-szeged.hu>2015-03-16 11:25:30 +0000
commit6cbeac50922b72e6d6783c531611eafc95f4c91a (patch)
treeb0aae77ac69c2509880b146f6cd2dc73bb3b257a
parentd433826c7d0514228b44f0c30ec7e545a3c179bb (diff)
Support middle click navigation
When the user does a middle click on a link which originally opens a new tab (target="_blank"), the newly created RenderView is hidden, so the new tab has no visible content. We need to unhide it explicitly. This also adds background tab support for the Quick example browsers and fixes the profile mismatching warning in the case when we adopt a new tab without WebContents. Change-Id: Ia3c2e752a4784d32133cee0ff278c2849b151582 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-rw-r--r--examples/webengine/quicknanobrowser/BrowserWindow.qml7
-rw-r--r--src/core/web_contents_delegate_qt.cpp6
-rw-r--r--src/webengine/api/qquickwebengineview.cpp2
-rw-r--r--tests/quicktestbrowser/BrowserWindow.qml7
4 files changed, 19 insertions, 3 deletions
diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml
index da599bfb..a047b2be 100644
--- a/examples/webengine/quicknanobrowser/BrowserWindow.qml
+++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml
@@ -125,6 +125,7 @@ ApplicationWindow {
shortcut: "Ctrl+T"
onTriggered: {
tabs.createEmptyTab()
+ tabs.currentIndex = tabs.count - 1
addressBar.forceActiveFocus();
addressBar.selectAll();
}
@@ -284,7 +285,7 @@ ApplicationWindow {
function createEmptyTab() {
var tab = addTab("", tabComponent)
// We must do this first to make sure that tab.active gets set so that tab.item gets instantiated immediately.
- tabs.currentIndex = tabs.count - 1
+ tab.active = true
tab.title = Qt.binding(function() { return tab.item.title })
return tab
}
@@ -336,6 +337,10 @@ ApplicationWindow {
print("Warning: Blocked a popup window.")
else if (request.destination == WebEngineView.NewViewInTab) {
var tab = tabs.createEmptyTab()
+ tabs.currentIndex = tabs.count - 1
+ request.openIn(tab.item)
+ } else if (request.destination == WebEngineView.NewViewInBackgroundTab) {
+ var tab = tabs.createEmptyTab()
request.openIn(tab.item)
} else if (request.destination == WebEngineView.NewViewInDialog) {
var dialog = applicationRoot.createDialog()
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index e0fb3d7d..40951441 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -49,6 +49,7 @@
#include "web_engine_settings.h"
#include "web_engine_visited_links_manager.h"
+#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/invalidate_type.h"
#include "content/public/browser/navigation_entry.h"
@@ -60,6 +61,7 @@
#include "content/public/common/frame_navigate_params.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/web_preferences.h"
+#include "ui/events/latency_info.h"
namespace QtWebEngineCore {
@@ -115,9 +117,13 @@ void WebContentsDelegateQt::NavigationStateChanged(const content::WebContents* s
void WebContentsDelegateQt::AddNewContents(content::WebContents* source, content::WebContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, bool* was_blocked)
{
+ Q_UNUSED(source)
WebContentsAdapter *newAdapter = createWindow(new_contents, disposition, initial_pos, user_gesture);
if (was_blocked)
*was_blocked = !newAdapter;
+
+ if (content::RenderWidgetHostImpl *impl = content::RenderWidgetHostImpl::From(new_contents->GetRenderViewHost()))
+ impl->WasShown(ui::LatencyInfo());
}
void WebContentsDelegateQt::CloseContents(content::WebContents *source)
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 85d400ca..72ccb128 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -559,7 +559,7 @@ void QQuickWebEngineViewPrivate::adoptWebContents(WebContentsAdapter *webContent
return;
}
- if (browserContextAdapter() != webContents->browserContextAdapter()) {
+ if (webContents->browserContextAdapter() && browserContextAdapter() != webContents->browserContextAdapter()) {
qWarning("Can not adopt content from a different WebEngineProfile.");
return;
}
diff --git a/tests/quicktestbrowser/BrowserWindow.qml b/tests/quicktestbrowser/BrowserWindow.qml
index 45fad8d9..e173080d 100644
--- a/tests/quicktestbrowser/BrowserWindow.qml
+++ b/tests/quicktestbrowser/BrowserWindow.qml
@@ -128,6 +128,7 @@ ApplicationWindow {
shortcut: "Ctrl+T"
onTriggered: {
tabs.createEmptyTab()
+ tabs.currentIndex = tabs.count - 1
addressBar.forceActiveFocus();
addressBar.selectAll();
}
@@ -299,7 +300,7 @@ ApplicationWindow {
function createEmptyTab() {
var tab = addTab("", tabComponent)
// We must do this first to make sure that tab.active gets set so that tab.item gets instantiated immediately.
- tabs.currentIndex = tabs.count - 1
+ tab.active = true
tab.title = Qt.binding(function() { return tab.item.title })
return tab
}
@@ -375,6 +376,10 @@ ApplicationWindow {
print("Warning: Blocked a popup window.")
else if (request.destination == WebEngineView.NewViewInTab) {
var tab = tabs.createEmptyTab()
+ tabs.currentIndex = tabs.count - 1
+ request.openIn(tab.item.webView)
+ } else if (request.destination == WebEngineView.NewViewInBackgroundTab) {
+ var tab = tabs.createEmptyTab()
request.openIn(tab.item.webView)
} else if (request.destination == WebEngineView.NewViewInDialog) {
var dialog = applicationRoot.createDialog()