You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.5 KiB
177 lines
5.5 KiB
/*************************************************************************** |
|
* Copyright (C) 2020 Konrad Materka <materka@gmail.com> * |
|
* * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
* * |
|
* This program is distributed in the hope that it will be useful, * |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
|
* GNU General Public License for more details. * |
|
* * |
|
* You should have received a copy of the GNU General Public License * |
|
* along with this program; if not, write to the * |
|
* Free Software Foundation, Inc., * |
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * |
|
***************************************************************************/ |
|
|
|
#include "systemtraysettings.h" |
|
|
|
#include "debug.h" |
|
|
|
#include <KConfigLoader> |
|
|
|
static const QString KNOWN_ITEMS_KEY = QStringLiteral("knownItems"); |
|
static const QString EXTRA_ITEMS_KEY = QStringLiteral("extraItems"); |
|
static const QString SHOW_ALL_ITEMS_KEY = QStringLiteral("showAllItems"); |
|
static const QString SHOWN_ITEMS_KEY = QStringLiteral("shownItems"); |
|
static const QString HIDDEN_ITEMS_KEY = QStringLiteral("hiddenItems"); |
|
|
|
SystemTraySettings::SystemTraySettings(KConfigLoader *config, QObject *parent) |
|
: QObject(parent) |
|
, config(config) |
|
{ |
|
connect(config, &KConfigLoader::configChanged, this, [this]() { |
|
if (!updatingConfigValue) { |
|
loadConfig(); |
|
} |
|
}); |
|
|
|
loadConfig(); |
|
} |
|
|
|
bool SystemTraySettings::isKnownPlugin(const QString &pluginId) |
|
{ |
|
return m_knownItems.contains(pluginId); |
|
} |
|
|
|
const QStringList SystemTraySettings::knownPlugins() const |
|
{ |
|
return m_knownItems; |
|
} |
|
|
|
void SystemTraySettings::addKnownPlugin(const QString &pluginId) |
|
{ |
|
m_knownItems << pluginId; |
|
writeConfigValue(KNOWN_ITEMS_KEY, m_knownItems); |
|
} |
|
|
|
void SystemTraySettings::removeKnownPlugin(const QString &pluginId) |
|
{ |
|
m_knownItems.removeAll(pluginId); |
|
writeConfigValue(KNOWN_ITEMS_KEY, m_knownItems); |
|
} |
|
|
|
bool SystemTraySettings::isEnabledPlugin(const QString &pluginId) const |
|
{ |
|
return m_extraItems.contains(pluginId); |
|
} |
|
|
|
const QStringList SystemTraySettings::enabledPlugins() const |
|
{ |
|
return m_extraItems; |
|
} |
|
|
|
void SystemTraySettings::addEnabledPlugin(const QString &pluginId) |
|
{ |
|
m_extraItems << pluginId; |
|
writeConfigValue(EXTRA_ITEMS_KEY, m_extraItems); |
|
emit enabledPluginsChanged({pluginId}, {}); |
|
} |
|
|
|
void SystemTraySettings::removeEnabledPlugin(const QString &pluginId) |
|
{ |
|
m_extraItems.removeAll(pluginId); |
|
writeConfigValue(EXTRA_ITEMS_KEY, m_extraItems); |
|
emit enabledPluginsChanged({}, {pluginId}); |
|
} |
|
|
|
bool SystemTraySettings::isShowAllItems() const |
|
{ |
|
return config->property(SHOW_ALL_ITEMS_KEY).toBool(); |
|
} |
|
|
|
const QStringList SystemTraySettings::shownItems() const |
|
{ |
|
return config->property(SHOWN_ITEMS_KEY).toStringList(); |
|
} |
|
|
|
const QStringList SystemTraySettings::hiddenItems() const |
|
{ |
|
return config->property(HIDDEN_ITEMS_KEY).toStringList(); |
|
} |
|
|
|
void SystemTraySettings::cleanupPlugin(const QString &pluginId) |
|
{ |
|
removeKnownPlugin(pluginId); |
|
removeEnabledPlugin(pluginId); |
|
|
|
QStringList shown = shownItems(); |
|
shown.removeAll(pluginId); |
|
writeConfigValue(SHOWN_ITEMS_KEY, shown); |
|
|
|
QStringList hidden = hiddenItems(); |
|
hidden.removeAll(pluginId); |
|
writeConfigValue(HIDDEN_ITEMS_KEY, hidden); |
|
} |
|
|
|
void SystemTraySettings::loadConfig() |
|
{ |
|
if (!config) { |
|
return; |
|
} |
|
config->load(); |
|
|
|
m_knownItems = config->property(KNOWN_ITEMS_KEY).toStringList(); |
|
|
|
QStringList extraItems = config->property(EXTRA_ITEMS_KEY).toStringList(); |
|
if (extraItems != m_extraItems) { |
|
QStringList extraItemsOld = m_extraItems; |
|
m_extraItems = extraItems; |
|
notifyAboutChangedEnabledPlugins(extraItemsOld, m_extraItems); |
|
} |
|
|
|
emit configurationChanged(); |
|
} |
|
|
|
void SystemTraySettings::writeConfigValue(const QString &key, const QVariant &value) |
|
{ |
|
if (!config) { |
|
return; |
|
} |
|
|
|
KConfigSkeletonItem *item = config->findItemByName(key); |
|
if (item) { |
|
updatingConfigValue = true; |
|
item->setWriteFlags(KConfigBase::Notify); |
|
item->setProperty(value); |
|
config->save(); |
|
// refresh state of config scheme, if not, above writes are ignored |
|
config->read(); |
|
updatingConfigValue = false; |
|
} |
|
|
|
emit configurationChanged(); |
|
} |
|
|
|
void SystemTraySettings::notifyAboutChangedEnabledPlugins(const QStringList &enabledPluginsOld, const QStringList &enabledPluginsNew) |
|
{ |
|
QStringList newlyEnabled; |
|
QStringList newlyDisabled; |
|
|
|
for (const QString &pluginId : enabledPluginsOld) { |
|
if (!enabledPluginsNew.contains(pluginId)) { |
|
newlyDisabled << pluginId; |
|
} |
|
} |
|
|
|
for (const QString &pluginId : enabledPluginsNew) { |
|
if (!enabledPluginsOld.contains(pluginId)) { |
|
newlyEnabled << pluginId; |
|
} |
|
} |
|
|
|
emit enabledPluginsChanged(newlyEnabled, newlyDisabled); |
|
}
|
|
|