feat: 添加任务栏空白处右键菜单子菜单是否显示的开关

添加gsettings配置作为设置右键菜单子菜单是否显示的开关, 修改配置立即生效

Log: 添加任务栏空白处右键菜单子菜单是否显示的开关, 修改配置立即生效
Change-Id: If16f2fc471fe6af98c7b68d805a8ca555c705bb4
This commit is contained in:
weizhixiang 2021-02-19 18:08:06 +08:00
parent 9dc9273afd
commit e5b5c3ce28
3 changed files with 106 additions and 30 deletions

View File

@ -27,18 +27,6 @@
#include <DApplication> #include <DApplication>
static QGSettings *GSettingsByMenu()
{
static QGSettings settings("com.deepin.dde.dock.module.menu");
return &settings;
}
static QGSettings *GSettingsByTrash()
{
static QGSettings settings("com.deepin.dde.dock.module.trash");
return &settings;
}
MenuWorker::MenuWorker(DBusDock *dockInter,QWidget *parent) MenuWorker::MenuWorker(DBusDock *dockInter,QWidget *parent)
: QObject (parent) : QObject (parent)
, m_itemManager(DockItemManager::instance(this)) , m_itemManager(DockItemManager::instance(this))
@ -68,6 +56,15 @@ MenuWorker::MenuWorker(DBusDock *dockInter,QWidget *parent)
MenuWorker::~MenuWorker() MenuWorker::~MenuWorker()
{ {
delete m_settingsMenu; delete m_settingsMenu;
QList<QString> keys = m_settingsModuleMap.keys();
foreach (QString key, keys) {
QGSettings *settings = m_settingsModuleMap[key];
m_settingsModuleMap.remove(key);
delete settings;
settings = nullptr;
}
} }
void MenuWorker::initMember() void MenuWorker::initMember()
@ -124,8 +121,8 @@ void MenuWorker::initConnection()
{ {
connect(m_settingsMenu, &QMenu::triggered, this, &MenuWorker::menuActionClicked); connect(m_settingsMenu, &QMenu::triggered, this, &MenuWorker::menuActionClicked);
connect(GSettingsByMenu(), &QGSettings::changed, this, &MenuWorker::onGSettingsChanged); connect(settingsModule("menu"), &QGSettings::changed, this, &MenuWorker::onGSettingsChanged);
connect(GSettingsByTrash(), &QGSettings::changed, this, &MenuWorker::onTrashGSettingsChanged); connect(settingsModule("trash"), &QGSettings::changed, this, &MenuWorker::onTrashGSettingsChanged);
connect(m_itemManager, &DockItemManager::trayVisableCountChanged, this, &MenuWorker::trayVisableCountChanged, Qt::QueuedConnection); connect(m_itemManager, &DockItemManager::trayVisableCountChanged, this, &MenuWorker::trayVisableCountChanged, Qt::QueuedConnection);
@ -135,21 +132,29 @@ void MenuWorker::initConnection()
} }
} }
const QGSettings *MenuWorker::settingsModule(const QString &module)
{
if (!m_settingsModuleMap.contains(module))
m_settingsModuleMap.insert(module, new QGSettings(QString("com.deepin.dde.dock.module." + module).toUtf8()));
return m_settingsModuleMap[module];
}
void MenuWorker::setSettingsMenu() void MenuWorker::setSettingsMenu()
{ {
for (auto act : m_settingsMenu->actions()) for (auto act : m_settingsMenu->actions())
m_settingsMenu->removeAction(act); m_settingsMenu->removeAction(act);
if (GSettingsByMenu()->get("modeVisible").toBool()) if (settingsModule("menu")->get("modeVisible").toBool())
m_settingsMenu->addAction(m_modeSubMenuAct); m_settingsMenu->addAction(m_modeSubMenuAct);
if (GSettingsByMenu()->get("locationVisible").toBool()) if (settingsModule("menu")->get("locationVisible").toBool())
m_settingsMenu->addAction(m_locationSubMenuAct); m_settingsMenu->addAction(m_locationSubMenuAct);
if (GSettingsByMenu()->get("statusVisible").toBool()) if (settingsModule("menu")->get("statusVisible").toBool())
m_settingsMenu->addAction(m_statusSubMenuAct); m_settingsMenu->addAction(m_statusSubMenuAct);
if (GSettingsByMenu()->get("hideVisible").toBool()) if (settingsModule("menu")->get("hideVisible").toBool())
m_settingsMenu->addAction(m_hideSubMenuAct); m_settingsMenu->addAction(m_hideSubMenuAct);
} }
@ -190,7 +195,8 @@ void MenuWorker::showDockSettingsMenu()
act->setChecked(enable); act->setChecked(enable);
act->setData(name); act->setData(name);
actions << act; if (!settingsModule(name)->keys().contains("visible") || settingsModule(name)->get("visible").toBool())
actions << act;
} }
// sort by name // sort by name
@ -228,12 +234,8 @@ void MenuWorker::onGSettingsChanged(const QString &key)
return; return;
} }
QGSettings *setting = GSettingsByMenu(); const QGSettings *setting = settingsModule("menu");
m_menuEnable = setting->keys().contains("enable") ? setting->get("enable").toBool() : m_menuEnable;
if (setting->keys().contains("enable")) {
const bool isEnable = GSettingsByMenu()->keys().contains("enable") && GSettingsByMenu()->get("enable").toBool();
m_menuEnable=isEnable && setting->get("enable").toBool();
}
} }
void MenuWorker::onTrashGSettingsChanged(const QString &key) void MenuWorker::onTrashGSettingsChanged(const QString &key)
@ -242,11 +244,8 @@ void MenuWorker::onTrashGSettingsChanged(const QString &key)
return ; return ;
} }
QGSettings *setting = GSettingsByTrash(); const QGSettings *setting = settingsModule("trash");
m_trashPluginShow = setting->keys().contains("enable") ? setting->get("enable").toBool() : m_trashPluginShow;
if (setting->keys().contains("enable")) {
m_trashPluginShow = GSettingsByTrash()->keys().contains("enable") && GSettingsByTrash()->get("enable").toBool();
}
} }
void MenuWorker::menuActionClicked(QAction *action) void MenuWorker::menuActionClicked(QAction *action)

