From 44ab6359d52bc4616b18232eedb968be06f9c8b5 Mon Sep 17 00:00:00 2001 From: yinjie Date: Fri, 22 Apr 2022 17:53:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=B5=E6=BA=90=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增电源插件右键菜单支持配置的功能 Log: 新增电源插件右键菜单支持配置的功能 Task: https://pms.uniontech.com/task-view-114011.html Influence: 任务栏电源按钮右键菜单 Change-Id: I97f050a10360b1893d17b2a12e3157286edf3fd6 --- configs/org.deepin.dde.dock.plugin.power.json | 17 ++++ plugins/power/CMakeLists.txt | 2 + plugins/shutdown/shutdownplugin.cpp | 83 ++++++++++++++----- plugins/shutdown/shutdownplugin.h | 6 ++ 4 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 configs/org.deepin.dde.dock.plugin.power.json diff --git a/configs/org.deepin.dde.dock.plugin.power.json b/configs/org.deepin.dde.dock.plugin.power.json new file mode 100644 index 000000000..932e822f8 --- /dev/null +++ b/configs/org.deepin.dde.dock.plugin.power.json @@ -0,0 +1,17 @@ +{ + "magic":"dsg.config.meta", + "version":"1.0", + "contents":{ + "contextMenu":{ + "value": ["Shutdown", "Reboot", "Suspend", "Hibernate", "Lock", "Logout", "SwitchUser", "PowerSettings"], + "serial": 0, + "flags": [], + "name": "ContextMenu", + "name[zh_CN]": "电源按钮右键菜单", + "description[zh_CN]": "电源界面的右键菜单内容,如需不显示某个选项,移除即可;默认值:\"Shutdown\", \"Reboot\", \"Suspend\", \"Hibernate\", \"Lock\", \"Logout\", \"SwitchUser\", \"PowerSettings\";", + "description":"", + "permissions":"readwrite", + "visibility":"private" + } + } +} \ No newline at end of file diff --git a/plugins/power/CMakeLists.txt b/plugins/power/CMakeLists.txt index 3f8f4be3d..4c369d75d 100644 --- a/plugins/power/CMakeLists.txt +++ b/plugins/power/CMakeLists.txt @@ -33,3 +33,5 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE ) install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins/system-trays) + +dconfig_meta_files(APPID org.deepin.dde.dock FILES ../../configs/org.deepin.dde.dock.plugin.power.json) diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index a2000c493..7a2e3266a 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -37,6 +37,15 @@ #define GSETTING_SHOW_SHUTDOWN "showShutdown" #define GSETTING_SHOW_LOCK "showLock" +const QString MENU_SHUTDONW = "Shutdown"; +const QString MENU_REBOOT = "Reboot"; +const QString MENU_SUSPEND = "Suspend"; +const QString MENU_HIBERNATE = "Hibernate"; +const QString MENU_LOCK = "Lock"; +const QString MENU_LOGOUT = "Logout"; +const QString MENU_SWITCH_USER = "SwitchUser"; +const QString MENU_POWER_SETTINGS = "PowerSettings"; + DCORE_USE_NAMESPACE using namespace Dock; @@ -48,6 +57,7 @@ ShutdownPlugin::ShutdownPlugin(QObject *parent) , m_powerManagerInter(new DBusPowerManager("com.deepin.daemon.PowerManager", "/com/deepin/daemon/PowerManager", QDBusConnection::systemBus(), this)) , m_gsettings(Utils::ModuleSettingsPtr("shutdown", QByteArray(), this)) , m_sessionShellGsettings(Utils::SettingsPtr("com.deepin.dde.session-shell", "/com/deepin/dde/session-shell/", this)) + , m_dconfig(DConfig::create("org.deepin.dde.dock", "org.deepin.dde.dock.plugin.power", QString(), this)) { m_tipsLabel->setVisible(false); m_tipsLabel->setAccessibleName("shutdown"); @@ -119,22 +129,40 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) { Q_UNUSED(itemKey); + QStringList contextMenu = { + MENU_SHUTDONW, + MENU_REBOOT, + MENU_SUSPEND, + MENU_HIBERNATE, + MENU_LOCK, + MENU_LOGOUT, + MENU_SWITCH_USER, + MENU_POWER_SETTINGS + }; + + if (m_dconfig.data()->isValid()) { + contextMenu = m_dconfig.data()->value("contextMenu", contextMenu).toStringList(); + } + QList items; items.reserve(6); QMap shutdown; - if (!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_SHUTDOWN) && m_gsettings->get(GSETTING_SHOW_SHUTDOWN).toBool())) { + if ((!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_SHUTDOWN) && m_gsettings->get(GSETTING_SHOW_SHUTDOWN).toBool())) && contextMenu.contains(MENU_SHUTDONW)) { shutdown["itemId"] = "Shutdown"; shutdown["itemText"] = tr("Shut down"); shutdown["isActive"] = true; items.push_back(shutdown); } - QMap reboot; - reboot["itemId"] = "Restart"; - reboot["itemText"] = tr("Reboot"); - reboot["isActive"] = true; - items.push_back(reboot); + if (contextMenu.contains(MENU_REBOOT)) { + QMap reboot; + reboot["itemId"] = "Restart"; + reboot["itemText"] = tr("Reboot"); + reboot["isActive"] = true; + items.push_back(reboot); + } + #ifndef DISABLE_POWER_OPTIONS @@ -145,7 +173,9 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) ; if (can_sleep) { QMap suspend; - if (!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_SUSPEND) && m_gsettings->get(GSETTING_SHOW_SUSPEND).toBool())) { + if ((!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_SUSPEND) + && m_gsettings->get(GSETTING_SHOW_SUSPEND).toBool())) + && contextMenu.contains(MENU_SUSPEND)) { suspend["itemId"] = "Suspend"; suspend["itemText"] = tr("Suspend"); suspend["isActive"] = true; @@ -153,12 +183,13 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) } } - bool can_hibernate = enviromentVar.contains("POWER_CAN_HIBERNATE") ? QVariant(enviromentVar.value("POWER_CAN_HIBERNATE")).toBool() - : checkSwap() && m_powerManagerInter->CanHibernate(); + bool can_hibernate = enviromentVar.contains("POWER_CAN_HIBERNATE") ? + QVariant(enviromentVar.value("POWER_CAN_HIBERNATE")).toBool() : checkSwap() && m_powerManagerInter->CanHibernate(); if (can_hibernate) { QMap hibernate; - if (!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_HIBERNATE) && m_gsettings->get(GSETTING_SHOW_HIBERNATE).toBool())) { + if ((!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_HIBERNATE) && m_gsettings->get(GSETTING_SHOW_HIBERNATE).toBool())) + && contextMenu.contains(MENU_HIBERNATE)) { hibernate["itemId"] = "Hibernate"; hibernate["itemText"] = tr("Hibernate"); hibernate["isActive"] = true; @@ -169,18 +200,21 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) #endif QMap lock; - if (!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_LOCK) && m_gsettings->get(GSETTING_SHOW_LOCK).toBool())) { + if ((!m_gsettings || (m_gsettings->keys().contains(GSETTING_SHOW_LOCK) && m_gsettings->get(GSETTING_SHOW_LOCK).toBool())) + && contextMenu.contains(MENU_LOCK)) { lock["itemId"] = "Lock"; lock["itemText"] = tr("Lock"); lock["isActive"] = true; items.push_back(lock); } - QMap logout; - logout["itemId"] = "Logout"; - logout["itemText"] = tr("Log out"); - logout["isActive"] = true; - items.push_back(logout); + if (contextMenu.contains(MENU_LOGOUT)) { + QMap logout; + logout["itemId"] = "Logout"; + logout["itemText"] = tr("Log out"); + logout["isActive"] = true; + items.push_back(logout); + } if (!QFile::exists(ICBC_CONF_FILE)) { // 读取com.deepin.dde.session-shell切换用户配置项 @@ -195,9 +229,10 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) } // 和登录锁屏界面的逻辑保持一致 - if (AlwaysShow == switchUserConfig || + if ((AlwaysShow == switchUserConfig || (OnDemand == switchUserConfig && - (DBusAccount().userList().count() > 1 || DSysInfo::uosType() == DSysInfo::UosType::UosServer))) { + (DBusAccount().userList().count() > 1 || DSysInfo::uosType() == DSysInfo::UosType::UosServer))) + && contextMenu.contains(MENU_SWITCH_USER)) { QMap switchUser; switchUser["itemId"] = "SwitchUser"; switchUser["itemText"] = tr("Switch account"); @@ -206,11 +241,13 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) } #ifndef DISABLE_POWER_OPTIONS - QMap power; - power["itemId"] = "power"; - power["itemText"] = tr("Power settings"); - power["isActive"] = true; - items.push_back(power); + if (contextMenu.contains(MENU_POWER_SETTINGS)) { + QMap power; + power["itemId"] = "power"; + power["itemText"] = tr("Power settings"); + power["isActive"] = true; + items.push_back(power); + } #endif } diff --git a/plugins/shutdown/shutdownplugin.h b/plugins/shutdown/shutdownplugin.h index 046156fad..ce2cc6ff2 100644 --- a/plugins/shutdown/shutdownplugin.h +++ b/plugins/shutdown/shutdownplugin.h @@ -26,6 +26,11 @@ #include "shutdownwidget.h" #include +#include + +#include + +DCORE_USE_NAMESPACE class DBusPowerManager; @@ -116,6 +121,7 @@ private: DBusPowerManager* m_powerManagerInter; const QGSettings *m_gsettings; const QGSettings *m_sessionShellGsettings; + QSharedPointer m_dconfig; }; #endif // SHUTDOWNPLUGIN_H