feat: 增加集中管控相关功能,所有功能可通过全局一个配置启用或禁用。

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: <mailman@uniontech.com>
Reviewed-by: niecheng <niecheng@uniontech.com>
Reviewed-by: wangwei <wangwei@uniontech.com>
Tested-by: <mailman@uniontech.com>
This commit is contained in:
曹威 2020-08-19 14:13:35 +08:00 committed by caowei
parent e040b7bfa3
commit b342f6f884
12 changed files with 142 additions and 56 deletions

View File

@ -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 <QAccessible>
#include <QDir>
#include <QStandardPaths>
#include <QDateTime>
#include <QGSettings>
#include <DApplication>
#include <DLog>
#include <DDBusSender>
#include <DGuiApplicationHelper>
#include <unistd.h>
#include "dbus/dbusdockadaptors.h"
#include <string>
#include <sys/mman.h>
#include <stdio.h>
#include <time.h>
@ -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

View File

@ -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));
}

View File

@ -2,8 +2,12 @@
#include <QImageReader>
#include <QApplication>
#include <QScreen>
#include <QGSettings>
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();
}
}

View File

@ -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)

View File

@ -21,6 +21,7 @@
#include "datetimeplugin.h"
#include "../../widgets/tipswidget.h"
#include "../../frame/util/utils.h"
#include <DDBusSender>
#include <QLabel>
@ -159,11 +160,13 @@ const QString DatetimePlugin::itemContextMenu(const QString &itemKey)
settings["isActive"] = true;
items.push_back(settings);
QMap<QString, QVariant> open;
open["itemId"] = "open";
open["itemText"] = tr("Time settings");
open["isActive"] = true;
items.push_back(open);
if (!QFile::exists(ICBC_CONF_FILE)) {
QMap<QString, QVariant> open;
open["itemId"] = "open";
open["itemText"] = tr("Time settings");
open["isActive"] = true;
items.push_back(open);
}
QMap<QString, QVariant> menu;
menu["items"] = items;

View File

@ -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}
)

View File

@ -20,10 +20,13 @@
*/
#include "deviceitem.h"
#include "../frame/util/utils.h"
#include <DDBusSender>
#include <QJsonDocument>
#include <QGSettings>
#include <QFile>
using namespace dde::network;
@ -62,11 +65,13 @@ const QString DeviceItem::itemContextMenu()
enable["isActive"] = true;
items.push_back(enable);
QMap<QString, QVariant> settings;
settings["itemId"] = "settings";
settings["itemText"] = tr("Network settings");
settings["isActive"] = true;
items.push_back(settings);
if (!QFile::exists(ICBC_CONF_FILE)) {
QMap<QString, QVariant> settings;
settings["itemId"] = "settings";
settings["itemText"] = tr("Network settings");
settings["isActive"] = true;
items.push_back(settings);
}
QMap<QString, QVariant> menu;
menu["items"] = items;

View File

@ -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)

View File

@ -22,6 +22,7 @@
#include "powerplugin.h"
#include "dbus/dbusaccount.h"
#include "../widgets/tipswidget.h"
#include "../frame/util/utils.h"
#include <QIcon>
#include <QGSettings>
@ -121,11 +122,13 @@ const QString PowerPlugin::itemContextMenu(const QString &itemKey)
QList<QVariant> items;
items.reserve(6);
QMap<QString, QVariant> power;
power["itemId"] = "power";
power["itemText"] = tr("Power settings");
power["isActive"] = true;
items.push_back(power);
if (!QFile::exists(ICBC_CONF_FILE)) {
QMap<QString, QVariant> power;
power["itemId"] = "power";
power["itemText"] = tr("Power settings");
power["isActive"] = true;
items.push_back(power);
}
QMap<QString, QVariant> menu;
menu["items"] = items;

View File

@ -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)

View File

@ -21,6 +21,7 @@
#include "shutdownplugin.h"
#include "dbus/dbusaccount.h"
#include "../frame/util/utils.h"
#include "../widgets/tipswidget.h"
#include <QIcon>
@ -161,21 +162,23 @@ const QString ShutdownPlugin::itemContextMenu(const QString &itemKey)
logout["isActive"] = true;
items.push_back(logout);
if (DBusAccount().userList().count() > 1) {
QMap<QString, QVariant> 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<QString, QVariant> switchUser;
switchUser["itemId"] = "SwitchUser";
switchUser["itemText"] = tr("Switch account");
switchUser["isActive"] = true;
items.push_back(switchUser);
}
#ifndef DISABLE_POWER_OPTIONS
QMap<QString, QVariant> power;
power["itemId"] = "power";
power["itemText"] = tr("Power settings");
power["isActive"] = true;
items.push_back(power);
QMap<QString, QVariant> power;
power["itemId"] = "power";
power["itemText"] = tr("Power settings");
power["isActive"] = true;
items.push_back(power);
#endif
}
QMap<QString, QVariant> 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()<<"----------"<<reply;
#endif
} else {
QProcess::startDetached("dbus-send", QStringList() << "--print-reply"
<< "--dest=com.deepin.dde.lockFront"
<< "/com/deepin/dde/lockFront"
<< QString("com.deepin.dde.lockFront.Show"));
}
}
else
QProcess::startDetached("dbus-send", QStringList() << "--print-reply"
<< "--dest=com.deepin.dde.shutdownFront"

View File

@ -19,25 +19,29 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "sounditem.h"
#include "constants.h"
#include <QPainter>
#include <QIcon>
#include <QMouseEvent>
#include <QGSettings>
#include <QApplication>
#include <DApplication>
#include <DDBusSender>
#include <DGuiApplicationHelper>
DWIDGET_USE_NAMESPACE
DGUI_USE_NAMESPACE
#include "sounditem.h"
#include "constants.h"
#include "../widgets/tipswidget.h"
#include "../frame/util/imageutil.h"
#include <DGuiApplicationHelper>
#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<QString, QVariant> settings;
settings["itemId"] = SETTINGS;
settings["itemText"] = tr("Sound settings");
settings["isActive"] = true;
items.push_back(settings);
if (!QFile::exists(ICBC_CONF_FILE)) {
QMap<QString, QVariant> 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<QString, QVariant> menu;
menu["items"] = items;