diff --git a/plugins/dcc-dock-plugin/CMakeLists.txt b/plugins/dcc-dock-plugin/CMakeLists.txt
index 221f82f6b..b6b5982be 100644
--- a/plugins/dcc-dock-plugin/CMakeLists.txt
+++ b/plugins/dcc-dock-plugin/CMakeLists.txt
@@ -22,6 +22,7 @@ add_library(${PLUGIN_NAME} SHARED ${SRCS} resources.qrc)
set_target_properties(${PLUGIN_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ./)
target_include_directories(${PLUGIN_NAME} PUBLIC
../src
+ ../../frame/util
${Qt5Widgets_INCLUDE_DIRS}
${DtkWidget_INCLUDE_DIRS}
${DdeControlCenter_INCLUDE_DIR}
diff --git a/plugins/dcc-dock-plugin/module_widget.cpp b/plugins/dcc-dock-plugin/module_widget.cpp
index b35311bbf..752d45cac 100644
--- a/plugins/dcc-dock-plugin/module_widget.cpp
+++ b/plugins/dcc-dock-plugin/module_widget.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*/
#include "module_widget.h"
+#include "utils.h"
#include
#include
@@ -29,6 +30,8 @@
#include
#include
+#include
+#include
#include
#include
#include
@@ -102,65 +105,79 @@ void ModuleWidget::initUI()
static QMap g_modeMap = {{tr("Fashion mode"), Fashion}
, {tr("Efficient mode"), Efficient}};
// 模式
- m_modeComboxWidget->setTitle(tr("Mode"));
- m_modeComboxWidget->addBackground();
- m_modeComboxWidget->setComboxOption(QStringList() << tr("Fashion mode") << tr("Efficient mode"));
- m_modeComboxWidget->setCurrentText(g_modeMap.key(m_daemonDockInter->displayMode()));
- connect(m_modeComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
- m_daemonDockInter->setDisplayMode(g_modeMap.value(text));
- });
- connect(m_daemonDockInter, &DBusDock::DisplayModeChanged, this, [ = ] (int value) {
- DisplayMode mode = static_cast(value);
- if (g_modeMap.key(mode) == m_modeComboxWidget->comboBox()->currentText())
- return;
+ if (Utils::SettingValue("com.deepin.dde.dock.module.menu", QByteArray(), "modeVisible", true).toBool()) {
+ m_modeComboxWidget->setTitle(tr("Mode"));
+ m_modeComboxWidget->addBackground();
+ m_modeComboxWidget->setComboxOption(QStringList() << tr("Fashion mode") << tr("Efficient mode"));
+ m_modeComboxWidget->setCurrentText(g_modeMap.key(m_daemonDockInter->displayMode()));
+ connect(m_modeComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
+ m_daemonDockInter->setDisplayMode(g_modeMap.value(text));
+ });
+ connect(m_daemonDockInter, &DBusDock::DisplayModeChanged, this, [ = ] (int value) {
+ DisplayMode mode = static_cast(value);
+ if (g_modeMap.key(mode) == m_modeComboxWidget->comboBox()->currentText())
+ return;
- m_modeComboxWidget->setCurrentText(g_modeMap.key(mode));
- });
- layout->addWidget(m_modeComboxWidget);
- m_dconfigWatcher->bind("Control-Center_Dock_Model", m_modeComboxWidget);
+ m_modeComboxWidget->setCurrentText(g_modeMap.key(mode));
+ });
+ layout->addWidget(m_modeComboxWidget);
+ m_dconfigWatcher->bind("Control-Center_Dock_Model", m_modeComboxWidget);
+ } else {
+ m_modeComboxWidget->setVisible(false);
+ }
- static QMap g_positionMap = {{tr("Top"), Top}
- , {tr("Bottom"), Bottom}
- , {tr("Left"), Left}
- , {tr("Right"), Right}};
- // 位置
- m_positionComboxWidget->setTitle(tr("Location"));
- m_positionComboxWidget->addBackground();
- m_positionComboxWidget->setComboxOption(QStringList() << tr("Top") << tr("Bottom") << tr("Left") << tr("Right"));
- m_positionComboxWidget->setCurrentText(g_positionMap.key(m_daemonDockInter->position()));
- connect(m_positionComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
- m_daemonDockInter->setPosition(g_positionMap.value(text));
- });
- connect(m_daemonDockInter, &DBusDock::PositionChanged, this, [ = ] (int position) {
- Position pos = static_cast(position);
- if (g_positionMap.key(pos) == m_positionComboxWidget->comboBox()->currentText())
- return;
+ if (Utils::SettingValue("com.deepin.dde.dock.module.menu", QByteArray(), "locationVisible", true).toBool()) {
+ // 位置
+ static QMap g_positionMap = {{tr("Top"), Top}
+ , {tr("Bottom"), Bottom}
+ , {tr("Left"), Left}
+ , {tr("Right"), Right}};
- m_positionComboxWidget->setCurrentText(g_positionMap.key(pos));
- });
- layout->addWidget(m_positionComboxWidget);
- m_dconfigWatcher->bind("Control-Center_Dock_Location", m_positionComboxWidget);
+ m_positionComboxWidget->setTitle(tr("Location"));
+ m_positionComboxWidget->addBackground();
+ m_positionComboxWidget->setComboxOption(QStringList() << tr("Top") << tr("Bottom") << tr("Left") << tr("Right"));
+ m_positionComboxWidget->setCurrentText(g_positionMap.key(m_daemonDockInter->position()));
+ connect(m_positionComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
+ m_daemonDockInter->setPosition(g_positionMap.value(text));
+ });
+ connect(m_daemonDockInter, &DBusDock::PositionChanged, this, [ = ] (int position) {
+ Position pos = static_cast(position);
+ if (g_positionMap.key(pos) == m_positionComboxWidget->comboBox()->currentText())
+ return;
+
+ m_positionComboxWidget->setCurrentText(g_positionMap.key(pos));
+ });
+ layout->addWidget(m_positionComboxWidget);
+ m_dconfigWatcher->bind("Control-Center_Dock_Location", m_positionComboxWidget);
+ } else {
+ m_positionComboxWidget->setVisible(false);
+ }
- static QMap g_stateMap = {{tr("Keep shown"), KeepShowing}
- , {tr("Keep hidden"), KeepHidden}
- , {tr("Smart hide"), SmartHide}};
// 状态
- m_stateComboxWidget->setTitle(tr("Status"));
- m_stateComboxWidget->addBackground();
- m_stateComboxWidget->setComboxOption(QStringList() << tr("Keep shown") << tr("Keep hidden") << tr("Smart hide"));
- m_stateComboxWidget->setCurrentText(g_stateMap.key(m_daemonDockInter->hideMode()));
- connect(m_stateComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
- m_daemonDockInter->setHideMode(g_stateMap.value(text));
- });
- connect(m_daemonDockInter, &DBusDock::HideModeChanged, this, [ = ] (int value) {
- HideMode mode = static_cast(value);
- if (g_stateMap.key(mode) == m_stateComboxWidget->comboBox()->currentText())
- return;
+ if (Utils::SettingValue("com.deepin.dde.dock.module.menu", QByteArray(), "statusVisible", true).toBool()) {
+ static QMap g_stateMap = {{tr("Keep shown"), KeepShowing}
+ , {tr("Keep hidden"), KeepHidden}
+ , {tr("Smart hide"), SmartHide}};
- m_stateComboxWidget->setCurrentText(g_stateMap.key(mode));
- });
- layout->addWidget(m_stateComboxWidget);
- m_dconfigWatcher->bind("Control-Center_Dock_State", m_stateComboxWidget);
+ m_stateComboxWidget->setTitle(tr("Status"));
+ m_stateComboxWidget->addBackground();
+ m_stateComboxWidget->setComboxOption(QStringList() << tr("Keep shown") << tr("Keep hidden") << tr("Smart hide"));
+ m_stateComboxWidget->setCurrentText(g_stateMap.key(m_daemonDockInter->hideMode()));
+ connect(m_stateComboxWidget, &ComboxWidget::onSelectChanged, this, [ = ] (const QString &text) {
+ m_daemonDockInter->setHideMode(g_stateMap.value(text));
+ });
+ connect(m_daemonDockInter, &DBusDock::HideModeChanged, this, [ = ] (int value) {
+ HideMode mode = static_cast(value);
+ if (g_stateMap.key(mode) == m_stateComboxWidget->comboBox()->currentText())
+ return;
+
+ m_stateComboxWidget->setCurrentText(g_stateMap.key(mode));
+ });
+ layout->addWidget(m_stateComboxWidget);
+ m_dconfigWatcher->bind("Control-Center_Dock_State", m_stateComboxWidget);
+ } else {
+ m_stateComboxWidget->setVisible(false);
+ }
// 高度调整控件
m_sizeSlider->addBackground();
@@ -196,7 +213,10 @@ void ModuleWidget::initUI()
layout->addWidget(m_sizeSlider);
// 多屏显示设置
- if (QDBusConnection::sessionBus().interface()->isServiceRegistered("com.deepin.dde.Dock")) {
+ if (QDBusConnection::sessionBus().interface()->isServiceRegistered("com.deepin.dde.Dock")
+ && QApplication::screens().size() > 1
+ && !isCopyMode()
+ && Utils::SettingValue("com.deepin.dde.dock.module.menu", QByteArray(), "multiscreenVisible", true).toBool()) {
static QMap g_screenSettingMap = {{tr("On screen where the cursor is"), false}
, {tr("Only on main screen"), true}};
@@ -229,7 +249,8 @@ void ModuleWidget::initUI()
// 插件区域
QDBusPendingReply reply = m_dockInter->GetLoadedPlugins();
QStringList plugins = reply.value();
- if (reply.error().type() != QDBusError::ErrorType::NoError) {
+ if (reply.error().type() != QDBusError::ErrorType::NoError
+ || !Utils::SettingValue("com.deepin.dde.dock.module.menu", QByteArray(), "hideVisible", true).toBool()) {
m_pluginAreaTitle->setVisible(false);
m_pluginTips->setVisible(false);
m_pluginView->setVisible(false);
@@ -323,6 +344,28 @@ void ModuleWidget::initUI()
setWidget(widget);
}
+/**判断屏幕是否为复制模式的依据,第一个屏幕的X和Y值是否和其他的屏幕的X和Y值相等
+ * 对于复制模式,这两个值肯定是相等的,如果不是复制模式,这两个值肯定不等,目前支持双屏
+ * @brief DisplayManager::isCopyMode
+ * @return
+ */
+bool ModuleWidget::isCopyMode()
+{
+ QList screens = qApp->screens();
+ if (screens.size() < 2)
+ return false;
+
+ // 在多个屏幕的情况下,如果所有屏幕的位置的X和Y值都相等,则认为是复制模式
+ QRect screenRect = screens[0]->availableGeometry();
+ for (int i = 1; i < screens.size(); i++) {
+ QRect rect = screens[i]->availableGeometry();
+ if (screenRect.x() != rect.x() || screenRect.y() != rect.y())
+ return false;
+ }
+
+ return true;
+}
+
void ModuleWidget::updateSliderValue()
{
auto displayMode = m_daemonDockInter->displayMode();
diff --git a/plugins/dcc-dock-plugin/module_widget.h b/plugins/dcc-dock-plugin/module_widget.h
index ba7fe1af7..4708490c6 100644
--- a/plugins/dcc-dock-plugin/module_widget.h
+++ b/plugins/dcc-dock-plugin/module_widget.h
@@ -59,6 +59,7 @@ public:
private:
void initUI();
+ bool isCopyMode();
private Q_SLOTS:
void updateSliderValue();