diff options
Diffstat (limited to 'examples/webenginewidgets/simplebrowser/webview.cpp')
-rw-r--r-- | examples/webenginewidgets/simplebrowser/webview.cpp | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/examples/webenginewidgets/simplebrowser/webview.cpp b/examples/webenginewidgets/simplebrowser/webview.cpp index e4e7f5efa..4bd5c84ac 100644 --- a/examples/webenginewidgets/simplebrowser/webview.cpp +++ b/examples/webenginewidgets/simplebrowser/webview.cpp @@ -52,15 +52,21 @@ WebView::WebView(QWidget *parent) : QWebEngineView(parent) - , m_loadProgress(0) + , m_loadProgress(100) { + connect(this, &QWebEngineView::loadStarted, [this]() { + m_loadProgress = 0; + emit favIconChanged(favIcon()); + }); connect(this, &QWebEngineView::loadProgress, [this](int progress) { m_loadProgress = progress; }); connect(this, &QWebEngineView::loadFinished, [this](bool success) { - if (!success) { - m_loadProgress = 0; - } + m_loadProgress = success ? 100 : -1; + emit favIconChanged(favIcon()); + }); + connect(this, &QWebEngineView::iconChanged, [this](const QIcon &) { + emit favIconChanged(favIcon()); }); connect(this, &QWebEngineView::renderProcessTerminated, @@ -115,21 +121,39 @@ bool WebView::isWebActionEnabled(QWebEnginePage::WebAction webAction) const return page()->action(webAction)->isEnabled(); } +QIcon WebView::favIcon() const +{ + QIcon favIcon = icon(); + if (!favIcon.isNull()) + return favIcon; + + if (m_loadProgress < 0) { + static QIcon errorIcon(QStringLiteral(":dialog-error.png")); + return errorIcon; + } else if (m_loadProgress < 100) { + static QIcon loadingIcon(QStringLiteral(":view-refresh.png")); + return loadingIcon; + } else { + static QIcon defaultIcon(QStringLiteral(":text-html.png")); + return defaultIcon; + } +} + QWebEngineView *WebView::createWindow(QWebEnginePage::WebWindowType type) { + BrowserWindow *mainWindow = qobject_cast<BrowserWindow*>(window()); + if (!mainWindow) + return nullptr; + switch (type) { case QWebEnginePage::WebBrowserTab: { - BrowserWindow *mainWindow = qobject_cast<BrowserWindow*>(window()); return mainWindow->tabWidget()->createTab(); } case QWebEnginePage::WebBrowserBackgroundTab: { - BrowserWindow *mainWindow = qobject_cast<BrowserWindow*>(window()); - return mainWindow->tabWidget()->createTab(false); + return mainWindow->tabWidget()->createBackgroundTab(); } case QWebEnginePage::WebBrowserWindow: { - BrowserWindow *mainWindow = new BrowserWindow(); - Browser::instance().addWindow(mainWindow); - return mainWindow->currentTab(); + return mainWindow->browser()->createWindow()->currentTab(); } case QWebEnginePage::WebDialog: { WebPopupWindow *popup = new WebPopupWindow(page()->profile()); |