Skip to content

Commit ebf4751

Browse files
committed
move tray item settings handling into a separate class
1 parent 15cd202 commit ebf4751

File tree

7 files changed

+290
-186
lines changed

7 files changed

+290
-186
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ set(SOURCES
6767
src/trayitem.cpp
6868
src/trayitemoptions.cpp
6969
src/trayitemmanager.cpp
70+
src/trayitemsettings.cpp
7071
src/xlibutil.cpp
7172
)
7273

src/trayitem.cpp

Lines changed: 6 additions & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,13 @@ TrayItem::TrayItem(windowid_t window, const TrayItemOptions &args)
5050
m_desktop = XLibUtil::getWindowDesktop(m_window);
5151

5252
readDockedAppName();
53-
loadSettings(args);
53+
m_settings.loadSettings(m_dockedAppName, args);
5454
updateTitle();
5555
updateIcon();
5656

5757
createContextMenu();
5858
updateToggleAction();
5959

60-
if (!m_settings.getIconPath().isEmpty())
61-
setCustomIcon(m_settings.getIconPath());
62-
63-
if (!m_settings.getAttentionIconPath().isEmpty())
64-
setAttentionIcon(m_settings.getAttentionIconPath());
65-
6660
doSkipTaskbar();
6761
doSkipPager();
6862
doSticky();
@@ -78,161 +72,6 @@ TrayItem::~TrayItem()
7872
XLibUtil::deleteSizeHints(m_sizeHint);
7973
}
8074

