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 fe26834ea..b49a64ba5 100644
--- a/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
+++ b/panels/dock/api/old/org.deepin.dde.daemon.Dock1.xml
@@ -15,12 +15,12 @@
-
+ -->
+
@@ -34,5 +34,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/panels/dock/constants.h b/panels/dock/constants.h
index 53e71052b..6cb720a69 100644
--- a/panels/dock/constants.h
+++ b/panels/dock/constants.h
@@ -33,8 +33,8 @@ enum IndicatorStyle {
};
enum ItemAlignment {
- LeftAlignment = 0,
- CenterAlignment = 1,
+ CenterAlignment = 0,
+ LeftAlignment = 1,
};
enum ColorTheme {
diff --git a/panels/dock/dockdbusproxy.cpp b/panels/dock/dockdbusproxy.cpp
index 6b28e67cf..29b1f3ded 100644
--- a/panels/dock/dockdbusproxy.cpp
+++ b/panels/dock/dockdbusproxy.cpp
@@ -11,237 +11,263 @@
#include
- namespace dock {
- DockDBusProxy::DockDBusProxy(DockPanel* parent)
- : QObject(parent)
- , m_oldDockApplet(nullptr)
- , m_clipboardApplet(nullptr)
- , m_searchApplet(nullptr)
- {
- registerPluginInfoMetaType();
-
- connect(parent, &DockPanel::geometryChanged, this, &DockDBusProxy::FrontendWindowRectChanged);
- connect(parent, &DockPanel::positionChanged, this, &DockDBusProxy::PositionChanged);
- connect(parent, &DockPanel::hideModeChanged, this, &DockDBusProxy::hideModeChanged);
-
- // Communicate with the other module
- auto getOtherApplet = [ = ] {
- QList list = appletList("org.deepin.ds.dock.tray");
- if (!list.isEmpty()) m_oldDockApplet = list.first();
-
- list = appletList("org.deepin.ds.dock.clipboarditem");
- if (!list.isEmpty()) m_clipboardApplet = list.first();
-
- list = appletList("org.deepin.ds.dock.searchitem");
- if (!list.isEmpty()) m_searchApplet = list.first();
-
- return m_oldDockApplet && m_clipboardApplet && m_searchApplet;
- };
-
- // TODO: DQmlGlobal maybe missing a signal which named `appletListChanged`?
- QTimer *timer = new QTimer;
- timer->setInterval(1000);
- connect(timer, &QTimer::timeout, this, [ = ] {
- if (getOtherApplet()) {
- timer->stop();
- timer->deleteLater();
- }
- });
- timer->start();
- }
+namespace dock {
+DockDBusProxy::DockDBusProxy(DockPanel* parent)
+ : QObject(parent)
+ , m_oldDockApplet(nullptr)
+ , m_clipboardApplet(nullptr)
+ , m_searchApplet(nullptr)
+{
+ registerPluginInfoMetaType();
+
+ // Communicate with the other module
+ auto getOtherApplet = [ = ] {
+ QList list = appletList("org.deepin.ds.dock.tray");
+ if (!list.isEmpty()) m_oldDockApplet = list.first();
+
+ list = appletList("org.deepin.ds.dock.clipboarditem");
+ if (!list.isEmpty()) m_clipboardApplet = list.first();
+
+ list = appletList("org.deepin.ds.dock.searchitem");
+ if (!list.isEmpty()) m_searchApplet = list.first();
+
+ return m_oldDockApplet && m_clipboardApplet && m_searchApplet;
+ };
+
+ // TODO: DQmlGlobal maybe missing a signal which named `appletListChanged`?
+ QTimer *timer = new QTimer;
+ timer->setInterval(1000);
+ connect(timer, &QTimer::timeout, this, [ = ] {
+ if (getOtherApplet()) {
+ timer->stop();
+ timer->deleteLater();
+ }
+ });
+ timer->start();
+}
- DockPanel* DockDBusProxy::parent() const
- {
- return static_cast(QObject::parent());
- }
+DockPanel* DockDBusProxy::parent() const
+{
+ return static_cast(QObject::parent());
+}
- QString DockDBusProxy::getAppID(const QString &desktopfile)
- {
- const QString desktopLeft = "/applications/";
- const QString desktopSuffix = ".desktop";
- return desktopfile.mid(desktopfile.lastIndexOf(desktopLeft) + desktopLeft.size(), desktopfile.lastIndexOf(desktopSuffix) - desktopfile.lastIndexOf(desktopLeft) - desktopLeft.size());
- }
+QString DockDBusProxy::getAppID(const QString &desktopfile)
+{
+ const QString desktopLeft = "/applications/";
+ const QString desktopSuffix = ".desktop";
+ return desktopfile.mid(desktopfile.lastIndexOf(desktopLeft) + desktopLeft.size(), desktopfile.lastIndexOf(desktopSuffix) - desktopfile.lastIndexOf(desktopLeft) - desktopLeft.size());
+}
- QList DockDBusProxy::appletList(const QString &pluginId) const
- {
- QList ret;
- auto root = qobject_cast(DS_NAMESPACE::DPluginLoader::instance()->rootApplet());
-
- QQueue containments;
- containments.enqueue(root);
- while (!containments.isEmpty()) {
- DS_NAMESPACE::DContainment *containment = containments.dequeue();
- for (const auto applet : containment->applets()) {
- if (auto item = qobject_cast(applet)) {
- containments.enqueue(item);
- }
- if (applet->pluginId() == pluginId)
- ret << applet;
+QList DockDBusProxy::appletList(const QString &pluginId) const
+{
+ QList ret;
+ auto root = qobject_cast(DS_NAMESPACE::DPluginLoader::instance()->rootApplet());
+
+ QQueue containments;
+ containments.enqueue(root);
+ while (!containments.isEmpty()) {
+ DS_NAMESPACE::DContainment *containment = containments.dequeue();
+ for (const auto applet : containment->applets()) {
+ if (auto item = qobject_cast(applet)) {
+ containments.enqueue(item);
}
+ if (applet->pluginId() == pluginId)
+ ret << applet;
}
- return ret;
}
+ return ret;
+}
- DS_NAMESPACE::DApplet *DockDBusProxy::applet(const QString &pluginId) const
- {
- const auto list = appletList(pluginId);
- if (!list.isEmpty())
- return list.first();
- return nullptr;
- }
+DS_NAMESPACE::DApplet *DockDBusProxy::applet(const QString &pluginId) const
+{
+ const auto list = appletList(pluginId);
+ if (!list.isEmpty())
+ return list.first();
+ return nullptr;
+}
- QRect DockDBusProxy::geometry()
- {
- return parent()->window() ? parent()->window()->geometry() : QRect();
- }
+QRect DockDBusProxy::geometry()
+{
+ return parent()->window() ? parent()->window()->geometry() : QRect();
+}
- QRect DockDBusProxy::frontendWindowRect()
- {
- return parent()->frontendWindowRect();
- }
+QRect DockDBusProxy::frontendWindowRect()
+{
+ return parent()->frontendWindowRect();
+}
- Position DockDBusProxy::position()
- {
- return parent()->position();
- }
+Position DockDBusProxy::position()
+{
+ return parent()->position();
+}
- void DockDBusProxy::setPosition(Position position)
- {
- parent()->setPosition(position);
- }
+void DockDBusProxy::setPosition(Position position)
+{
+ parent()->setPosition(position);
+}
- HideMode DockDBusProxy::hideMode()
- {
- return parent()->hideMode();
- }
+HideMode DockDBusProxy::hideMode()
+{
+ return parent()->hideMode();
+}
- void DockDBusProxy::setHideMode(HideMode mode)
- {
- parent()->setHideMode(mode);
- }
+void DockDBusProxy::setHideMode(HideMode mode)
+{
+ parent()->setHideMode(mode);
+}
- HideState DockDBusProxy::hideState()
- {
- return parent()->hideState();
- }
+HideState DockDBusProxy::hideState()
+{
+ return parent()->hideState();
+}
- bool DockDBusProxy::RequestDock(const QString &desktopFile, int index) {
- Q_UNUSED(index);
- QString id = getAppID(desktopFile);
- if (id.isEmpty())
- return false;
-
- auto appletItem = applet("org.deepin.ds.dock.taskmanager");
- if (nullptr == appletItem)
- return false;
- bool res = true;
- QMetaObject::invokeMethod(appletItem, "RequestDock", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
- return res;
- }
+uint DockDBusProxy::windowSizeEfficient()
+{
+ return parent()->dockSize();
+}
- bool DockDBusProxy::IsDocked(const QString &desktopFile)
- {
- QString id = getAppID(desktopFile);
- if (id.isEmpty())
- return false;
-
- auto appletItem = applet("org.deepin.ds.dock.taskmanager");
- if (nullptr == appletItem)
- return false;
- bool res = true;
- QMetaObject::invokeMethod(appletItem, "IsDocked", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
- return res;
- }
+void DockDBusProxy::setWindowSizeEfficient(uint size)
+{
+ qDebug() << size;
+ parent()->setDockSize(size);
+}
- bool DockDBusProxy::RequestUndock(const QString &desktopFile)
- {
- QString id = getAppID(desktopFile);
- auto appletItem = applet("org.deepin.ds.dock.taskmanager");
- if (nullptr == appletItem)
- return false;
- bool res = true;
- QMetaObject::invokeMethod(appletItem, "RequestUndock", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
- return res;
- }
+uint DockDBusProxy::windowSizeFashion()
+{
+ return parent()->dockSize();
+}
- QStringList DockDBusProxy::GetLoadedPlugins()
- {
- // TODO: implement this function
- return QStringList();
- }
+void DockDBusProxy::setWindowSizeFashion(uint size)
+{
+ parent()->setDockSize(size);
+}
- DockItemInfos DockDBusProxy::plugins()
- {
- if (m_oldDockApplet) {
- DockItemInfos iteminfos;
- QMetaObject::invokeMethod(m_oldDockApplet, "plugins", Qt::DirectConnection, qReturnArg(iteminfos));
-
- if (m_clipboardApplet) {
- DockItemInfo info;
- if (QMetaObject::invokeMethod(m_clipboardApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
- iteminfos.append(info);
- }
- }
+int DockDBusProxy::displayMode()
+{
+ return parent()->itemAlignment();
+}
+
+void DockDBusProxy::setDisplayMode(int displayMode)
+{
+ parent()->setItemAlignment(static_cast(displayMode));
+}
+
+bool DockDBusProxy::RequestDock(const QString &desktopFile, int index) {
+ Q_UNUSED(index);
+ QString id = getAppID(desktopFile);
+ if (id.isEmpty())
+ return false;
+
+ auto appletItem = applet("org.deepin.ds.dock.taskmanager");
+ if (nullptr == appletItem)
+ return false;
+ bool res = true;
+ QMetaObject::invokeMethod(appletItem, "RequestDock", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
+ return res;
+}
+
+bool DockDBusProxy::IsDocked(const QString &desktopFile)
+{
+ QString id = getAppID(desktopFile);
+ if (id.isEmpty())
+ return false;
+
+ auto appletItem = applet("org.deepin.ds.dock.taskmanager");
+ if (nullptr == appletItem)
+ return false;
+ bool res = true;
+ QMetaObject::invokeMethod(appletItem, "IsDocked", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
+ return res;
+}
+
+bool DockDBusProxy::RequestUndock(const QString &desktopFile)
+{
+ QString id = getAppID(desktopFile);
+ auto appletItem = applet("org.deepin.ds.dock.taskmanager");
+ if (nullptr == appletItem)
+ return false;
+ bool res = true;
+ QMetaObject::invokeMethod(appletItem, "RequestUndock", Qt::DirectConnection, Q_RETURN_ARG(bool, res), Q_ARG(QString, id));
+ return res;
+}
+
+QStringList DockDBusProxy::GetLoadedPlugins()
+{
+ // TODO: implement this function
+ return QStringList();
+}
+
+DockItemInfos DockDBusProxy::plugins()
+{
+ if (m_oldDockApplet) {
+ DockItemInfos iteminfos;
+ QMetaObject::invokeMethod(m_oldDockApplet, "plugins", Qt::DirectConnection, qReturnArg(iteminfos));
- if (m_searchApplet) {
- DockItemInfo info;
- if (QMetaObject::invokeMethod(m_searchApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info)))
- iteminfos.append(info);
+ if (m_clipboardApplet) {
+ DockItemInfo info;
+ if (QMetaObject::invokeMethod(m_clipboardApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
+ iteminfos.append(info);
}
+ }
- return iteminfos;
+ if (m_searchApplet) {
+ DockItemInfo info;
+ if (QMetaObject::invokeMethod(m_searchApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info)))
+ iteminfos.append(info);
}
- return DockItemInfos();
- }
- void DockDBusProxy::ReloadPlugins()
- {
- parent()->ReloadPlugins();
+ return iteminfos;
}
+ return DockItemInfos();
+}
- void DockDBusProxy::callShow()
- {
- parent()->callShow();
- }
+void DockDBusProxy::ReloadPlugins()
+{
+ parent()->ReloadPlugins();
+}
- void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
- {
- if (itemKey == "clipboard" && m_clipboardApplet) {
- QMetaObject::invokeMethod(m_clipboardApplet, "setVisible", Qt::QueuedConnection, visible);
- } else if(itemKey == "search" && m_searchApplet) {
- QMetaObject::invokeMethod(m_searchApplet, "setVisible", Qt::QueuedConnection, visible);
- } else if (m_oldDockApplet) {
- QMetaObject::invokeMethod(m_oldDockApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
- }
- }
+void DockDBusProxy::callShow()
+{
+ parent()->callShow();
+}
- void DockDBusProxy::setPluginVisible(const QString &pluginName, bool visible)
- {
- // TODO: implement this function
- Q_UNUSED(pluginName)
- Q_UNUSED(visible)
+void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
+{
+ if (itemKey == "clipboard" && m_clipboardApplet) {
+ QMetaObject::invokeMethod(m_clipboardApplet, "setVisible", Qt::QueuedConnection, visible);
+ } else if(itemKey == "search" && m_searchApplet) {
+ QMetaObject::invokeMethod(m_searchApplet, "setVisible", Qt::QueuedConnection, visible);
+ } else if (m_oldDockApplet) {
+ QMetaObject::invokeMethod(m_oldDockApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
}
+}
- bool DockDBusProxy::getPluginVisible(const QString &pluginName)
- {
- // TODO: implement this function
- Q_UNUSED(pluginName)
- return true;
- }
+void DockDBusProxy::setPluginVisible(const QString &pluginName, bool visible)
+{
+ // TODO: implement this function
+ Q_UNUSED(pluginName)
+ Q_UNUSED(visible)
+}
- QString DockDBusProxy::getPluginKey(const QString &pluginName)
- {
- // TODO: implement this function
- Q_UNUSED(pluginName)
- return QString();
- }
+bool DockDBusProxy::getPluginVisible(const QString &pluginName)
+{
+ // TODO: implement this function
+ Q_UNUSED(pluginName)
+ return true;
+}
- void DockDBusProxy::resizeDock(int offset, bool dragging)
- {
- // TODO: implement this function
- Q_UNUSED(offset)
- Q_UNUSED(dragging)
- }
+QString DockDBusProxy::getPluginKey(const QString &pluginName)
+{
+ // TODO: implement this function
+ Q_UNUSED(pluginName)
+ return QString();
+}
+
+void DockDBusProxy::resizeDock(int offset, bool dragging)
+{
+ Q_UNUSED(dragging)
+ parent()->setDockSize(offset);
+}
}
diff --git a/panels/dock/dockdbusproxy.h b/panels/dock/dockdbusproxy.h
index 3ee273a5b..051c3ba20 100644
--- a/panels/dock/dockdbusproxy.h
+++ b/panels/dock/dockdbusproxy.h
@@ -20,12 +20,15 @@ namespace dock {
class DockDBusProxy final: public QObject, public QDBusContext
{
Q_OBJECT
- Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged FINAL)
- Q_PROPERTY(QRect FrontendWindowRect READ frontendWindowRect NOTIFY FrontendWindowRectChanged FINAL)
- Q_PROPERTY(Position Position READ position WRITE setPosition NOTIFY PositionChanged FINAL)
+ Q_PROPERTY(QRect geometry READ geometry FINAL)
+ Q_PROPERTY(QRect FrontendWindowRect READ frontendWindowRect FINAL)
+ Q_PROPERTY(Position Position READ position WRITE setPosition FINAL)
- Q_PROPERTY(HideMode HideMode READ hideMode WRITE setHideMode NOTIFY hideModeChanged FINAL)
- Q_PROPERTY(HideState HideState READ hideState NOTIFY hideStateChanged FINAL)
+ Q_PROPERTY(HideMode HideMode READ hideMode WRITE setHideMode FINAL)
+ Q_PROPERTY(HideState HideState READ hideState FINAL)
+ Q_PROPERTY(uint WindowSizeEfficient READ windowSizeEfficient WRITE setWindowSizeEfficient)
+ Q_PROPERTY(uint WindowSizeFashion READ windowSizeFashion WRITE setWindowSizeFashion)
+ Q_PROPERTY(int DisplayMode READ displayMode WRITE setDisplayMode FINAL)
public:
DockDBusProxy(DockPanel* parent = nullptr);
@@ -50,18 +53,20 @@ class DockDBusProxy final: public QObject, public QDBusContext
void setHideMode(HideMode mode);
HideState hideState();
+
+ uint windowSizeEfficient();
+ void setWindowSizeEfficient(uint size);
+
+ uint windowSizeFashion();
+ void setWindowSizeFashion(uint size);
+
+ int displayMode();
+ void setDisplayMode(int displayMode);
+
bool RequestDock(const QString &desktopFile, int index);
bool IsDocked(const QString &desktopFile);
bool RequestUndock(const QString &desktopFile);
-Q_SIGNALS:
- void geometryChanged();
- void hideModeChanged(HideMode mode);
- void hideStateChanged(HideState state);
-
- void PositionChanged(Position position);
- void FrontendWindowRectChanged(QRect rect);
-
private:
DockPanel* parent() const;
QString getAppID(const QString &desktopfile);
diff --git a/panels/dock/dockpanel.cpp b/panels/dock/dockpanel.cpp
index 7bd99accc..fbe1de9e2 100644
--- a/panels/dock/dockpanel.cpp
+++ b/panels/dock/dockpanel.cpp
@@ -3,7 +3,6 @@
// SPDX-License-Identifier: GPL-3.0-or-later
#include "panel.h"
-#include "dsglobal.h"
#include "constants.h"
#include "dockpanel.h"
#include "dockadaptor.h"
@@ -60,8 +59,11 @@ bool DockPanel::init()
DockDaemonAdaptor* dockDaemonAdaptor = new DockDaemonAdaptor(proxy);
QDBusConnection::sessionBus().registerService("org.deepin.dde.daemon.Dock1");
QDBusConnection::sessionBus().registerObject("/org/deepin/dde/daemon/Dock1", "org.deepin.dde.daemon.Dock1", proxy);
- connect(SETTINGS, &DockSettings::positionChanged, this, [this](){
+ connect(SETTINGS, &DockSettings::positionChanged, this, [this, dockDaemonAdaptor](){
Q_EMIT positionChanged(position());
+ Q_EMIT dockDaemonAdaptor->PositionChanged(position());
+ Q_EMIT dockDaemonAdaptor->FrontendWindowRectChanged(frontendWindowRect());
+
QMetaObject::invokeMethod(this,[this](){
Q_EMIT onWindowGeometryChanged();
});
@@ -71,6 +73,19 @@ 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::dockSizeChanged, this, [this, dockDaemonAdaptor](){
+ Q_EMIT dockDaemonAdaptor->WindowSizeEfficientChanged(dockSize());
+ Q_EMIT dockDaemonAdaptor->WindowSizeFashionChanged(dockSize());
+ Q_EMIT dockDaemonAdaptor->FrontendWindowRectChanged(frontendWindowRect());
+ });
+ connect(SETTINGS, &DockSettings::hideModeChanged, this, [this, dockDaemonAdaptor](){
+ Q_EMIT dockDaemonAdaptor->HideModeChanged(hideMode());
+ });
+ connect(SETTINGS, &DockSettings::itemAlignmentChanged, this, [this, dockDaemonAdaptor](){
+ Q_EMIT dockDaemonAdaptor->DisplayModeChanged(itemAlignment());
+ });
+
DPanel::init();
QObject::connect(this, &DApplet::rootObjectChanged, this, [this]() {
@@ -109,6 +124,11 @@ bool DockPanel::init()
Q_EMIT hideStateChanged(m_hideState);
}
});
+
+ QMetaObject::invokeMethod(this, [this, dockDaemonAdaptor](){
+ Q_EMIT dockDaemonAdaptor->FrontendWindowRectChanged(frontendWindowRect());
+ });
+
return true;
}
diff --git a/panels/dock/package/main.qml b/panels/dock/package/main.qml
index 769e3dfcd..ece07af2c 100644
--- a/panels/dock/package/main.qml
+++ b/panels/dock/package/main.qml
@@ -285,9 +285,9 @@ Window {
}
Item {
- Layout.fillWidth: Panel.itemAlignment
- Layout.fillHeight: Panel.itemAlignment
- Layout.horizontalStretchFactor: Panel.itemAlignment ? 1 : -1
+ Layout.fillWidth: Panel.itemAlignment === Dock.CenterAlignment
+ Layout.fillHeight: Panel.itemAlignment === Dock.CenterAlignment
+ Layout.horizontalStretchFactor: Panel.itemAlignment === Dock.CenterAlignment ? 1 : -1
}
Item {