Use colors from Plasma theme in Plasmoid

One might configure a light color theme for applications and a dark theme
for Plasma (or vice versa) so this is an important difference, see
https://github.com/Martchus/syncthingtray/issues/126.
This commit is contained in:
Martchus 2022-02-02 22:38:36 +01:00
parent c5c34bd83c
commit 3e38a9917e
6 changed files with 56 additions and 19 deletions

View File

@ -10,7 +10,7 @@ set(META_APP_CATEGORIES "Network;FileTransfer")
set(META_GUI_OPTIONAL false)
set(META_VERSION_MAJOR 1)
set(META_VERSION_MINOR 1)
set(META_VERSION_PATCH 15)
set(META_VERSION_PATCH 16)
set(META_VERSION_EXACT_SONAME ON)
set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON)

View File

@ -300,30 +300,32 @@ ForkAwesomeIcons::ForkAwesomeIcons(QtForkAwesome::Renderer &renderer, const QCol
{
}
IconManager::IconManager()
IconManager::IconManager(const QPalette *palette)
: m_statusIcons()
, m_trayIcons(m_statusIcons)
, m_commonForkAwesomeIcons(m_forkAwesomeRenderer, QGuiApplication::palette().color(QPalette::Normal, QPalette::Text), QSize(64, 64))
, m_commonForkAwesomeIcons(m_forkAwesomeRenderer, (palette ? *palette : QGuiApplication::palette()).color(QPalette::Normal, QPalette::Text), QSize(64, 64))
{
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
QObject::connect(qGuiApp, &QGuiApplication::paletteChanged, this, &IconManager::handlePaletteChanged);
if (!palette) {
QObject::connect(qGuiApp, &QGuiApplication::paletteChanged, this, &IconManager::setPalette);
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
}
void IconManager::handlePaletteChanged(const QPalette &pal)
void IconManager::setPalette(const QPalette &palette)
{
emit forkAwesomeIconsChanged(
m_commonForkAwesomeIcons = ForkAwesomeIcons(m_forkAwesomeRenderer, pal.color(QPalette::Normal, QPalette::Text), QSize(64, 64)));
m_commonForkAwesomeIcons = ForkAwesomeIcons(m_forkAwesomeRenderer, palette.color(QPalette::Normal, QPalette::Text), QSize(64, 64)));
}
IconManager &IconManager::instance()
IconManager &IconManager::instance(const QPalette *palette)
{
static IconManager iconManager;
static auto iconManager = IconManager(palette);
return iconManager;
}

View File

@ -143,7 +143,7 @@ struct LIB_SYNCTHING_MODEL_EXPORT ForkAwesomeIcons {
class LIB_SYNCTHING_MODEL_EXPORT IconManager : public QObject {
Q_OBJECT
public:
static IconManager &instance();
static IconManager &instance(const QPalette *palette = nullptr);
void applySettings(const StatusIconSettings *statusIconSettings = nullptr, const StatusIconSettings *trayIconSettings = nullptr);
const StatusIcons &statusIcons() const;
@ -151,15 +151,15 @@ public:
QtForkAwesome::Renderer &forkAwesomeRenderer();
const ForkAwesomeIcons &commonForkAwesomeIcons() const;
Q_SIGNALS:
void statusIconsChanged(const StatusIcons &newStatusIcons, const StatusIcons &newTrayIcons);
void forkAwesomeIconsChanged(const ForkAwesomeIcons &newForkAwesomeIcons);
public Q_SLOTS:
void setPalette(const QPalette &palette);
private Q_SLOTS:
void handlePaletteChanged(const QPalette &pal);
Q_SIGNALS:
void statusIconsChanged(const Data::StatusIcons &newStatusIcons, const Data::StatusIcons &newTrayIcons);
void forkAwesomeIconsChanged(const Data::ForkAwesomeIcons &newForkAwesomeIcons);
private:
IconManager();
explicit IconManager(const QPalette *palette = nullptr);
StatusIcons m_statusIcons;
StatusIcons m_trayIcons;

View File

@ -12,7 +12,7 @@ find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFI
use_qt_utilities()
# find qtforkawesomequickimageprovider
find_package(${PACKAGE_NAMESPACE_PREFIX}qtquickforkawesome${CONFIGURATION_PACKAGE_SUFFIX_QTFORKAWESOME} 0.0.1 REQUIRED)
find_package(${PACKAGE_NAMESPACE_PREFIX}qtquickforkawesome${CONFIGURATION_PACKAGE_SUFFIX_QTFORKAWESOME} 0.0.3 REQUIRED)
use_qt_quick_fork_awesome()
# check whether qtutilities supports DBus notifications

View File

@ -31,6 +31,8 @@
#include <KConfigGroup>
#include <Plasma/Theme>
#include <QClipboard>
#include <QDesktopServices>
#include <QGuiApplication>
@ -51,6 +53,8 @@ namespace Plasmoid {
SyncthingApplet::SyncthingApplet(QObject *parent, const QVariantList &data)
: Applet(parent, data)
, m_palette(m_theme.palette())
, m_iconManager(IconManager::instance(&m_palette))
, m_aboutDlg(nullptr)
, m_connection()
, m_notifier(m_connection)
@ -61,6 +65,7 @@ SyncthingApplet::SyncthingApplet(QObject *parent, const QVariantList &data)
, m_downloadModel(m_connection)
, m_recentChangesModel(m_connection)
, m_settingsDlg(nullptr)
, m_imageProvider(nullptr)
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
, m_webViewDlg(nullptr)
#endif
@ -112,7 +117,8 @@ void SyncthingApplet::init()
connect(&m_dbusNotifier, &DBusStatusNotifier::showNotificationsRequested, this, &SyncthingApplet::showNotificationsDialog);
connect(&m_dbusNotifier, &DBusStatusNotifier::errorDetailsRequested, this, &SyncthingApplet::showInternalErrorsDialog);
connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, this, &SyncthingApplet::showWebUI);
connect(&IconManager::instance(), &IconManager::statusIconsChanged, this, &SyncthingApplet::connectionStatusChanged);
connect(&m_iconManager, &IconManager::statusIconsChanged, this, &SyncthingApplet::connectionStatusChanged);
connect(&m_theme, &Plasma::Theme::themeChanged, this, &SyncthingApplet::handleThemeChanged);
// restore settings
Settings::restore();
@ -137,11 +143,14 @@ void SyncthingApplet::init()
void SyncthingApplet::initEngine(QObject *object)
{
auto engine = qmlEngine(object);
const auto engine = qmlEngine(object);
if (!engine) {
return;
}
engine->addImageProvider(QStringLiteral("fa"), new QtForkAwesome::QuickImageProvider(IconManager::instance().forkAwesomeRenderer()));
const auto color = m_theme.color(Plasma::Theme::TextColor, Plasma::Theme::NormalColorGroup);
m_imageProvider = new QtForkAwesome::QuickImageProvider(m_iconManager.forkAwesomeRenderer(), color);
connect(engine, &QObject::destroyed, this, &SyncthingApplet::handleImageProviderDestroyed); // engine has ownership over image provider
engine->addImageProvider(QStringLiteral("fa"), m_imageProvider);
}
QIcon SyncthingApplet::statusIcon() const
@ -524,6 +533,19 @@ void SyncthingApplet::handleSystemdServiceError(const QString &context, const QS
QNetworkReply::NoError, QNetworkRequest(), QByteArray());
}
void Plasmoid::SyncthingApplet::handleImageProviderDestroyed()
{
m_imageProvider = nullptr;
}
void SyncthingApplet::handleThemeChanged()
{
IconManager::instance().setPalette(m_theme.palette());
if (m_imageProvider) {
m_imageProvider->setDefaultColor(m_theme.color(Plasma::Theme::TextColor, Plasma::Theme::NormalColorGroup));
}
}
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
void SyncthingApplet::handleSystemdStatusChanged()
{

View File

@ -24,17 +24,24 @@
#define PLASMA_NO_DEPRECATED_WARNINGS 1
#include <Plasma/Applet>
#include <Plasma/Theme>
#include <QPalette>
#include <QSize>
namespace Data {
struct SyncthingConnectionSettings;
class IconManager;
} // namespace Data
namespace QtGui {
class WebViewDialog;
}
namespace QtForkAwesome {
class QuickImageProvider;
}
namespace Plasmoid {
class SettingsDialog;
@ -171,9 +178,14 @@ private Q_SLOTS:
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
void handleSystemdStatusChanged();
#endif
void handleImageProviderDestroyed();
void handleThemeChanged();
void setPassive(bool passive);
private:
Plasma::Theme m_theme;
QPalette m_palette;
Data::IconManager &m_iconManager;
QtUtilities::AboutDialog *m_aboutDlg;
Data::SyncthingConnection m_connection;
Data::SyncthingOverallDirStatistics m_overallStats;
@ -192,6 +204,7 @@ private:
SettingsDialog *m_settingsDlg;
QtGui::DBusStatusNotifier m_dbusNotifier;
std::vector<Data::SyncthingLogEntry> m_notifications;
QtForkAwesome::QuickImageProvider *m_imageProvider;
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
QtGui::WebViewDialog *m_webViewDlg;
#endif