Stop web view immediately if in background and user disables this

This commit is contained in:
Martchus 2018-10-28 14:27:25 +01:00
parent 047050ac8f
commit 900377b036
5 changed files with 28 additions and 19 deletions

View File

@ -174,7 +174,7 @@ void SyncthingApplet::setCurrentConnectionConfigIndex(int index)
reconnectRequired = m_connection.applySettings(selectedConfig);
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
if (m_webViewDlg) {
m_webViewDlg->applySettings(selectedConfig);
m_webViewDlg->applySettings(selectedConfig, false);
}
#endif
config().writeEntry<int>("selectedConfig", index);
@ -243,7 +243,7 @@ void SyncthingApplet::showWebUI()
if (!m_webViewDlg) {
m_webViewDlg = new WebViewDialog;
if (const auto *connectionConfig = currentConnectionConfig()) {
m_webViewDlg->applySettings(*connectionConfig);
m_webViewDlg->applySettings(*connectionConfig, true);
}
connect(m_webViewDlg, &WebViewDialog::destroyed, this, &SyncthingApplet::handleWebViewDeleted);
}

View File

@ -84,7 +84,8 @@ TrayWidget::TrayWidget(TrayMenu *parent)
// setup sync-all button
m_cornerFrame = new QFrame(this);
auto *cornerFrameLayout = new QHBoxLayout(m_cornerFrame);
cornerFrameLayout->setSpacing(0), cornerFrameLayout->setMargin(0);
cornerFrameLayout->setSpacing(0);
cornerFrameLayout->setMargin(0);
//cornerFrameLayout->addStretch();
m_cornerFrame->setLayout(cornerFrameLayout);
auto *viewIdButton = new QPushButton(m_cornerFrame);
@ -211,7 +212,7 @@ void TrayWidget::showWebUi()
if (!m_webViewDlg) {
m_webViewDlg = new WebViewDialog(this);
if (m_selectedConnection) {
m_webViewDlg->applySettings(*m_selectedConnection);
m_webViewDlg->applySettings(*m_selectedConnection, true);
}
connect(m_webViewDlg, &WebViewDialog::destroyed, this, &TrayWidget::handleWebViewDeleted);
}
@ -381,7 +382,7 @@ void TrayWidget::applySettings(const QString &connectionConfig)
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
// web view
if (m_webViewDlg) {
m_webViewDlg->applySettings(*m_selectedConnection);
m_webViewDlg->applySettings(*m_selectedConnection, false);
}
#endif
@ -565,7 +566,7 @@ void TrayWidget::handleConnectionSelected(QAction *connectionAction)
#endif
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
if (m_webViewDlg) {
m_webViewDlg->applySettings(*m_selectedConnection);
m_webViewDlg->applySettings(*m_selectedConnection, false);
}
#endif
}

View File

@ -191,9 +191,9 @@ void WebPage::supplyCredentials(QNetworkReply *reply, QAuthenticator *authentica
*/
void WebPage::supplyCredentials(QAuthenticator *authenticator)
{
if (m_dlg && m_dlg->settings().authEnabled) {
authenticator->setUser(m_dlg->settings().userName);
authenticator->setPassword(m_dlg->settings().password);
if (m_dlg && m_dlg->connectionSettings().authEnabled) {
authenticator->setUser(m_dlg->connectionSettings().userName);
authenticator->setPassword(m_dlg->connectionSettings().password);
}
}

View File

@ -28,7 +28,7 @@ WebViewDialog::WebViewDialog(QWidget *parent)
#if defined(SYNCTHINGWIDGETS_USE_WEBENGINE)
m_profile = new QWebEngineProfile(objectName(), this);
m_profile->setRequestInterceptor(new WebViewInterceptor(m_settings, m_profile));
m_profile->setRequestInterceptor(new WebViewInterceptor(m_connectionSettings, m_profile));
m_view->setPage(new WebPage(m_profile, this, m_view));
#else
m_view->setPage(new WebPage(this, m_view));
@ -55,13 +55,21 @@ QtGui::WebViewDialog::~WebViewDialog()
Settings::values().webView.geometry = saveGeometry();
}
void QtGui::WebViewDialog::applySettings(const Data::SyncthingConnectionSettings &connectionSettings)
void QtGui::WebViewDialog::applySettings(const Data::SyncthingConnectionSettings &connectionSettings, bool aboutToShow)
{
m_settings = connectionSettings;
if (!WebPage::isSamePage(m_view->url(), connectionSettings.syncthingUrl)) {
// delete the web view if currently hidden and the configuration to keep it running in the backround isn't enabled
const auto &settings(Settings::values());
if (!aboutToShow && !settings.webView.keepRunning && isHidden()) {
deleteLater();
return;
}
// apply settings to the view
m_connectionSettings = connectionSettings;
if (!WebPage::isSamePage(m_view->url(), connectionSettings.syncthingUrl)) { // prevent reload if the URL remains the same
m_view->setUrl(connectionSettings.syncthingUrl);
}
m_view->setZoomFactor(Settings::values().webView.zoomFactor);
m_view->setZoomFactor(settings.webView.zoomFactor);
}
#if defined(SYNCTHINGWIDGETS_USE_WEBKIT)

View File

@ -24,8 +24,8 @@ public:
~WebViewDialog() override;
public slots:
void applySettings(const Data::SyncthingConnectionSettings &connectionSettings);
const Data::SyncthingConnectionSettings &settings() const;
void applySettings(const Data::SyncthingConnectionSettings &connectionSettings, bool aboutToShow);
const Data::SyncthingConnectionSettings &connectionSettings() const;
#if defined(SYNCTHINGWIDGETS_USE_WEBKIT)
bool isModalVisible() const;
#endif
@ -40,15 +40,15 @@ protected:
private:
SYNCTHINGWIDGETS_WEB_VIEW *m_view;
Data::SyncthingConnectionSettings m_settings;
Data::SyncthingConnectionSettings m_connectionSettings;
#if defined(SYNCTHINGWIDGETS_USE_WEBENGINE)
QWebEngineProfile *m_profile;
#endif
};
inline const Data::SyncthingConnectionSettings &WebViewDialog::settings() const
inline const Data::SyncthingConnectionSettings &WebViewDialog::connectionSettings() const
{
return m_settings;
return m_connectionSettings;
}
} // namespace QtGui