mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
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:
parent
e040b7bfa3
commit
b342f6f884
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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}
|
||||
)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user