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 {