diff --git a/src/librssguard/gui/basetoolbar.cpp b/src/librssguard/gui/basetoolbar.cpp index d203b0035..c98880400 100644 --- a/src/librssguard/gui/basetoolbar.cpp +++ b/src/librssguard/gui/basetoolbar.cpp @@ -21,7 +21,7 @@ BaseToolBar::~BaseToolBar() { } void BaseBar::loadSavedActions() { - loadSpecificActions(getSpecificActions(savedActions())); + loadSpecificActions(getSpecificActions(savedActions()), true); } QAction* BaseBar::findMatchingAction(const QString& action, const QList& actions) const { diff --git a/src/librssguard/gui/basetoolbar.h b/src/librssguard/gui/basetoolbar.h index 5e408acce..3ca59a727 100644 --- a/src/librssguard/gui/basetoolbar.h +++ b/src/librssguard/gui/basetoolbar.h @@ -26,7 +26,7 @@ class BaseBar { // Loads the toolbar state from settings. virtual void loadSavedActions(); virtual QList getSpecificActions(const QStringList& actions) = 0; - virtual void loadSpecificActions(const QList& actions) = 0; + virtual void loadSpecificActions(const QList& actions, bool initial_load = false) = 0; protected: QAction* findMatchingAction(const QString& action, const QList& actions) const; diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index 27f99cff0..0d63fe6b0 100755 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -299,7 +299,6 @@ void FormMain::updateRecycleBinMenu() { root_menu->setIcon(activated_root->icon()); root_menu->setToolTip(activated_root->description()); RecycleBin* bin = activated_root->recycleBin(); - QList context_menu; if (bin == nullptr) { @@ -751,6 +750,7 @@ void FormMain::createConnections() { void FormMain::backupDatabaseSettings() { QScopedPointer form(new FormBackupDatabaseSettings(this)); + form->exec(); } @@ -796,6 +796,7 @@ void FormMain::showAddAccountDialog() { QScopedPointer form_update(new FormAddAccount(qApp->feedReader()->feedServices(), qApp->feedReader()->feedsModel(), this)); + form_update->exec(); } diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp index 99d5dae9f..f606f21e5 100644 --- a/src/librssguard/gui/feedmessageviewer.cpp +++ b/src/librssguard/gui/feedmessageviewer.cpp @@ -222,8 +222,6 @@ void FeedMessageViewer::initialize() { m_toolBarMessages->setFloatable(false); m_toolBarMessages->setMovable(false); m_toolBarMessages->setAllowedAreas(Qt::TopToolBarArea); - m_toolBarFeeds->loadSavedActions(); - m_toolBarMessages->loadSavedActions(); m_messagesBrowser->clear(); // Now refresh visual setup. diff --git a/src/librssguard/gui/feedstoolbar.cpp b/src/librssguard/gui/feedstoolbar.cpp index 392924198..e14fec005 100644 --- a/src/librssguard/gui/feedstoolbar.cpp +++ b/src/librssguard/gui/feedstoolbar.cpp @@ -66,7 +66,9 @@ QList FeedsToolBar::getSpecificActions(const QStringList& actions) { return spec_actions; } -void FeedsToolBar::loadSpecificActions(const QList& actions) { +void FeedsToolBar::loadSpecificActions(const QList& actions, bool initial_load) { + Q_UNUSED(initial_load) + clear(); for (QAction* act : actions) { diff --git a/src/librssguard/gui/feedstoolbar.h b/src/librssguard/gui/feedstoolbar.h index 96d8065de..3599e6085 100644 --- a/src/librssguard/gui/feedstoolbar.h +++ b/src/librssguard/gui/feedstoolbar.h @@ -16,7 +16,7 @@ class FeedsToolBar : public BaseToolBar { void saveChangeableActions(const QStringList& actions); QList getSpecificActions(const QStringList& actions); - void loadSpecificActions(const QList& actions); + void loadSpecificActions(const QList& actions, bool initial_load = false); QStringList defaultActions() const; QStringList savedActions() const; diff --git a/src/librssguard/gui/messagestoolbar.cpp b/src/librssguard/gui/messagestoolbar.cpp index c620a3c96..74e01f4af 100644 --- a/src/librssguard/gui/messagestoolbar.cpp +++ b/src/librssguard/gui/messagestoolbar.cpp @@ -20,6 +20,7 @@ MessagesToolBar::MessagesToolBar(const QString& title, QWidget* parent) QList MessagesToolBar::availableActions() const { QList available_actions = qApp->userActions(); + available_actions.append(m_actionSearchMessages); available_actions.append(m_actionMessageHighlighter); return available_actions; @@ -84,7 +85,9 @@ QList MessagesToolBar::getSpecificActions(const QStringList& actions) return spec_actions; } -void MessagesToolBar::loadSpecificActions(const QList& actions) { +void MessagesToolBar::loadSpecificActions(const QList& actions, bool initial_load) { + Q_UNUSED(initial_load) + clear(); foreach (QAction* act, actions) { diff --git a/src/librssguard/gui/messagestoolbar.h b/src/librssguard/gui/messagestoolbar.h index 8f17be008..83a9489ef 100644 --- a/src/librssguard/gui/messagestoolbar.h +++ b/src/librssguard/gui/messagestoolbar.h @@ -8,8 +8,11 @@ #include "core/messagesmodel.h" class MessagesSearchLineEdit; + class QWidgetAction; + class QToolButton; + class QMenu; class MessagesToolBar : public BaseToolBar { @@ -30,7 +33,7 @@ class MessagesToolBar : public BaseToolBar { // Loads actions as specified by external actions list. // NOTE: This is used primarily for reloading actions // when they are changed from settings. - void loadSpecificActions(const QList& actions); + void loadSpecificActions(const QList& actions, bool initial_load = false); QList getSpecificActions(const QStringList& actions); diff --git a/src/librssguard/gui/statusbar.cpp b/src/librssguard/gui/statusbar.cpp index d85712bfc..ac08d2f42 100644 --- a/src/librssguard/gui/statusbar.cpp +++ b/src/librssguard/gui/statusbar.cpp @@ -83,7 +83,6 @@ QStringList StatusBar::savedActions() const { QList StatusBar::getSpecificActions(const QStringList& actions) { bool progress_visible = this->actions().contains(m_barProgressFeedsAction) && m_lblProgressFeeds->isVisible() && m_barProgressFeeds->isVisible(); - QList available_actions = availableActions(); QList spec_actions; @@ -162,7 +161,7 @@ QList StatusBar::getSpecificActions(const QStringList& actions) { return spec_actions; } -void StatusBar::loadSpecificActions(const QList& actions) { +void StatusBar::loadSpecificActions(const QList& actions, bool initial_load) { foreach (QAction* act, this->actions()) { QWidget* widget = act->property("widget").isValid() ? static_cast(act->property("widget").value()) : nullptr; @@ -171,10 +170,13 @@ void StatusBar::loadSpecificActions(const QList& actions) { } } - removeWidget(m_barProgressDownload); - removeWidget(m_barProgressFeeds); - removeWidget(m_lblProgressDownload); - removeWidget(m_lblProgressFeeds); + if (!initial_load) { + removeWidget(m_barProgressDownload); + removeWidget(m_barProgressFeeds); + removeWidget(m_lblProgressDownload); + removeWidget(m_lblProgressFeeds); + } + clear(); foreach (QAction* act, actions) { diff --git a/src/librssguard/gui/statusbar.h b/src/librssguard/gui/statusbar.h index 3bedf3d46..f1e97ae61 100644 --- a/src/librssguard/gui/statusbar.h +++ b/src/librssguard/gui/statusbar.h @@ -8,8 +8,11 @@ #include "gui/basetoolbar.h" class QProgressBar; + class PlainToolButton; + class QLabel; + class Mutex; class StatusBar : public QStatusBar, public BaseBar { @@ -25,7 +28,7 @@ class StatusBar : public QStatusBar, public BaseBar { QStringList defaultActions() const; QStringList savedActions() const; QList getSpecificActions(const QStringList& actions); - void loadSpecificActions(const QList& actions); + void loadSpecificActions(const QList& actions, bool initial_load = false); public slots: void showProgressFeeds(int progress, const QString& label); diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index ac16f23a4..a4330bf34 100755 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #endif Application::Application(const QString& id, int& argc, char** argv) @@ -68,10 +69,22 @@ Application::Application(const QString& id, int& argc, char** argv) connect(this, &Application::saveStateRequest, this, &Application::onSaveState); #if defined(USE_WEBENGINE) + QWebEngineUrlScheme url_scheme(APP_LOW_NAME); + + url_scheme.setDefaultPort(QWebEngineUrlScheme::SpecialPort::PortUnspecified); + url_scheme.setSyntax(QWebEngineUrlScheme::Syntax::Host); + url_scheme.setFlags(QWebEngineUrlScheme::Flag::LocalScheme | + QWebEngineUrlScheme::Flag::LocalAccessAllowed | + QWebEngineUrlScheme::Flag::ServiceWorkersAllowed | + QWebEngineUrlScheme::Flag::ContentSecurityPolicyIgnored); + + QWebEngineUrlScheme::registerScheme(url_scheme); + connect(QWebEngineProfile::defaultProfile(), &QWebEngineProfile::downloadRequested, this, &Application::downloadRequested); QWebEngineProfile::defaultProfile()->setRequestInterceptor(m_urlInterceptor); m_urlInterceptor->loadSettings(); + QWebEngineProfile::defaultProfile()->installUrlSchemeHandler(QByteArray(APP_LOW_NAME), new RssGuardSchemeHandler(QWebEngineProfile::defaultProfile())); #endif