diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-03-05 05:07:04 -0800 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-03-16 11:25:30 +0000 |
commit | 6cbeac50922b72e6d6783c531611eafc95f4c91a (patch) | |
tree | b0aae77ac69c2509880b146f6cd2dc73bb3b257a | |
parent | d433826c7d0514228b44f0c30ec7e545a3c179bb (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.qml | 7 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 6 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 2 | ||||
-rw-r--r-- | tests/quicktestbrowser/BrowserWindow.qml | 7 |
4 files changed, 19 insertions, 3 deletions
diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml index da599bfb4..a047b2be5 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 e0fb3d7d8..409514411 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 85d400caf..72ccb128a 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 45fad8d9c..e173080dd 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() |