diff --git a/fileitemactionplugin/CMakeLists.txt b/fileitemactionplugin/CMakeLists.txt index 22783a3..6253a3a 100644 --- a/fileitemactionplugin/CMakeLists.txt +++ b/fileitemactionplugin/CMakeLists.txt @@ -19,7 +19,7 @@ find_package(${PACKAGE_NAMESPACE_PREFIX}c++utilities${CONFIGURATION_PACKAGE_SUFF list(APPEND CMAKE_MODULE_PATH ${CPP_UTILITIES_MODULE_DIRS}) # find qtutilities -find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.0.0 REQUIRED) +find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.7.0 REQUIRED) use_qt_utilities() # find backend libraries diff --git a/fileitemactionplugin/syncthingfileitemaction.cpp b/fileitemactionplugin/syncthingfileitemaction.cpp index 47b9e8f..7280362 100644 --- a/fileitemactionplugin/syncthingfileitemaction.cpp +++ b/fileitemactionplugin/syncthingfileitemaction.cpp @@ -5,11 +5,14 @@ #include +#include + #include #include #include #include +#include #include #include @@ -42,6 +45,7 @@ SyncthingFileItemActionStaticData SyncthingFileItemAction::s_data; SyncthingFileItemAction::SyncthingFileItemAction(QObject *parent, const QVariantList &) : KAbstractFileItemActionPlugin(parent) + , m_parentWidget(nullptr) { s_data.initialize(); } @@ -59,6 +63,11 @@ QList SyncthingFileItemAction::actions(const KFileItemListProperties return topLevelActions; } + if ((m_parentWidget = parentWidget)) { + s_data.applyBrightCustomColorsSetting(QtUtilities::isPaletteDark(parentWidget->palette())); + parentWidget->installEventFilter(this); + } + topLevelActions << new SyncthingMenuAction(fileItemInfo, subActions, this); return topLevelActions; } @@ -248,11 +257,6 @@ QList SyncthingFileItemAction::createActions(const KFileItemListPrope actions << errorAction; // add config items - QAction *const brightCustomColorsAction = new QAction(QIcon::fromTheme(QStringLiteral("color-profile")), tr("Use bright custom colors"), parent); - brightCustomColorsAction->setCheckable(true); - brightCustomColorsAction->setChecked(data.isUsingBrightCustomColors()); - connect(brightCustomColorsAction, &QAction::triggered, &data, &SyncthingFileItemActionStaticData::handleBrightCustomColorsChanged); - actions << brightCustomColorsAction; QAction *const configFileAction = new QAction(QIcon::fromTheme(QStringLiteral("settings-configure")), tr("Select Syncthing config ..."), parent); connect(configFileAction, &QAction::triggered, &data, &SyncthingFileItemActionStaticData::selectSyncthingConfig); actions << configFileAction; @@ -265,4 +269,12 @@ QList SyncthingFileItemAction::createActions(const KFileItemListPrope return actions; } +bool SyncthingFileItemAction::eventFilter(QObject *object, QEvent *event) +{ + if (object == m_parentWidget && event->type() == QEvent::PaletteChange) { + s_data.handlePaletteChanged(m_parentWidget->palette()); + } + return false; +} + #include diff --git a/fileitemactionplugin/syncthingfileitemaction.h b/fileitemactionplugin/syncthingfileitemaction.h index df2954e..c0956fe 100644 --- a/fileitemactionplugin/syncthingfileitemaction.h +++ b/fileitemactionplugin/syncthingfileitemaction.h @@ -20,8 +20,12 @@ public: static QList createActions(const KFileItemListProperties &fileItemInfo, QObject *parent); static SyncthingFileItemActionStaticData &staticData(); +protected: + bool eventFilter(QObject *object, QEvent *event) override; + private: static SyncthingFileItemActionStaticData s_data; + QWidget *m_parentWidget; }; inline SyncthingFileItemActionStaticData &SyncthingFileItemAction::staticData() diff --git a/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp b/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp index 8a908ba..5cd660a 100644 --- a/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp +++ b/fileitemactionplugin/syncthingfileitemactionstaticdata.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include @@ -29,8 +30,7 @@ using namespace QtUtilities; using namespace Data; SyncthingFileItemActionStaticData::SyncthingFileItemActionStaticData() - : m_useBrightCustomColors(false) - , m_initialized(false) + : m_initialized(false) { } @@ -59,10 +59,6 @@ void SyncthingFileItemActionStaticData::initialize() }(); applySyncthingConfiguration(m_configFilePath, settingsFile.value(QStringLiteral("syncthingApiKey")).toString(), true); - // apply icon settings - applyBrightCustomColorsSetting( - m_useBrightCustomColors = settingsFile.value(QStringLiteral("useBrightCustomColors"), m_useBrightCustomColors).toBool(), true); - // prevent unnecessary API calls (for the purpose of the context menu) m_connection.disablePolling(); @@ -123,9 +119,9 @@ void SyncthingFileItemActionStaticData::selectSyncthingConfig() } } -void SyncthingFileItemActionStaticData::handleBrightCustomColorsChanged() +void SyncthingFileItemActionStaticData::handlePaletteChanged(const QPalette &palette) { - applyBrightCustomColorsSetting(qobject_cast(QObject::sender())->isChecked(), false); + applyBrightCustomColorsSetting(isPaletteDark(palette)); } void SyncthingFileItemActionStaticData::appendNoteToError(QString &errorMessage, const QString &newSyncthingConfigFilePath) const @@ -204,7 +200,7 @@ bool SyncthingFileItemActionStaticData::applySyncthingConfiguration( return true; } -void SyncthingFileItemActionStaticData::applyBrightCustomColorsSetting(bool useBrightCustomColors, bool skipSavingConfig) +void SyncthingFileItemActionStaticData::applyBrightCustomColorsSetting(bool useBrightCustomColors) { if (useBrightCustomColors) { static const auto settings = StatusIconSettings(StatusIconSettings::DarkTheme()); @@ -213,12 +209,6 @@ void SyncthingFileItemActionStaticData::applyBrightCustomColorsSetting(bool useB static const auto settings = StatusIconSettings(StatusIconSettings::BrightTheme()); IconManager::instance().applySettings(&settings); } - - // save new config persistently - if (!skipSavingConfig) { - QSettings settings(QSettings::IniFormat, QSettings::UserScope, QStringLiteral(PROJECT_NAME)); - settings.setValue(QStringLiteral("useBrightCustomColors"), m_useBrightCustomColors = useBrightCustomColors); - } } void SyncthingFileItemActionStaticData::setCurrentError(const QString ¤tError) diff --git a/fileitemactionplugin/syncthingfileitemactionstaticdata.h b/fileitemactionplugin/syncthingfileitemactionstaticdata.h index f240450..03b034d 100644 --- a/fileitemactionplugin/syncthingfileitemactionstaticdata.h +++ b/fileitemactionplugin/syncthingfileitemactionstaticdata.h @@ -12,7 +12,6 @@ class SyncthingFileItemActionStaticData : public QObject { Q_OBJECT Q_PROPERTY(QString configPath READ configPath) - Q_PROPERTY(bool useBrightCustomColors READ isUsingBrightCustomColors) Q_PROPERTY(QString currentError READ currentError WRITE setCurrentError NOTIFY currentErrorChanged RESET clearCurrentError) Q_PROPERTY(bool hasError READ hasError NOTIFY hasErrorChanged) Q_PROPERTY(bool initialized READ isInitialized) @@ -22,7 +21,6 @@ public: Data::SyncthingConnection &connection(); const Data::SyncthingConnection &connection() const; const QString &configPath() const; - bool isUsingBrightCustomColors() const; const QString ¤tError() const; bool hasError() const; bool isInitialized() const; @@ -30,13 +28,13 @@ public: public Q_SLOTS: void initialize(); bool applySyncthingConfiguration(const QString &syncthingConfigFilePath, const QString &syncthingApiKey, bool skipSavingConfig); - void applyBrightCustomColorsSetting(bool useBrightCustomColors, bool skipSavingConfig); + void applyBrightCustomColorsSetting(bool useBrightCustomColors); void logConnectionStatus(); void logConnectionError(const QString &errorMessage, Data::SyncthingErrorCategory errorCategory); void rescanDir(const QString &dirId, const QString &relpath = QString()); static void showAboutDialog(); void selectSyncthingConfig(); - void handleBrightCustomColorsChanged(); + void handlePaletteChanged(const QPalette &palette); void setCurrentError(const QString ¤tError); void clearCurrentError(); @@ -50,7 +48,6 @@ private: Data::SyncthingConnection m_connection; QString m_configFilePath; QString m_currentError; - bool m_useBrightCustomColors; bool m_initialized; }; @@ -69,11 +66,6 @@ inline const QString &SyncthingFileItemActionStaticData::configPath() const return m_configFilePath; } -inline bool SyncthingFileItemActionStaticData::isUsingBrightCustomColors() const -{ - return m_useBrightCustomColors; -} - inline const QString &SyncthingFileItemActionStaticData::currentError() const { return m_currentError; diff --git a/fileitemactionplugin/translations/syncthingfileitemaction_cs_CZ.ts b/fileitemactionplugin/translations/syncthingfileitemaction_cs_CZ.ts index 7adc9ad..4c7ba75 100644 --- a/fileitemactionplugin/translations/syncthingfileitemaction_cs_CZ.ts +++ b/fileitemactionplugin/translations/syncthingfileitemaction_cs_CZ.ts @@ -50,71 +50,66 @@ SyncthingFileItemAction - + Rescan selected items Znovu prohledat označené položky - + Rescan selected directories Znovu prohledat označené adresáře - + Resume selected directories Pokračovat označené adresáře - - - + + + Rescan "%1" Znovu prohledat „%“ - + Pause selected directories Pozastavit označené adresáře - + Rescan containing directories Znovu prohledat obsažené adresáře - + Resume containing directories Pokračovat obsažené adresáře - - + + Resume "%1" Pokračovat „%1“ - + Pause containing directories Pozastavit obsažené adresáře - - + + Pause "%1" Pozastavit „%1“ - - Use bright custom colors - - - - + Select Syncthing config ... Vybrat nastavení pro Syncthing… - + About O aplikaci @@ -122,52 +117,52 @@ SyncthingFileItemActionStaticData - + Syncthing connection error Chyba spojení se Syncthing - + About O aplikaci - + Select Syncthing config file Vybrat soubor s nastaveními pro Syncthing - + Syncthing config file can not be automatically located Soubor s nastaveními pro Syncthing se nepodařilo nalézt automaticky - + Unable to load Syncthing config from "%1" Nedaří se načíst nastavení pro Syncthing z „%1“ - + Syncthing config from "%1" does not contain GUI address. Nastavení pro Syncthing z „%1“ neobsahují adresu GUI. - + Enter API key Zadejte klíč k API - + The selected config file does not contain an API key. Please enter the API key manually: Zvolený soubor s nastaveními neobsahuje klíč k API. Zadejte klíč ručně: - + No API key supplied for "%1". Neposkytnut žádný klíč k API pro „%1“. - + (still using config from "%1") (pořád je používáno nastavení z „%1“) diff --git a/fileitemactionplugin/translations/syncthingfileitemaction_de_DE.ts b/fileitemactionplugin/translations/syncthingfileitemaction_de_DE.ts index e81f170..f73095e 100644 --- a/fileitemactionplugin/translations/syncthingfileitemaction_de_DE.ts +++ b/fileitemactionplugin/translations/syncthingfileitemaction_de_DE.ts @@ -50,71 +50,70 @@ SyncthingFileItemAction - + Rescan selected items Auswahl neu scannen - + Rescan selected directories Ausgewählte Verzeichnisse neu scannen - + Resume selected directories Ausgewählte verzeichnisse fortsetzen - - - + + + Rescan "%1" "%1" neu scannen - + Pause selected directories Ausgewählte Verzeichnisse pausieren - + Rescan containing directories Beinhaltendes Verzeichnis neu scannen - + Resume containing directories Beinhaltendes Verzeichnis fortsetzen - - + + Resume "%1" "%1" fortsetzen (in "%1") - + Pause containing directories Beinhaltendes Verzeichnis pausieren - - + + Pause "%1" "%1" pausieren (in "%1") - Use bright custom colors - Helle Farben verwenden + Helle Farben verwenden - + Select Syncthing config ... Syncthing-Konfiguration wählen ... - + About Über @@ -122,52 +121,52 @@ SyncthingFileItemActionStaticData - + Syncthing connection error Fehler beim Verbinden mit Syncthing - + About Über - + Select Syncthing config file Syncthing-Konfigurationsdatei auswählen - + Syncthing config file can not be automatically located Syncthing-Konfigurationsdatei kann nicht automatisch gefunden werden - + Unable to load Syncthing config from "%1" Fehler beim Laden der Syncthing-Konfiguration von "%1" - + Syncthing config from "%1" does not contain GUI address. Die Syncthing-Konfiguration "%1" beinhaltet keine GUI-Adresse. - + Enter API key API-Schlüssel eingeben - + The selected config file does not contain an API key. Please enter the API key manually: Die gewählte Konfiguration enthält keinen API-Schlüssel. Gib den API-Schlüssel manuell ein: - + No API key supplied for "%1". Kein API-Schlüssel für die Konfiguration "%1" angegeben. - + (still using config from "%1") (verwende weiterhin "%1") diff --git a/fileitemactionplugin/translations/syncthingfileitemaction_en_US.ts b/fileitemactionplugin/translations/syncthingfileitemaction_en_US.ts index 4cad671..7899d20 100644 --- a/fileitemactionplugin/translations/syncthingfileitemaction_en_US.ts +++ b/fileitemactionplugin/translations/syncthingfileitemaction_en_US.ts @@ -50,71 +50,66 @@ SyncthingFileItemAction - + About - + Rescan selected items - + Rescan selected directories - - - + + + Rescan "%1" - + Resume selected directories - + Pause selected directories - + Rescan containing directories - + Resume containing directories - - + + Resume "%1" - + Pause containing directories - - + + Pause "%1" - - Use bright custom colors - - - - + Select Syncthing config ... @@ -122,52 +117,52 @@ SyncthingFileItemActionStaticData - + Syncthing connection error - + About - + Select Syncthing config file - + Syncthing config file can not be automatically located - + Unable to load Syncthing config from "%1" - + Syncthing config from "%1" does not contain GUI address. - + Enter API key - + The selected config file does not contain an API key. Please enter the API key manually: - + No API key supplied for "%1". - + (still using config from "%1") diff --git a/fileitemactionplugin/translations/syncthingfileitemaction_zh_CN.ts b/fileitemactionplugin/translations/syncthingfileitemaction_zh_CN.ts index 358e1fe..1d1549d 100644 --- a/fileitemactionplugin/translations/syncthingfileitemaction_zh_CN.ts +++ b/fileitemactionplugin/translations/syncthingfileitemaction_zh_CN.ts @@ -49,71 +49,70 @@ SyncthingFileItemAction - + Rescan selected items 重新扫描选定的项目 - - - + + + Rescan "%1" 重新扫描 "%1" - + Rescan selected directories 重新扫描选定的目录 - - + + Resume "%1" 恢复 "%1" - + Resume selected directories 恢复选定的目录 - - + + Pause "%1" 暂停 "%1" - + Pause selected directories 暂停选定的目录 - + Rescan containing directories 重新扫描包含的目录 - + Resume containing directories 恢复包含的目录 - + Pause containing directories 暂停包含的目录 - Use bright custom colors - 使用明亮的自定义颜色 + 使用明亮的自定义颜色 - + Select Syncthing config ... 选择 Syncthing 配置 ... - + About 关于 @@ -121,52 +120,52 @@ SyncthingFileItemActionStaticData - + Syncthing connection error Syncthing 连接错误 - + About 关于 - + Select Syncthing config file 选择 Syncthing 配置文件 - + (still using config from "%1") (仍然使用来自 "%1" 的配置) - + Syncthing config file can not be automatically located Syncthing 配置文件不能自动定位 - + Unable to load Syncthing config from "%1" 无法从 "%1" 加载 Syncthing 配置 - + Syncthing config from "%1" does not contain GUI address. "%1" 的 Syncthing 配置不包含 GUI 地址。 - + Enter API key 输入 API 密钥 - + The selected config file does not contain an API key. Please enter the API key manually: 所选的配置文件不包含 API 密钥。请手动输入 API 密钥: - + No API key supplied for "%1". 没有为 "%1 " 提供 API 密钥。