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