81-
void TrayItem::loadSettings(const TrayItemOptions &args)
82-
{
83-
// Precedence:
84-
// 1) Command line overrides (argSetting, if positive)
85-
// 2) User app-specific defaults (QSettings: "<m_dockedAppName>/<key>")
86-
// 3) User global defaults (QSettings: "_GLOBAL_DEFAULTS/<key>")
87-
// 4) KDocker defaults (TrayItemOptions::default*)
88-
m_settings.setIconPath(readSetting(args.getIconPath(), "CustomIcon", TrayItemOptions::defaultIconPath()));
89-
m_settings.setAttentionIconPath(
90-
readSetting(args.getAttentionIconPath(), "AttentionIcon", TrayItemOptions::defaultAttentionIconPath()));
91-
m_settings.setNotifyTime(readSetting(args.getNotifyTime(), "BalloonTimeout", TrayItemOptions::defaultNotifyTime()));
92-
m_settings.setSticky(readSetting(args.getStickyState(), "Sticky", TrayItemOptions::defaultSticky()));
93-
m_settings.setSkipPager(readSetting(args.getSkipPagerState(), "SkipPager", TrayItemOptions::defaultSkipPager()));
94-
m_settings.setSkipTaskbar(
95-
readSetting(args.getSkipTaskbarState(), "SkipTaskbar", TrayItemOptions::defaultSkipTaskbar()));
96-
m_settings.setIconifyMinimized(
97-
readSetting(args.getIconifyMinimizedState(), "IconifyMinimized", TrayItemOptions::defaultIconifyMinimized()));
98-
m_settings.setIconifyObscured(
99-
readSetting(args.getIconifyObscuredState(), "IconifyObscured", TrayItemOptions::defaultIconifyObscured()));
100-
m_settings.setIconifyFocusLost(
101-
readSetting(args.getIconifyFocusLostState(), "IconifyFocusLost", TrayItemOptions::defaultIconifyFocusLost()));
102-
m_settings.setLockToDesktop(
103-
readSetting(args.getLockToDesktopState(), "LockToDesktop", TrayItemOptions::defaultLockToDesktop()));
104-
}
105-
106-
bool TrayItem::readSetting(TrayItemOptions::TriState argSetting, const QString &key, bool kdockerDefault)
107-
{
108-
if (argSetting != TrayItemOptions::TriState::Unset)
109-
return (argSetting == TrayItemOptions::TriState::SetTrue ? true : false);
110-
return readConfigValue(key, kdockerDefault).toBool();
111-
}
112-
113-
int TrayItem::readSetting(int argSetting, const QString &key, int kdockerDefault)
114-
{
115-
if (argSetting >= 0)
116-
return argSetting;
117-
return readConfigValue(key, kdockerDefault).toInt();
118-
}
119-
120-
QString TrayItem::readSetting(const QString &argSetting, const QString &key, const QString &kdockerDefault)
121-
{
122-
if (!argSetting.isEmpty())
123-
return argSetting;
124-
return readConfigValue(key, kdockerDefault).toString();
125-
}
126-
127-
QVariant TrayItem::readConfigValue(const QString &key, const QVariant &defaultValue)
128-
{
129-
QString app = QString("%1/%2").arg(m_dockedAppName).arg(key);
130-
QString global = QString("%1/%2").arg(GLOBALSKEY).arg(key);
131-
return m_config.value(app, m_config.value(global, defaultValue));
132-
}
133-
134-
int TrayItem::nonZeroBalloonTimeout()
135-
{
136-
QString fmt = "%1/BalloonTimeout";
137-
int bto = m_config.value(fmt.arg(m_dockedAppName), 0).toInt();
138-
if (!bto)
139-
bto = m_config.value(fmt.arg(GLOBALSKEY), 0).toInt();
140-
return bto ? bto : TrayItemOptions::defaultNotifyTime();
141-
}
142-
143-
TrayItemOptions TrayItem::readConfigGlobals()
144-
{
145-
TrayItemOptions config;
146-
147-
m_config.beginGroup(GLOBALSKEY);
148-
config.setIconPath(m_config.value("CustomIcon", config.getIconPath()).toString());
149-
config.setAttentionIconPath(m_config.value("AttentionIcon", config.getAttentionIconPath()).toString());
150-
config.setNotifyTime(m_config.value("BalloonTimeout", config.getNotifyTime()).toInt());
151-
config.setSticky(m_config.value("Sticky", config.getSticky()).toBool());
152-
config.setSkipPager(m_config.value("SkipPager", config.getSkipPager()).toBool());
153-
config.setSkipTaskbar(m_config.value("SkipTaskbar", config.getSkipTaskbar()).toBool());
154-
config.setIconifyMinimized(m_config.value("IconifyMinimized", config.getIconifyMinimized()).toBool());
155-
config.setIconifyObscured(m_config.value("IconifyObscured", config.getIconifyObscured()).toBool());
156-
config.setIconifyFocusLost(m_config.value("IconifyFocusLost", config.getIconifyFocusLost()).toBool());
157-
config.setLockToDesktop(m_config.value("LockToDesktop", config.getLockToDesktop()).toBool());
158-
m_config.endGroup();
159-
160-
return config;
161-
}
162-
163-
void TrayItem::saveSettingsGlobal()
164-
{
165-
m_config.beginGroup(GLOBALSKEY);
166-
saveSettings();
167-
m_config.endGroup();
168-
}
169-
170-
void TrayItem::saveSettingsApp()
171-
{
172-
TrayItemOptions globals = readConfigGlobals();
173-
174-
m_config.beginGroup(m_dockedAppName);
175-
QVariant keyval;
176-
177-
if (!m_settings.getIconPath().isEmpty())
178-
m_config.setValue("CustomIcon", m_settings.getIconPath());
179-
180-
if (!m_settings.getAttentionIconPath().isEmpty())
181-
m_config.setValue("AttentionIcon", m_settings.getAttentionIconPath());
182-
183-
saveSettings();
184-
185-
// Remove app-specific settings if they match their default values
186-
187-
keyval = m_config.value("BalloonTimeout");
188-
if (keyval.isValid() && (keyval.toInt() == globals.getNotifyTime()))
189-
m_config.remove("BalloonTimeout");
190-
191-
keyval = m_config.value("Sticky");
192-
if (keyval.isValid() && keyval.toBool() == globals.getSticky())
193-
m_config.remove("Sticky");
194-
195-
keyval = m_config.value("SkipPager");
196-
if (keyval.isValid() && keyval.toBool() == globals.getSkipPager())
197-
m_config.remove("SkipPager");
198-
199-
keyval = m_config.value("SkipTaskbar");
200-
if (keyval.isValid() && keyval.toBool() == globals.getSkipTaskbar())
201-
m_config.remove("SkipTaskbar");
202-
203-
keyval = m_config.value("IconifyMinimized");
204-
if (keyval.isValid() && keyval.toBool() == globals.getIconifyMinimized())
205-
m_config.remove("IconifyMinimized");
206-
207-
keyval = m_config.value("IconifyObscured");
208-
if (keyval.isValid() && keyval.toBool() == globals.getIconifyObscured())
209-
m_config.remove("IconifyObscured");
210-
211-
keyval = m_config.value("IconifyFocusLost");
212-
if (keyval.isValid() && keyval.toBool() == globals.getIconifyFocusLost())
213-
m_config.remove("IconifyFocusLost");
214-
215-
keyval = m_config.value("LockToDesktop");
216-
if (keyval.isValid() && keyval.toBool() == globals.getLockToDesktop())
217-
m_config.remove("LockToDesktop");
218-
219-
m_config.endGroup();
220-
}
221-
222-
void TrayItem::saveSettings()
223-
{
224-
// "/home/<user>/.config/com.kdocker/KDocker.conf" <== m_config.fileName();
225-
// Group is set by caller
226-
m_config.setValue("BalloonTimeout", m_settings.getNotifyTime());
227-
m_config.setValue("Sticky", m_settings.getSticky());
228-
m_config.setValue("SkipPager", m_settings.getSkipPager());
229-
m_config.setValue("SkipTaskbar", m_settings.getSkipTaskbar());
230-
m_config.setValue("IconifyMinimized", m_settings.getIconifyMinimized());
231-
m_config.setValue("IconifyObscured", m_settings.getIconifyObscured());
232-
m_config.setValue("IconifyFocusLost", m_settings.getIconifyFocusLost());
233-
m_config.setValue("LockToDesktop", m_settings.getLockToDesktop());
234-
}
235-
23675
bool TrayItem::xcbEventFilter(void *message)
23776
{
23877
if (isBadWindow())
@@ -505,11 +344,7 @@ void TrayItem::setLockToDesktop(bool value)
505344

506345
void TrayItem::setBalloonTimeout(bool value)
507346
{
508-
if (!value) {
509-
m_settings.setNotifyTime(0);
510-
} else {
511-
m_settings.setNotifyTime(nonZeroBalloonTimeout());
512-
}
347+
m_settings.setQuiet(!value);
513348
}
514349

515350
void TrayItem::toggleWindow()
@@ -598,7 +433,7 @@ void TrayItem::updateTitle()
598433
QString title = XLibUtil::getWindowTitle(m_window);
599434

600435
setToolTip(QString("%1 [%2]").arg(title).arg(m_dockedAppName));
601-
if (m_settings.getNotifyTime() > 0)
436+
if (!m_settings.getQuiet() && m_settings.getNotifyTime() > 0)
602437
showMessage(m_dockedAppName, title, QSystemTrayIcon::Information, m_settings.getNotifyTime());
603438

604439
if (m_iconified && !m_attentionIcon.isNull() && !m_wantsAttention) {
@@ -681,13 +516,13 @@ void TrayItem::createContextMenu()
681516

682517
action = optionsMenu->addAction(tr("Balloon title changes"), this, &TrayItem::setBalloonTimeout);
683518
action->setCheckable(true);
684-
action->setChecked(m_settings.getNotifyTime() ? true : false);
519+
action->setChecked(!m_settings.getQuiet());
685520

686521
// Save settings menu
687522
optionsMenu->addSeparator();
688523
QMenu *menu = optionsMenu->addMenu(QIcon(":/menu/savesettings.png"), tr("Save settings"));
689-
menu->addAction(tr("%1 only").arg(m_dockedAppName), this, &TrayItem::saveSettingsApp);
690-
menu->addAction(tr("Global (all new)"), this, &TrayItem::saveSettingsGlobal);
524+
menu->addAction(tr("%1 only").arg(m_dockedAppName), &m_settings, &TrayItemSettings::saveSettingsApp);
525+
menu->addAction(tr("Global (all new)"), &m_settings, &TrayItemSettings::saveSettingsGlobal);
691526

692527
// ---
693528

src/trayitem.h

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#define _TRAYITEM_H
2323

2424
#include "trayitemoptions.h"
25+
#include "trayitemsettings.h"
2526
#include "xlibtypes.h"
2627

2728
#include <QAction>
@@ -72,8 +73,6 @@ private slots:
7273

7374
void toggleWindow();
7475
void trayActivated(QSystemTrayIcon::ActivationReason reason = QSystemTrayIcon::Trigger);
75-
void saveSettingsGlobal();
76-
void saveSettingsApp();
7776

7877
void doUndock();
7978
void doSkipPager();
@@ -90,15 +89,6 @@ private slots:
9089
bool event(QEvent *e);
9190

9291
private:
93-
void loadSettings(const TrayItemOptions &args);
94-
bool readSetting(TrayItemOptions::TriState argSetting, const QString &key, bool kdockerDefault);
95-
int readSetting(int argSetting, const QString &key, int kdockerDefault);
96-
QString readSetting(const QString &argSetting, const QString &key, const QString &kdockerDefault);
97-
QVariant readConfigValue(const QString &key, const QVariant &defaultValue);
98-
int nonZeroBalloonTimeout();
99-
TrayItemOptions readConfigGlobals();
100-
void saveSettings();
101-
10292
void minimizeEvent();
10393
void destroyEvent();
10494
void obscureEvent();
@@ -122,8 +112,7 @@ private slots:
122112
QIcon m_defaultIcon;
123113
QIcon m_attentionIcon;
124114

125-
QSettings m_config;
126-
TrayItemOptions m_settings;
115+
TrayItemSettings m_settings;
127116

128117
// SizeHint of m_window
129118
XLibUtilSizeHints *m_sizeHint;

src/trayitemoptions.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include "trayitemoptions.h"
2121

22+
#include <QMetaType>
23+
2224
static const QString DKEY_ICONP = "icon";
2325
static const QString DKEY_AICOP = "attention-icon";
2426
static const QString DKEY_ICONFFOC = "iconify-focus-lost";
@@ -214,6 +216,11 @@ TrayItemOptions::TriState TrayItemOptions::getIconifyObscuredState() const
214216
return m_iconifyObscured;
215217
}
216218

219+
bool TrayItemOptions::getNotifyTimeState() const
220+
{
221+
return m_notifyTime == -1 ? false : true;
222+
}
223+
217224
TrayItemOptions::TriState TrayItemOptions::getQuietState() const
218225
{
219226
return m_quiet;
@@ -280,6 +287,8 @@ bool TrayItemOptions::getIconifyObscured() const
280287

281288
int TrayItemOptions::getNotifyTime() const
282289
{
290+
if (m_quiet == TrayItemOptions::TriState::SetTrue)
291+
return 0;
283292
return m_notifyTime;
284293
}
285294

src/trayitemoptions.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#define _TRAYITEMOPTIONS
2222

2323
#include <QDBusArgument>
24-
#include <QMetaType>
2524
#include <QString>
2625

2726
class TrayItemOptions
@@ -44,10 +43,11 @@ class TrayItemOptions
4443

4544
QString getIconPath() const;
4645
QString getAttentionIconPath() const;
46+
bool getNotifyTimeState() const;
47+
4748
TrayItemOptions::TriState getIconifyFocusLostState() const;
4849
TrayItemOptions::TriState getIconifyMinimizedState() const;
4950
TrayItemOptions::TriState getIconifyObscuredState() const;
50-
int getNotifyTimeState() const;
5151
TrayItemOptions::TriState getQuietState() const;
5252
TrayItemOptions::TriState getSkipPagerState() const;
5353
TrayItemOptions::TriState getStickyState() const;

0 commit comments

Comments
 (0)