diff --git a/panels/dock/api/dbus/org.deepin.ds.dock.xml b/panels/dock/api/dbus/org.deepin.ds.dock.xml
index b69823697..7993cc9cf 100644
--- a/panels/dock/api/dbus/org.deepin.ds.dock.xml
+++ b/panels/dock/api/dbus/org.deepin.ds.dock.xml
@@ -7,6 +7,7 @@
+
diff --git a/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml b/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
index b49a64ba5..aac0eb5dc 100644
--- a/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
+++ b/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
@@ -24,6 +24,7 @@
+
@@ -46,5 +47,8 @@
+
+
+
diff --git a/panels/dock/api/old/org.deepin.dde.dock1.xml b/panels/dock/api/old/org.deepin.dde.dock1.xml
index 1e8d649db..51595ec05 100644
--- a/panels/dock/api/old/org.deepin.dde.dock1.xml
+++ b/panels/dock/api/old/org.deepin.dde.dock1.xml
@@ -6,6 +6,7 @@
+
diff --git a/panels/dock/dconfig/org.deepin.ds.dock.json b/panels/dock/dconfig/org.deepin.ds.dock.json
old mode 100644
new mode 100755
index 93f5061bc..218faecc2
--- a/panels/dock/dconfig/org.deepin.ds.dock.json
+++ b/panels/dock/dconfig/org.deepin.ds.dock.json
@@ -53,24 +53,34 @@
"visibility": "private"
},
"Plugins_Visible": {
- "value": {},
- "serial": 0,
- "flags": [],
- "name": "The visibilities of plugins",
- "name[zh_CN]": "插件可见性",
- "description": "The loaded plugin which is visible when dock is started.",
- "permissions": "readwrite",
- "visibility": "private"
+ "value": {},
+ "serial": 0,
+ "flags": [],
+ "name": "The visibilities of plugins",
+ "name[zh_CN]": "插件可见性",
+ "description": "The loaded plugin which is visible when dock is started.",
+ "permissions": "readwrite",
+ "visibility": "private"
},
"Show_In_Primary": {
"value": true,
- "serial": 0,
- "flags": [],
- "name": "show_in_primary",
- "name[zh_CN]": "任务栏显示在主屏幕",
- "description": "show dock in primary screen",
- "permissions": "readwrite",
- "visibility": "private"
+ "serial": 0,
+ "flags": [],
+ "name": "show_in_primary",
+ "name[zh_CN]": "任务栏显示在主屏幕",
+ "description": "show dock in primary screen",
+ "permissions": "readwrite",
+ "visibility": "private"
+ },
+ "Locked": {
+ "value": false,
+ "serial": 0,
+ "flags": [],
+ "name": "locked",
+ "name[zh_CN]": "禁用自由调节",
+ "description": "lock dock to prevent dragging resize",
+ "permissions": "readwrite",
+ "visibility": "private"
}
}
}
diff --git a/panels/dock/dockdbusproxy.cpp b/panels/dock/dockdbusproxy.cpp
index 02e7c0ed8..f70f94ab2 100644
--- a/panels/dock/dockdbusproxy.cpp
+++ b/panels/dock/dockdbusproxy.cpp
@@ -281,5 +281,18 @@ void DockDBusProxy::setShowInPrimary(bool newShowInPrimary)
parent()->setShowInPrimary(newShowInPrimary);
}
+bool DockDBusProxy::locked() const
+{
+ return parent()->locked();
+}
+
+void DockDBusProxy::setLocked(bool newLocked)
+{
+ if (parent()->locked() == newLocked)
+ return;
+
+ parent()->setLocked(newLocked);
+}
+
}
diff --git a/panels/dock/dockdbusproxy.h b/panels/dock/dockdbusproxy.h
index 4c9a21946..36746d7e8 100644
--- a/panels/dock/dockdbusproxy.h
+++ b/panels/dock/dockdbusproxy.h
@@ -32,6 +32,7 @@ class DockDBusProxy final: public QObject, public QDBusContext
Q_PROPERTY(uint WindowSizeFashion READ windowSizeFashion WRITE setWindowSizeFashion)
Q_PROPERTY(int DisplayMode READ displayMode WRITE setDisplayMode FINAL)
Q_PROPERTY(bool showInPrimary READ showInPrimary WRITE setShowInPrimary FINAL)
+ Q_PROPERTY(bool locked READ locked WRITE setLocked FINAL)
public:
@@ -74,6 +75,9 @@ class DockDBusProxy final: public QObject, public QDBusContext
bool showInPrimary() const;
void setShowInPrimary(bool newShowInPrimary);
+ bool locked() const;
+ void setLocked(bool newLocked);
+
Q_SIGNALS:
void pluginVisibleChanged(const QString &pluginName, bool visible) const;
diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp
index a635d32fa..b4b7aa5ed 100644
--- a/panels/dock/dockpanel.cpp
+++ b/panels/dock/dockpanel.cpp
@@ -109,6 +109,7 @@ bool DockPanel::init()
connect(SETTINGS, &DockSettings::hideModeChanged, this, &DockPanel::hideModeChanged);
connect(SETTINGS, &DockSettings::itemAlignmentChanged, this, &DockPanel::itemAlignmentChanged);
connect(SETTINGS, &DockSettings::indicatorStyleChanged, this, &DockPanel::indicatorStyleChanged);
+ connect(SETTINGS, &DockSettings::lockedChanged, this, &DockPanel::lockedChanged);
connect(SETTINGS, &DockSettings::dockSizeChanged, this, [this, dockDaemonAdaptor](){
Q_EMIT dockDaemonAdaptor->WindowSizeEfficientChanged(dockSize());
@@ -121,6 +122,9 @@ bool DockPanel::init()
connect(SETTINGS, &DockSettings::itemAlignmentChanged, this, [this, dockDaemonAdaptor](){
Q_EMIT dockDaemonAdaptor->DisplayModeChanged(itemAlignment());
});
+ connect(SETTINGS, &DockSettings::lockedChanged, this, [this, dockDaemonAdaptor](){
+ Q_EMIT dockDaemonAdaptor->LockedChanged(locked());
+ });
DPanel::init();
@@ -368,6 +372,16 @@ void DockPanel::setShowInPrimary(bool newShowInPrimary)
disconnect(qApp, &QGuiApplication::primaryScreenChanged, this, &DockPanel::updateDockScreen);
}
+bool DockPanel::locked() const
+{
+ return SETTINGS->locked();
+}
+
+void DockPanel::setLocked(bool newLocked)
+{
+ SETTINGS->setLocked(newLocked);
+}
+
D_APPLET_CLASS(DockPanel)
void DockPanel::setHideState(HideState newHideState)
diff --git a/panels/dock/dockpanel.h b/panels/dock/dockpanel.h
index 12d793438..9c489b4ed 100644
--- a/panels/dock/dockpanel.h
+++ b/panels/dock/dockpanel.h
@@ -32,6 +32,7 @@ class DockPanel : public DS_NAMESPACE::DPanel, public QDBusContext
Q_PROPERTY(IndicatorStyle indicatorStyle READ indicatorStyle WRITE setIndicatorStyle NOTIFY indicatorStyleChanged FINAL)
Q_PROPERTY(bool showInPrimary READ showInPrimary WRITE setShowInPrimary NOTIFY showInPrimaryChanged FINAL)
Q_PROPERTY(QString screenName READ screenName NOTIFY screenNameChanged FINAL)
+ Q_PROPERTY(bool locked READ locked WRITE setLocked NOTIFY lockedChanged FINAL)
Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio NOTIFY devicePixelRatioChanged FINAL)
@@ -81,6 +82,9 @@ class DockPanel : public DS_NAMESPACE::DPanel, public QDBusContext
bool showInPrimary() const;
void setShowInPrimary(bool newShowInPrimary);
+ bool locked() const;
+ void setLocked(bool newLocked);
+
void setHideState(HideState newHideState);
QScreen* dockScreen();
void setDockScreen(QScreen *screen);
@@ -116,6 +120,7 @@ private Q_SLOTS:
void screenNameChanged();
void requestClosePopup();
void devicePixelRatioChanged(qreal ratio);
+ void lockedChanged(bool locked);
void contextDraggingChanged();
diff --git a/panels/dock/docksettings.cpp b/panels/dock/docksettings.cpp
index 24cdff1f0..137c73bb1 100644
--- a/panels/dock/docksettings.cpp
+++ b/panels/dock/docksettings.cpp
@@ -18,6 +18,7 @@ const static QString keyItemAlignment = "Item_Alignment";
const static QString keyIndicatorStyle = "Indicator_Style";
const static QString keyPluginsVisible = "Plugins_Visible";
const static QString keyShowInPrimary = "Show_In_Primary";
+const static QString keyLocked = "Locked";
namespace dock {
@@ -131,6 +132,7 @@ DockSettings::DockSettings(QObject* parent)
, m_dockPosition(dock::Bottom)
, m_alignment(dock::CenterAlignment)
, m_style(dock::Fashion)
+ , m_locked(false)
{
m_writeTimer->setSingleShot(true);
m_writeTimer->setInterval(1000);
@@ -147,6 +149,7 @@ void DockSettings::init()
m_style = string2IndicatorStyle(m_dockConfig->value(keyIndicatorStyle).toString());
m_pluginsVisible = m_dockConfig->value(keyPluginsVisible).toMap();
m_showInPrimary = m_dockConfig->value(keyShowInPrimary).toBool();
+ m_locked = m_dockConfig->value(keyLocked).toBool();
connect(m_dockConfig.data(), &DConfig::valueChanged, this, [this](const QString& key){
if (keyDockSize == key) {
@@ -182,6 +185,11 @@ void DockSettings::init()
if (showInPrimary == m_showInPrimary) return;
m_showInPrimary = showInPrimary;
Q_EMIT showInPrimaryChanged(m_showInPrimary);
+ } else if (keyLocked == key) {
+ auto locked = m_dockConfig->value(keyLocked).toBool();
+ if (locked == m_locked) return;
+ m_locked = locked;
+ Q_EMIT lockedChanged(m_locked);
}
});
} else {
@@ -289,6 +297,21 @@ bool DockSettings::showInPrimary() const
return m_showInPrimary;
}
+bool DockSettings::locked() const
+{
+ return m_locked;
+}
+
+void DockSettings::setLocked(bool newLocked)
+{
+ if (m_locked == newLocked) {
+ return;
+ }
+ m_locked = newLocked;
+ m_dockConfig->setValue(keyLocked, m_locked);
+ Q_EMIT lockedChanged(m_locked);
+}
+
void DockSettings::addWriteJob(WriteJob job)
{
if (m_writeJob.contains(job)) return;
@@ -346,5 +369,4 @@ void DockSettings::checkWriteJob()
m_writeTimer->start();
}
-
}
diff --git a/panels/dock/docksettings.h b/panels/dock/docksettings.h
index ff66b4cd5..8635a81e1 100644
--- a/panels/dock/docksettings.h
+++ b/panels/dock/docksettings.h
@@ -26,6 +26,7 @@ class DockSettings : public QObject
Q_PROPERTY(IndicatorStyle indicatorStyle READ indicatorStyle WRITE setIndicatorStyle NOTIFY indicatorStyleChanged FINAL)
Q_PROPERTY(QVariantMap pluginsVisible READ pluginsVisible WRITE setPluginsVisible NOTIFY pluginsVisibleChanged FINAL)
Q_PROPERTY(bool showInPrimary READ showInPrimary WRITE setShowInPrimary NOTIFY showInPrimaryChanged FINAL)
+ Q_PROPERTY(bool locked READ locked WRITE setLocked NOTIFY lockedChanged FINAL)
public:
static DockSettings* instance();
@@ -37,6 +38,7 @@ class DockSettings : public QObject
IndicatorStyle indicatorStyle();
QVariantMap pluginsVisible();
bool showInPrimary() const;
+ bool locked() const;
void setDockSize(const uint& size);
void setHideMode(const HideMode& mode);
@@ -45,6 +47,7 @@ class DockSettings : public QObject
void setIndicatorStyle(const IndicatorStyle& style);
void setPluginsVisible(const QVariantMap & pluginsVisible);
void setShowInPrimary(bool newShowInPrimary);
+ void setLocked(bool newLocked);
private:
enum WriteJob {
@@ -70,6 +73,7 @@ class DockSettings : public QObject
void pluginsVisibleChanged(const QVariantMap &pluginsVisible);
void showInPrimaryChanged(bool showInPrimary);
+ void lockedChanged(bool locked);
private:
QScopedPointer m_dockConfig;
@@ -83,5 +87,6 @@ class DockSettings : public QObject
IndicatorStyle m_style;
QVariantMap m_pluginsVisible;
bool m_showInPrimary;
+ bool m_locked;
};
}
diff --git a/panels/dock/package/main.qml b/panels/dock/package/main.qml
index 5bba56eb0..cf9f8ce49 100644
--- a/panels/dock/package/main.qml
+++ b/panels/dock/package/main.qml
@@ -293,7 +293,13 @@ Window {
value: Dock.SmartHide
}
}
-
+ LP.MenuItem {
+ text: qsTr("Lock the Dock")
+ checked: Panel.locked
+ onTriggered: {
+ Panel.locked = !Panel.locked
+ }
+ }
LP.MenuItem {
text: qsTr("Dock Settings")
onTriggered: {
@@ -481,6 +487,9 @@ Window {
propagateComposedEvents: true
cursorShape: {
+ if (Panel.locked) {
+ return Qt.ArrowCursor
+ }
if (Panel.position == Dock.Top || Panel.position == Dock.Bottom) {
return Qt.SizeVerCursor
}
@@ -488,6 +497,7 @@ Window {
}
onPressed: function(mouse) {
+ if (Panel.locked) return
dock.isDragging = true
oldMousePos = mapToGlobal(mouse.x, mouse.y)
oldDockSize = dockSize
@@ -500,7 +510,7 @@ Window {
onClicked: {}
onPositionChanged: function(mouse) {
- if (!dock.isDragging) return
+ if (Panel.locked || !dock.isDragging) return
var newPos = mapToGlobal(mouse.x, mouse.y)
var xChange = newPos.x - oldMousePos.x
var yChange = newPos.y - oldMousePos.y
@@ -536,6 +546,7 @@ Window {
}
onReleased: function(mouse) {
+ if (Panel.locked) return
dock.isDragging = false
Applet.dockSize = dockSize
itemIconSizeBase = dockItemMaxSize
diff --git a/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.cpp b/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.cpp
index 9b9076e8e..511ed7d10 100644
--- a/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.cpp
+++ b/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.cpp
@@ -1,14 +1,14 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
- * Command line was: qdbusxml2cpp ./dde-shell/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml -a ./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor -i ./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1.h
+ * Source file was org.deepin.dde.daemon.Dock1.xml
*
- * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd.
+ * qdbusxml2cpp is Copyright (C) The Qt Company Ltd. and other contributors.
*
* This is an auto-generated file.
* Do not edit! All changes made to it will be lost.
*/
-#include "./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h"
+#include "./toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h"
#include
#include
#include
@@ -69,6 +69,18 @@ int Dock1Adaptor::hideState() const
return qvariant_cast< int >(parent()->property("HideState"));
}
+bool Dock1Adaptor::locked() const
+{
+ // get the value of property Locked
+ return qvariant_cast< bool >(parent()->property("Locked"));
+}
+
+void Dock1Adaptor::setLocked(bool value)
+{
+ // set the value of property Locked
+ parent()->setProperty("Locked", QVariant::fromValue(value));
+}
+
int Dock1Adaptor::position() const
{
// get the value of property Position
diff --git a/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h b/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h
index dae189785..80c99e7f9 100644
--- a/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h
+++ b/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor.h
@@ -1,8 +1,8 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
- * Command line was: qdbusxml2cpp ./dde-shell/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml -a ./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1Adaptor -i ./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1.h
+ * Source file was org.deepin.dde.daemon.Dock1.xml
*
- * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd.
+ * qdbusxml2cpp is Copyright (C) The Qt Company Ltd. and other contributors.
*
* This is an auto-generated file.
* This file may have been hand-edited. Look for HAND-EDIT comments
@@ -14,15 +14,8 @@
#include
#include
-#include "./dde-shell/toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1.h"
-QT_BEGIN_NAMESPACE
-class QByteArray;
-template class QList;
-template class QMap;
-class QString;
-class QStringList;
-class QVariant;
-QT_END_NAMESPACE
+#include "./toolGenerate/qdbusxml2cpp/org.deepin.dde.daemon.Dock1.h"
+#include
/*
* Adaptor class for interface org.deepin.dde.daemon.Dock1
@@ -52,6 +45,7 @@ class Dock1Adaptor: public QDBusAbstractAdaptor
" \n"
" \n"
" \n"
+" \n"
" \n"
" \n"
" \n"
@@ -74,11 +68,14 @@ class Dock1Adaptor: public QDBusAbstractAdaptor
" \n"
" \n"
" \n"
+" \n"
+" \n"
+" \n"
" \n"
"")
public:
Dock1Adaptor(QObject *parent);
- virtual ~Dock1Adaptor();
+ ~Dock1Adaptor() override;
public: // PROPERTIES
Q_PROPERTY(int DisplayMode READ displayMode WRITE setDisplayMode)
@@ -95,6 +92,10 @@ class Dock1Adaptor: public QDBusAbstractAdaptor
Q_PROPERTY(int HideState READ hideState)
int hideState() const;
+ Q_PROPERTY(bool Locked READ locked WRITE setLocked)
+ bool locked() const;
+ void setLocked(bool value);
+
Q_PROPERTY(int Position READ position WRITE setPosition)
int position() const;
void setPosition(int value);
@@ -115,6 +116,7 @@ public Q_SLOTS: // METHODS
void DisplayModeChanged(int displaymode);
void FrontendWindowRectChanged(const QRect &FrontendWindowRect);
void HideModeChanged(int hideMode);
+ void LockedChanged(bool locked);
void PositionChanged(int Position);
void WindowSizeEfficientChanged(uint size);
void WindowSizeFashionChanged(uint size);