From b342f6f884adac9421ae37a2f6cdbacb5d4e8987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=A8=81?= Date: Wed, 19 Aug 2020 14:13:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=9B=86=E4=B8=AD?= =?UTF-8?q?=E7=AE=A1=E6=8E=A7=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E6=89=80=E6=9C=89=E5=8A=9F=E8=83=BD=E5=8F=AF=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E4=B8=80=E4=B8=AA=E9=85=8D=E7=BD=AE=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E6=88=96=E7=A6=81=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 模块可配置显示隐藏,能打开控制中心的右键菜单全屏蔽。 2. gsettings最终生效的设置在各个用户之间是互相隔离的,而且root用户读取不到普通用户的gsettings配置。 3. 集中管控版本右下解关机按钮右菜菜单的锁定功能改为调用SwitchTTYAndShow Log: 引用头文件分类规范化 Task: https://pms.uniontech.com/zentao/task-view-30817.html Change-Id: I5ae833f61864ba1874c8ceb75351d569614ab235 Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/2377 Reviewed-by: Reviewed-by: niecheng Reviewed-by: wangwei Tested-by: --- frame/main.cpp | 14 +++++++-- frame/util/pluginloader.cpp | 31 +++++++++++++------ frame/util/utils.h | 16 ++++++++++ plugins/datetime/CMakeLists.txt | 9 +++++- plugins/datetime/datetimeplugin.cpp | 13 +++++--- plugins/network/CMakeLists.txt | 3 ++ plugins/network/item/deviceitem.cpp | 15 ++++++--- plugins/power/CMakeLists.txt | 1 + plugins/power/powerplugin.cpp | 13 +++++--- plugins/shutdown/CMakeLists.txt | 3 ++ plugins/shutdown/shutdownplugin.cpp | 48 +++++++++++++++++++---------- plugins/sound/sounditem.cpp | 32 ++++++++++++------- 12 files changed, 142 insertions(+), 56 deletions(-) diff --git a/frame/main.cpp b/frame/main.cpp index 524230139..bf487ff53 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -21,21 +21,24 @@ #include "window/mainwindow.h" #include "window/accessible.h" +#include "dbus/dbusdockadaptors.h" +#include "util/utils.h" #include "util/themeappicon.h" #include "controller/dockitemmanager.h" #include #include #include +#include +#include + #include #include #include #include #include -#include "dbus/dbusdockadaptors.h" #include - #include #include #include @@ -176,6 +179,13 @@ int main(int argc, char *argv[]) app.setAttribute(Qt::AA_EnableHighDpiScaling, true); app.setAttribute(Qt::AA_UseHighDpiPixmaps, false); + if (Utils::isSettingConfigured("com.deepin.dde.dock.icbc", "/com/deepin/dde/dock/icbc/", "already-clear")) { + QGSettings clear_setting("com.deepin.dde.dock.icbc", "/com/deepin/dde/dock/icbc/"); + clear_setting.set("already-clear", false); + QGSettings apps_setting("com.deepin.dde.dock", "/com/deepin/dde/dock/"); + apps_setting.set("docked-apps", QStringList()); + system("killall dde-session-daemon"); + } QAccessible::installFactory(accessibleFactory); // load dde-network-utils translator diff --git a/frame/util/pluginloader.cpp b/frame/util/pluginloader.cpp index 3b2e90168..b32417dce 100644 --- a/frame/util/pluginloader.cpp +++ b/frame/util/pluginloader.cpp @@ -39,20 +39,31 @@ void PluginLoader::run() static const QGSettings gsetting("com.deepin.dde.dock.disableplugins", "/com/deepin/dde/dock/disableplugins/"); static const auto disable_plugins_list = gsetting.get("disable-plugins-list").toStringList(); - for (QString file : plugins) + for (const QString& file : plugins) { - if (!QLibrary::isLibrary(file)) - continue; - - // TODO: old dock plugins is uncompatible - if (file.startsWith("libdde-dock-")) - continue; - - if (disable_plugins_list.contains(file)) { - qDebug() << "disable loading plugin:" << file; + if (!QLibrary::isLibrary(file)){ +#ifdef QT_DEBUG + qDebug() << "--------not a library: " << pluginsDir.absoluteFilePath(file); +#endif continue; } + // TODO: old dock plugins is uncompatible + if (file.startsWith("libdde-dock-")) { +#ifdef QT_DEBUG + qDebug() << "--------uncompatible library: " << pluginsDir.absoluteFilePath(file); +#endif + continue; + } + + if (disable_plugins_list.contains(file)) { + qDebug() << "disable loading plugin:" << pluginsDir.absoluteFilePath(file); + continue; + } + +#ifdef QT_DEBUG + qDebug() << "----------loaded: " << pluginsDir.absoluteFilePath(file); +#endif emit pluginFounded(pluginsDir.absoluteFilePath(file)); } diff --git a/frame/util/utils.h b/frame/util/utils.h index 9bc30d223..f1005c70a 100644 --- a/frame/util/utils.h +++ b/frame/util/utils.h @@ -2,8 +2,12 @@ #include #include #include +#include namespace Utils { + + #define ICBC_CONF_FILE "/etc/deepin/icbc.conf" + inline QPixmap renderSVG(const QString &path, const QSize &size, const qreal devicePixelRatio) { QImageReader reader; QPixmap pixmap; @@ -55,4 +59,16 @@ namespace Utils { return nullptr; } + + inline bool isSettingConfigured(const QString& id, const QString& path, const QString& keyName) { + if (!QGSettings::isSchemaInstalled(id.toUtf8())) { + return false; + } + QGSettings setting(id.toUtf8(), path.toUtf8()); + QVariant v = setting.get(keyName); + if (!v.isValid()) { + return false; + } + return v.toBool(); + } } diff --git a/plugins/datetime/CMakeLists.txt b/plugins/datetime/CMakeLists.txt index 346652900..e690db4a5 100644 --- a/plugins/datetime/CMakeLists.txt +++ b/plugins/datetime/CMakeLists.txt @@ -12,15 +12,22 @@ find_package(Qt5Svg REQUIRED) find_package(Qt5DBus REQUIRED) find_package(DtkWidget REQUIRED) +pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus) +pkg_check_modules(QGSettings REQUIRED gsettings-qt) + add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN") add_library(${PLUGIN_NAME} SHARED ${SRCS} datetime.qrc) set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../) -target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ../../interfaces) +target_include_directories(${PLUGIN_NAME} PUBLIC + ${DtkWidget_INCLUDE_DIRS} + ${QGSettings_INCLUDE_DIRS} + ../../interfaces) target_link_libraries(${PLUGIN_NAME} PRIVATE ${Qt5DBus_LIBRARIES} ${DtkWidget_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Svg_LIBRARIES} + ${QGSettings_LIBRARIES} ) install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins) diff --git a/plugins/datetime/datetimeplugin.cpp b/plugins/datetime/datetimeplugin.cpp index 4183293db..ddef3e1d6 100644 --- a/plugins/datetime/datetimeplugin.cpp +++ b/plugins/datetime/datetimeplugin.cpp @@ -21,6 +21,7 @@ #include "datetimeplugin.h" #include "../../widgets/tipswidget.h" +#include "../../frame/util/utils.h" #include #include @@ -159,11 +160,13 @@ const QString DatetimePlugin::itemContextMenu(const QString &itemKey) settings["isActive"] = true; items.push_back(settings); - QMap open; - open["itemId"] = "open"; - open["itemText"] = tr("Time settings"); - open["isActive"] = true; - items.push_back(open); + if (!QFile::exists(ICBC_CONF_FILE)) { + QMap open; + open["itemId"] = "open"; + open["itemText"] = tr("Time settings"); + open["isActive"] = true; + items.push_back(open); + } QMap menu; menu["items"] = items; diff --git a/plugins/network/CMakeLists.txt b/plugins/network/CMakeLists.txt index 708db3f81..746365016 100644 --- a/plugins/network/CMakeLists.txt +++ b/plugins/network/CMakeLists.txt @@ -16,6 +16,7 @@ find_package(DtkWidget REQUIRED) pkg_check_modules(DDE-Network-Utils REQUIRED dde-network-utils) pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus) +pkg_check_modules(QGSettings REQUIRED gsettings-qt) add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN") add_library(${PLUGIN_NAME} SHARED ${SRCS} network.qrc) @@ -23,6 +24,7 @@ set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../syst target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} ${DFrameworkDBus_INCLUDE_DIRS} + ${QGSettings_INCLUDE_DIRS} ${DDE-Network-Utils_INCLUDE_DIRS} ../../interfaces ../../frame) @@ -31,6 +33,7 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE ${Qt5Widgets_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5DBus_LIBRARIES} + ${QGSettings_LIBRARIES} ${DDE-Network-Utils_LIBRARIES} ${DFrameworkDBus_LIBRARIES} ) diff --git a/plugins/network/item/deviceitem.cpp b/plugins/network/item/deviceitem.cpp index a61dee298..4a85adfe0 100644 --- a/plugins/network/item/deviceitem.cpp +++ b/plugins/network/item/deviceitem.cpp @@ -20,10 +20,13 @@ */ #include "deviceitem.h" +#include "../frame/util/utils.h" #include #include +#include +#include using namespace dde::network; @@ -62,11 +65,13 @@ const QString DeviceItem::itemContextMenu() enable["isActive"] = true; items.push_back(enable); - QMap settings; - settings["itemId"] = "settings"; - settings["itemText"] = tr("Network settings"); - settings["isActive"] = true; - items.push_back(settings); + if (!QFile::exists(ICBC_CONF_FILE)) { + QMap settings; + settings["itemId"] = "settings"; + settings["itemText"] = tr("Network settings"); + settings["isActive"] = true; + items.push_back(settings); + } QMap menu; menu["items"] = items; diff --git a/plugins/power/CMakeLists.txt b/plugins/power/CMakeLists.txt index a7819a9d3..3f8f4be3d 100644 --- a/plugins/power/CMakeLists.txt +++ b/plugins/power/CMakeLists.txt @@ -13,6 +13,7 @@ find_package(Qt5DBus REQUIRED) find_package(DtkWidget REQUIRED) pkg_check_modules(DFrameworkDBus REQUIRED dframeworkdbus) +pkg_check_modules(QGSettings REQUIRED gsettings-qt) add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN") add_library(${PLUGIN_NAME} SHARED ${SRCS} power.qrc) diff --git a/plugins/power/powerplugin.cpp b/plugins/power/powerplugin.cpp index 1d056b69d..7d0e89874 100644 --- a/plugins/power/powerplugin.cpp +++ b/plugins/power/powerplugin.cpp @@ -22,6 +22,7 @@ #include "powerplugin.h" #include "dbus/dbusaccount.h" #include "../widgets/tipswidget.h" +#include "../frame/util/utils.h" #include #include @@ -121,11 +122,13 @@ const QString PowerPlugin::itemContextMenu(const QString &itemKey) QList items; items.reserve(6); - QMap power; - power["itemId"] = "power"; - power["itemText"] = tr("Power settings"); - power["isActive"] = true; - items.push_back(power); + if (!QFile::exists(ICBC_CONF_FILE)) { + QMap power; + power["itemId"] = "power"; + power["itemText"] = tr("Power settings"); + power["isActive"] = true; + items.push_back(power); + } QMap menu; menu["items"] = items; diff --git a/plugins/shutdown/CMakeLists.txt b/plugins/shutdown/CMakeLists.txt index 42500db80..2f123a3a8 100644 --- a/plugins/shutdown/CMakeLists.txt +++ b/plugins/shutdown/CMakeLists.txt @@ -15,18 +15,21 @@ find_package(DtkWidget REQUIRED) #if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64") # add_definitions("-DDISABLE_POWER_OPTIONS") #endif() +pkg_check_modules(QGSettings REQUIRED gsettings-qt) add_definitions("${QT_DEFINITIONS} -DQT_PLUGIN") add_library(${PLUGIN_NAME} SHARED ${SRCS} shutdown.qrc) set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ../) target_include_directories(${PLUGIN_NAME} PUBLIC ${DtkWidget_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} + ${QGSettings_INCLUDE_DIRS} ../../interfaces) target_link_libraries(${PLUGIN_NAME} PRIVATE ${DtkWidget_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Svg_LIBRARIES} ${Qt5DBus_LIBRARIES} + ${QGSettings_LIBRARIES} ) install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins) diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index 38371f911..0402b6103 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -21,6 +21,7 @@ #include "shutdownplugin.h" #include "dbus/dbusaccount.h" +#include "../frame/util/utils.h" #include "../widgets/tipswidget.h" #include @@ -161,21 +162,23 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey) logout["isActive"] = true; items.push_back(logout); - if (DBusAccount().userList().count() > 1) { - QMap switchUser; - switchUser["itemId"] = "SwitchUser"; - switchUser["itemText"] = tr("Switch account"); - switchUser["isActive"] = true; - items.push_back(switchUser); - } + if (!QFile::exists(ICBC_CONF_FILE)) { + if (DBusAccount().userList().count() > 1) { + QMap switchUser; + switchUser["itemId"] = "SwitchUser"; + switchUser["itemText"] = tr("Switch account"); + switchUser["isActive"] = true; + items.push_back(switchUser); + } #ifndef DISABLE_POWER_OPTIONS - QMap power; - power["itemId"] = "power"; - power["itemText"] = tr("Power settings"); - power["isActive"] = true; - items.push_back(power); + QMap power; + power["itemId"] = "power"; + power["itemText"] = tr("Power settings"); + power["isActive"] = true; + items.push_back(power); #endif + } QMap menu; menu["items"] = items; @@ -192,11 +195,22 @@ void ShutdownPlugin::invokedMenuItem(const QString &itemKey, const QString &menu if (menuId == "power") QProcess::startDetached("dbus-send --print-reply --dest=com.deepin.dde.ControlCenter /com/deepin/dde/ControlCenter com.deepin.dde.ControlCenter.ShowModule \"string:power\""); - else if (menuId == "Lock") - QProcess::startDetached("dbus-send", QStringList() << "--print-reply" - << "--dest=com.deepin.dde.lockFront" - << "/com/deepin/dde/lockFront" - << QString("com.deepin.dde.lockFront.Show")); + else if (menuId == "Lock") { + if (QFile::exists(ICBC_CONF_FILE)) { + QDBusMessage send = QDBusMessage::createMethodCall("com.deepin.dde.lockFront", "/com/deepin/dde/lockFront", "com.deepin.dde.lockFront", "SwitchTTYAndShow"); + QDBusConnection conn = QDBusConnection::connectToBus("unix:path=/run/user/1000/bus","unix:path=/run/user/1000/bus"); + QDBusMessage reply = conn.call(send); +#ifdef QT_DEBUG + qInfo()<<"----------"<. */ -#include "sounditem.h" -#include "constants.h" - #include #include #include +#include #include + #include #include +#include + +DWIDGET_USE_NAMESPACE +DGUI_USE_NAMESPACE + +#include "sounditem.h" +#include "constants.h" #include "../widgets/tipswidget.h" #include "../frame/util/imageutil.h" -#include +#include "../frame/util/utils.h" // menu actions #define MUTE "mute" #define SETTINGS "settings" -DWIDGET_USE_NAMESPACE -DGUI_USE_NAMESPACE using namespace Dock; SoundItem::SoundItem(QWidget *parent) @@ -89,11 +93,17 @@ const QString SoundItem::contextMenu() const open["isActive"] = true; items.push_back(open); - QMap settings; - settings["itemId"] = SETTINGS; - settings["itemText"] = tr("Sound settings"); - settings["isActive"] = true; - items.push_back(settings); + if (!QFile::exists(ICBC_CONF_FILE)) { + QMap settings; + settings["itemId"] = SETTINGS; + settings["itemText"] = tr("Sound settings"); + settings["isActive"] = true; + items.push_back(settings); +#ifdef QT_DEBUG + qInfo() << "----------icbc sound setting."; +#endif + } + QMap menu; menu["items"] = items;