View File

@ -30,6 +30,7 @@ using DBusDock = com::deepin::dde::daemon::Dock;
class QMenu; class QMenu;
class QAction; class QAction;
class DockItemManager; class DockItemManager;
class QGSettings;
/** /**
* @brief The MenuWorker class * @brief The MenuWorker class
*/ */
@ -54,6 +55,7 @@ public:
void onTrashGSettingsChanged(const QString &key); void onTrashGSettingsChanged(const QString &key);
private: private:
const QGSettings *settingsModule(const QString &module);
void setSettingsMenu(); void setSettingsMenu();
signals: signals:
@ -71,6 +73,7 @@ public slots:
private: private:
DockItemManager *m_itemManager; DockItemManager *m_itemManager;
DBusDock *m_dockInter; DBusDock *m_dockInter;
QMap<QString, QGSettings*> m_settingsModuleMap;
QMenu *m_settingsMenu; QMenu *m_settingsMenu;
QMenu *m_hideSubMenu; QMenu *m_hideSubMenu;

View File

@ -112,6 +112,13 @@
Control Menu Enable Control Menu Enable
</description> </description>
</key> </key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema> </schema>
<schema path="/com/deepin/dde/dock/module/network/" id="com.deepin.dde.dock.module.network" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/network/" id="com.deepin.dde.dock.module.network" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
@ -158,6 +165,13 @@
Control Menu Enable Control Menu Enable
</description> </description>
</key> </key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema> </schema>
<schema path="/com/deepin/dde/dock/module/bluetooth/" id="com.deepin.dde.dock.module.bluetooth" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/bluetooth/" id="com.deepin.dde.dock.module.bluetooth" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
@ -234,6 +248,13 @@
Control Menu Enable Control Menu Enable
</description> </description>
</key> </key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema> </schema>
<schema path="/com/deepin/dde/dock/module/sound/" id="com.deepin.dde.dock.module.sound" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/sound/" id="com.deepin.dde.dock.module.sound" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
@ -280,6 +301,13 @@
Control Menu Enable Control Menu Enable
</description> </description>
</key> </key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema> </schema>
<schema path="/com/deepin/dde/dock/module/systemtray/" id="com.deepin.dde.dock.module.systemtray" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/module/systemtray/" id="com.deepin.dde.dock.module.systemtray" gettext-domain="DDE">
<key type="b" name="control"> <key type="b" name="control">
@ -373,6 +401,52 @@
Control Module Enable Control Module Enable
</description> </description>
</key> </key>
<key type="b" name="menu-enable">
<default>true</default>
<summary>Menu Enable</summary>
<description>
Control Menu Enable
</description>
</key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema>
<schema path="/com/deepin/dde/dock/module/multitasking/" id="com.deepin.dde.dock.module.multitasking" gettext-domain="DDE">
<key type="b" name="menu-enable">
<default>true</default>
<summary>Menu Enable</summary>
<description>
Control Menu Enable
</description>
</key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema>
<schema path="/com/deepin/dde/dock/module/show-desktop/" id="com.deepin.dde.dock.module.show-desktop" gettext-domain="DDE">
<key type="b" name="menu-enable">
<default>true</default>
<summary>Menu Enable</summary>
<description>
Control Menu Enable
</description>
</key>
<key type="b" name="visible">
<default>true</default>
<summary>Module visible</summary>
<description>
Control Menu pluginsettings visible
</description>
</key>
</schema> </schema>
<schema path="/com/deepin/dde/dock/touch/" id="com.deepin.dde.dock.touch" gettext-domain="DDE"> <schema path="/com/deepin/dde/dock/touch/" id="com.deepin.dde.dock.touch" gettext-domain="DDE">
<key type="i" name="resize-height"> <key type="i" name="resize-height">