From 0bceb501fdfc76ab8cc2473420d5e661123541df Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Wed, 23 Oct 2013 19:09:28 +0200 Subject: Give the demo browser prettier popups Change-Id: Ia8052bffc7be18c4d8f81c3a89ac4a64b1c589af Reviewed-by: Zeno Albisser --- examples/widgets/browser/webview.cpp | 60 +++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 4 deletions(-) (limited to 'examples/widgets/browser') 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) -- cgit v1.2.3