Skip to content

Commit

Permalink
chore: chore plugins of dock
Browse files Browse the repository at this point in the history
as title

log: as title
  • Loading branch information
ssk-wh committed May 17, 2024
1 parent 1ffe867 commit 1554b86
Show file tree
Hide file tree
Showing 13 changed files with 225 additions and 274 deletions.
2 changes: 1 addition & 1 deletion panels/dock/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ add_library(dockpanel SHARED

target_link_libraries(dockpanel PRIVATE
PkgConfig::WaylandClient
dde-shell-frame
dock-plugin
)

if (BUILD_WITH_X11)
Expand Down
2 changes: 0 additions & 2 deletions panels/dock/clipboarditem/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
add_library(dock-clipboarditem SHARED
clipboarditem.cpp
clipboarditem.h
# ../dockiteminfo.cpp
# ../dockiteminfo.h
)

target_link_libraries(dock-clipboarditem PRIVATE
Expand Down
7 changes: 3 additions & 4 deletions panels/dock/clipboarditem/clipboarditem.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

#include "ddockapplet.h"
#include "dsglobal.h"
#include "../dockiteminfo.h"

namespace dock {

Expand All @@ -16,9 +15,9 @@ class ClipboardItem : public DS_NAMESPACE::DDockApplet
public:
explicit ClipboardItem(QObject *parent = nullptr);

QString displayName() const;
QString itemKey() const;
QString settingKey() const;
QString displayName() const override;
QString itemKey() const override;
QString settingKey() const override;

Q_INVOKABLE void toggleClipboard();
};
Expand Down
139 changes: 89 additions & 50 deletions panels/dock/dockdbusproxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,47 @@
#include "dsglobal.h"
#include "constants.h"
#include "dockpanel.h"
#include "ddockapplet.h"
#include "dockdbusproxy.h"

#include <QObject>

#include <DWindowManagerHelper>
#include <DDciIcon>

DGUI_USE_NAMESPACE

namespace dock {
DockDBusProxy::DockDBusProxy(DockPanel* parent)
: QObject(parent)
, m_oldDockApplet(nullptr)
, m_clipboardApplet(nullptr)
, m_searchApplet(nullptr)
, m_multitaskviewApplet(nullptr)
{
registerPluginInfoMetaType();

connect(DockSettings::instance(), &DockSettings::pluginsVisibleChanged, this, [this] (const QVariantMap &pluginsVisible) {
setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible);
setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible);
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
for (auto applet : m_dockApplets) {
QString itemKey = applet->itemKey();
if (pluginsVisible.contains(itemKey)) {
applet->setVisible(pluginsVisible[itemKey].toBool());
} else {
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
settingPluginsVisible[itemKey] = true;
DockSettings::instance()->setPluginsVisible(settingPluginsVisible);
}
}
});
connect(parent, &DockPanel::rootObjectChanged, this, [this]() {
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
setPluginVisible("org.deepin.ds.dock.clipboarditem", pluginsVisible);
setPluginVisible("org.deepin.ds.dock.searchitem", pluginsVisible);
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
for (auto applet : m_dockApplets) {
QString itemKey = applet->itemKey();
if (pluginsVisible.contains(itemKey)) {
applet->setVisible(pluginsVisible[itemKey].toBool());
} else {
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
settingPluginsVisible[itemKey] = true;
DockSettings::instance()->setPluginsVisible(settingPluginsVisible);
}
}
});

auto root = qobject_cast<DS_NAMESPACE::DContainment *>(this->parent());
Expand Down Expand Up @@ -88,12 +101,15 @@ QRect DockDBusProxy::geometry()

void DockDBusProxy::setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible)
{
if (auto item = applet(pluginId)) {
DockItemInfo itemInfo;
QMetaObject::invokeMethod(item, "dockItemInfo", Qt::DirectConnection, qReturnArg(itemInfo));
QString itemKey = itemInfo.itemKey;
auto it = std::find_if(m_dockApplets.begin(), m_dockApplets.end(), [ = ] (DS_NAMESPACE::DDockApplet *applet) {
return pluginId == applet->pluginId();
});

if (it != m_dockApplets.end()) {
auto applet = (*it);
const auto &itemKey = applet->itemKey();
if (pluginsVisible.contains(itemKey)) {
QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, pluginsVisible[itemKey].toBool());
applet->setVisible(pluginsVisible[itemKey].toBool());
} else {
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
settingPluginsVisible[itemKey] = true;
Expand Down Expand Up @@ -204,18 +220,27 @@ bool DockDBusProxy::RequestUndock(const QString &desktopFile)

void DockDBusProxy::onAppletListChanged()
{
// Communicate with the other module
// for old dock
QList<DS_NAMESPACE::DApplet *> list = appletList("org.deepin.ds.dock.tray");
if (!m_oldDockApplet && !list.isEmpty()) m_oldDockApplet = list.first();

list = appletList("org.deepin.ds.dock.clipboarditem");
if (!m_clipboardApplet && !list.isEmpty()) m_clipboardApplet = list.first();

list = appletList("org.deepin.ds.dock.searchitem");
if (!m_searchApplet && !list.isEmpty()) m_searchApplet = list.first();
// other dock plugin
m_dockApplets.clear();
auto root = qobject_cast<DS_NAMESPACE::DContainment *>(parent());

list = appletList("org.deepin.ds.dock.multitaskview");
if (!m_multitaskviewApplet && !list.isEmpty()) m_multitaskviewApplet = list.first();
QQueue<DS_NAMESPACE::DContainment *> containments;
containments.enqueue(root);
while (!containments.isEmpty()) {
DS_NAMESPACE::DContainment *containment = containments.dequeue();
for (const auto applet : containment->applets()) {
if (auto item = qobject_cast<DS_NAMESPACE::DContainment *>(applet)) {
containments.enqueue(item);
}
if (auto dockApplet = qobject_cast<DS_NAMESPACE::DDockApplet *>(applet)) {
m_dockApplets << dockApplet;
}
}
}
}

QStringList DockDBusProxy::GetLoadedPlugins()
Expand All @@ -231,25 +256,46 @@ DockItemInfos DockDBusProxy::plugins()
QMetaObject::invokeMethod(m_oldDockApplet, "plugins", Qt::DirectConnection, qReturnArg(iteminfos));
}

if (m_clipboardApplet) {
for (auto applet : m_dockApplets) {
DockItemInfo info;
if (QMetaObject::invokeMethod(m_clipboardApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
iteminfos.append(info);
info.name = applet->name();
info.displayName = applet->displayName();
info.itemKey = applet->itemKey();
info.settingKey = applet->settingKey();
info.visible = applet->visible();

{
const auto lightPalette = DGuiApplicationHelper::instance()->applicationPalette(DGuiApplicationHelper::LightType);
auto lightPixmap = DDciIcon::fromTheme(applet->icon()).pixmap(
qApp->devicePixelRatio(),
30,
DDciIcon::Light,
DDciIcon::Normal,
DDciIconPalette::fromQPalette(lightPalette)
);
QBuffer buffer(&info.iconLight);
if (buffer.open(QIODevice::WriteOnly)) {
lightPixmap.save(&buffer, "png");
}
}
{
const auto darkPalette = DGuiApplicationHelper::instance()->applicationPalette(DGuiApplicationHelper::DarkType);
auto darkPixmap = DDciIcon::fromTheme("search").pixmap(
qApp->devicePixelRatio(),
30,
DDciIcon::Dark,
DDciIcon::Normal,
DDciIconPalette::fromQPalette(darkPalette)
);
QBuffer buffer(&info.iconDark);
if (buffer.open(QIODevice::WriteOnly)) {
darkPixmap.save(&buffer, "png");
}
}
}

if (m_searchApplet) {
DockItemInfo info;
if (QMetaObject::invokeMethod(m_searchApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info)))
iteminfos.append(info);
iteminfos.append(info);
}

if (m_multitaskviewApplet && DWindowManagerHelper::instance()->hasComposite()) {
DockItemInfo info;
if (QMetaObject::invokeMethod(m_multitaskviewApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
iteminfos.append(info);
}
}
return iteminfos;
}

Expand All @@ -265,23 +311,16 @@ void DockDBusProxy::callShow()

void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
{
if (itemKey == "clipboard" && m_clipboardApplet) {
QMetaObject::invokeMethod(m_clipboardApplet, "setVisible", Qt::QueuedConnection, visible);
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
pluginsVisible[itemKey] = visible;
DockSettings::instance()->setPluginsVisible(pluginsVisible);
} else if (itemKey == "search" && m_searchApplet) {
QMetaObject::invokeMethod(m_searchApplet, "setVisible", Qt::QueuedConnection, visible);
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
pluginsVisible[itemKey] = visible;
DockSettings::instance()->setPluginsVisible(pluginsVisible);
} else if (itemKey == "multitasking-view" && m_multitaskviewApplet) {
QMetaObject::invokeMethod(m_multitaskviewApplet, "setVisible", Qt::QueuedConnection, visible);
auto it = std::find_if(m_dockApplets.begin(), m_dockApplets.end(), [ = ] (DS_NAMESPACE::DDockApplet *applet) {
return itemKey == applet->itemKey();
});

if (it != m_dockApplets.end()) {
auto applet = (*it);
applet->setVisible(visible);
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
pluginsVisible[itemKey] = visible;
DockSettings::instance()->setPluginsVisible(pluginsVisible);
} else if (m_oldDockApplet) {
QMetaObject::invokeMethod(m_oldDockApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
}
}

Expand Down
8 changes: 5 additions & 3 deletions panels/dock/dockdbusproxy.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
#include <QDBusContext>
#include <QDBusArgument>

namespace DS_NAMESPACE {
class DDockApplet;
}

/** this class used for old dock api compatible
* it will forward old dbus call to new implementation
*/
Expand Down Expand Up @@ -78,9 +82,7 @@ private Q_SLOTS:
void setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible);

DS_NAMESPACE::DApplet *m_oldDockApplet;
DS_NAMESPACE::DApplet *m_clipboardApplet;
DS_NAMESPACE::DApplet *m_searchApplet;
DS_NAMESPACE::DApplet *m_multitaskviewApplet;
QList<DS_NAMESPACE::DDockApplet *> m_dockApplets;
};
}

6 changes: 3 additions & 3 deletions panels/dock/multitaskview/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
add_library(dock-multitaskview SHARED
multitaskview.cpp
multitaskview.h
../dockiteminfo.cpp
../dockiteminfo.h
# ../dockiteminfo.cpp
# ../dockiteminfo.h
)

target_link_libraries(dock-multitaskview PRIVATE
dde-shell-frame
dock-plugin
)

ds_install_package(PACKAGE org.deepin.ds.dock.multitaskview TARGET dock-multitaskview)
Expand Down
Loading

0 comments on commit 1554b86

Please sign in to comment.