summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2013-10-23 19:09:28 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-29 14:27:53 +0100
commit0bceb501fdfc76ab8cc2473420d5e661123541df (patch)
tree0f73b8b38096d5835ef80b5a2df0ac291d8f1eb1 /examples
parent59901392ff525e91d9bd19c3fa7340685fd8c51c (diff)
Give the demo browser prettier popups
Change-Id: Ia8052bffc7be18c4d8f81c3a89ac4a64b1c589af Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'examples')
-rw-r--r--examples/widgets/browser/webview.cpp60
1 files changed, 56 insertions, 4 deletions
diff --git a/examples/widgets/browser/webview.cpp b/examples/widgets/browser/webview.cpp
index 18beaf65e..7eb08d6a3 100644
--- a/examples/widgets/browser/webview.cpp
+++ b/examples/widgets/browser/webview.cpp
@@ -118,18 +118,70 @@ bool WebPage::acceptNavigationRequest(QWebEngineFrame *frame, const QNetworkRequ
return QWebEnginePage::acceptNavigationRequest(frame, request, type);
}
+class PopupWindow : public QWidget {
+ Q_OBJECT
+public:
+ PopupWindow()
+ : m_addressBar(new QLineEdit(this))
+ , m_view(new WebView(this))
+ {
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->setMargin(0);
+ setLayout(layout);
+ layout->addWidget(m_addressBar);
+ layout->addWidget(m_view);
+ m_view->setFocus();
+
+ connect(m_view, &WebView::titleChanged, this, &QWidget::setWindowTitle);
+ connect(m_view, &WebView::urlChanged, this, &PopupWindow::setUrl);
+ connect(page(), &WebPage::geometryChangeRequested, this, &PopupWindow::adjustGeometry);
+ connect(page(), &WebPage::windowCloseRequested, this, &QWidget::close);
+ }
+
+ QWebEnginePage* page() const { return m_view->page(); }
+
+private Q_SLOTS:
+ void setUrl(const QUrl &url)
+ {
+ m_addressBar->setText(url.toString());
+ }
+
+ void adjustGeometry(const QRect &newGeometry)
+ {
+ const int x1 = frameGeometry().left() - geometry().left();
+ const int y1 = frameGeometry().top() - geometry().top();
+ const int x2 = frameGeometry().right() - geometry().right();
+ const int y2 = frameGeometry().bottom() - geometry().bottom();
+
+ setGeometry(newGeometry.adjusted(x1, y1 - m_addressBar->height(), x2, y2));
+ }
+
+private:
+ QLineEdit *m_addressBar;
+ WebView *m_view;
+
+};
+
+#include "webview.moc"
+
QWebEnginePage *WebPage::createWindow(QWebEnginePage::WebWindowType type)
{
- Q_UNUSED(type);
if (m_keyboardModifiers & Qt::ControlModifier || m_pressedButtons == Qt::MidButton)
m_openInNewTab = true;
if (m_openInNewTab) {
m_openInNewTab = false;
return mainWindow()->tabWidget()->newTab()->page();
}
- BrowserApplication::instance()->newMainWindow();
- BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
- return mainWindow->currentTab()->page();
+ if (type == QWebEnginePage::WebBrowserWindow) {
+ BrowserApplication::instance()->newMainWindow();
+ BrowserMainWindow *mainWindow = BrowserApplication::instance()->mainWindow();
+ return mainWindow->currentTab()->page();
+ } else {
+ PopupWindow *popup = new PopupWindow;
+ popup->setAttribute(Qt::WA_DeleteOnClose);
+ popup->show();
+ return popup->page();
+ }
}
#if !defined(QT_NO_UITOOLS)