Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,13 @@ Depends:
${misc:Depends},
Description: DDE Shell devel library
DDE Shell is a plugin system that integrates plugins developed based on this plugin system into DDE.

Package: libdde-shell-dock-dev
Architecture: any
Depends:
libdde-shell-dev (= ${binary:Version}),
qt6-base-dev,
qt6-declarative-dev,
${misc:Depends},
Description: DDE Shell dock devel library
DDE Shell Dock is a library for dock item info.
2 changes: 1 addition & 1 deletion debian/dde-shell.install
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ usr/lib/*/dde-shell/org.deepin.ds.dock*
usr/lib/*/dde-shell/org.deepin.ds.notification*
usr/lib/*/dde-shell/org.deepin.ds.notificationcenter*
usr/lib/*/dde-shell/org.deepin.ds.osd*
usr/lib/*/libds-notification-shared.so.*
usr/lib/*/libds-notification-shared.so*
usr/lib/*/qt6/qml/org/deepin/ds/dock/*
usr/lib/*/qt6/qml/org/deepin/ds/notification/*
usr/lib/*/qt6/qml/org/deepin/ds/notificationcenter/*
Expand Down
6 changes: 3 additions & 3 deletions debian/libdde-shell-dev.install
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
usr/include
usr/lib/*/cmake/*/*.cmake
usr/lib/*/lib*.so
usr/include/dde-shell/*.h
usr/lib/*/cmake/DDEShell/*.cmake
usr/lib/*/libdde-shell.so
3 changes: 3 additions & 0 deletions debian/libdde-shell-dock-dev.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
usr/include/dde-shell/dock/*.h
usr/lib/*/libdde-shell-dock.so*
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个libdde-shell-dock.so,不安装-dev包就不用安装了么?

usr/lib/*/cmake/DDEShellDock/*.cmake
17 changes: 17 additions & 0 deletions panels/dock/AppletDockItem.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

import QtQuick
import org.deepin.ds 1.0

AppletItem {
id: appletDockItem

property int dockOrder: 0
property bool shouldVisible: Applet.visible
property bool useColumnLayout: Panel.position % 2
implicitWidth: useColumnLayout ? Panel.rootObject.dockSize : Panel.rootObject.dockItemMaxSize * 0.8
implicitHeight: useColumnLayout ? Panel.rootObject.dockItemMaxSize * 0.8 : Panel.rootObject.dockSize

}
7 changes: 4 additions & 3 deletions panels/dock/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
# SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -18,8 +18,6 @@ file(
dockabstractsettingsconfig.h
dockdbusproxy.cpp
dockdbusproxy.h
dockiteminfo.cpp
dockiteminfo.h
dockpanel.cpp
dockpanel.h
docksettings.cpp
Expand Down Expand Up @@ -74,6 +72,7 @@ target_link_libraries(dockpanel PRIVATE
Qt${QT_VERSION_MAJOR}::WaylandClientPrivate
Qt${QT_VERSION_MAJOR}::Widgets
dde-shell-frame
dde-shell-dock
)

if (BUILD_WITH_X11)
Expand All @@ -97,6 +96,7 @@ add_subdirectory(showdesktop)
add_subdirectory(taskmanager)
add_subdirectory(tray)
add_subdirectory(multitaskview)
add_subdirectory(frame)

#add_subdirectory(appruntimeitem)

Expand Down Expand Up @@ -135,6 +135,7 @@ qt_add_qml_module(dock-plugin
QML_FILES DockCompositor.qml OverflowContainer.qml MenuHelper.qml DockPalette.qml
AppletItemButton.qml
AppletItemBackground.qml
AppletDockItem.qml
OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/plugins/org/deepin/ds/dock/
)

Expand Down
6 changes: 3 additions & 3 deletions panels/dock/appruntimeitem/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
# SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -13,8 +13,8 @@ add_library(dock-appruntimeitem SHARED
xcbgetinfo.h
xcbgetinfo.cpp
qmlappruntime.qrc
${CMAKE_SOURCE_DIR}/panels/dock/dockiteminfo.cpp
${CMAKE_SOURCE_DIR}/panels/dock/dockiteminfo.h
${CMAKE_SOURCE_DIR}/frame/dock/dockiteminfo.cpp
${CMAKE_SOURCE_DIR}/frame/dock/dockiteminfo.h
${CMAKE_SOURCE_DIR}/panels/dock/constants.h
${CMAKE_SOURCE_DIR}/panels/dock/taskmanager/x11utils.h
${CMAKE_SOURCE_DIR}/panels/dock/taskmanager/x11utils.cpp
Expand Down
4 changes: 2 additions & 2 deletions panels/dock/appruntimeitem/appruntimeitem.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once
#include "applet.h"

Check warning on line 6 in panels/dock/appruntimeitem/appruntimeitem.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "applet.h" not found.
#include "dsglobal.h"

Check warning on line 7 in panels/dock/appruntimeitem/appruntimeitem.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "dsglobal.h" not found.
#include "dockiteminfo.h"
#include "dock/dockiteminfo.h"

Check warning on line 8 in panels/dock/appruntimeitem/appruntimeitem.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "dock/dockiteminfo.h" not found.

#include <QGuiApplication>

Check warning on line 10 in panels/dock/appruntimeitem/appruntimeitem.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: <QGuiApplication> not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <QQmlApplicationEngine>

Check warning on line 11 in panels/dock/appruntimeitem/appruntimeitem.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: <QQmlApplicationEngine> not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <QThread>
#include <QObject>
#include <QDebug>
Expand Down
66 changes: 40 additions & 26 deletions panels/dock/dockdbusproxy.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -15,22 +15,38 @@

DGUI_USE_NAMESPACE
DS_USE_NAMESPACE
namespace {
constexpr auto DockVersionV1 = "1.0";

QList<DS_NAMESPACE::DAppletDock *> dockApplets(dock::DockPanel *panel)
Comment thread
wjyrich marked this conversation as resolved.
{
QList<DS_NAMESPACE::DAppletDock *> list;
if (!panel) return list;

for (auto *applet : panel->applets()) {
if (applet->pluginMetaData().value("dock").toMap().value("version").toString() == DockVersionV1) {
if (auto dockApplet = qobject_cast<DS_NAMESPACE::DAppletDock *>(applet)) {
list.append(dockApplet);
}
}
}
return list;
}
}
namespace dock {
DockDBusProxy::DockDBusProxy(DockPanel* parent)
: QObject(parent)
, m_oldDockApplet(nullptr)
, m_multitaskviewApplet(nullptr)
, m_trayApplet(nullptr)
{
registerPluginInfoMetaType();

connect(DockSettings::instance(), &DockSettings::pluginsVisibleChanged, this, [this] (const QVariantMap &pluginsVisible) {
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
updateDockPluginsVisible(pluginsVisible);
});
connect(parent, &DockPanel::rootObjectChanged, this, [this]() {
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
setPluginVisible("org.deepin.ds.dock.multitaskview", pluginsVisible);
updateDockPluginsVisible(pluginsVisible);
});

// Communicate with the other module
Expand All @@ -39,12 +55,8 @@ DockDBusProxy::DockDBusProxy(DockPanel* parent)
DAppletBridge bridge("org.deepin.ds.dock.tray");
m_trayApplet = bridge.applet();
}
{
DAppletBridge bridge("org.deepin.ds.dock.multitaskview");
m_multitaskviewApplet = bridge.applet();
}

return m_trayApplet && m_multitaskviewApplet;
return m_trayApplet;
};

// TODO: DQmlGlobal maybe missing a signal which named `appletListChanged`?
Expand Down Expand Up @@ -77,14 +89,13 @@ QRect DockDBusProxy::geometry()
return parent()->window() ? parent()->window()->geometry() : QRect();
}

void DockDBusProxy::setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible)
void DockDBusProxy::updateDockPluginsVisible(const QVariantMap &pluginsVisible)
{
if (DAppletBridge bridge(pluginId); auto item = bridge.applet()) {
DockItemInfo itemInfo;
QMetaObject::invokeMethod(item, "dockItemInfo", Qt::DirectConnection, qReturnArg(itemInfo));
for (auto *dockApplet : dockApplets(parent())) {
DockItemInfo itemInfo = dockApplet->dockItemInfo();
QString itemKey = itemInfo.itemKey;
if (pluginsVisible.contains(itemKey)) {
QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, pluginsVisible[itemKey].toBool());
dockApplet->setVisible(pluginsVisible[itemKey].toBool());
} else {
auto settingPluginsVisible = DockSettings::instance()->pluginsVisible();
settingPluginsVisible[itemKey] = true;
Expand Down Expand Up @@ -223,12 +234,10 @@ DockItemInfos DockDBusProxy::plugins()
QMetaObject::invokeMethod(m_trayApplet, "dockItemInfos", Qt::DirectConnection, qReturnArg(iteminfos));
}

if (m_multitaskviewApplet && DWindowManagerHelper::instance()->hasBlurWindow()) {
DockItemInfo info;
if (QMetaObject::invokeMethod(m_multitaskviewApplet, "dockItemInfo", Qt::DirectConnection, qReturnArg(info))) {
iteminfos.append(info);
}
for (auto *dockApplet : dockApplets(parent())) {
iteminfos.append(dockApplet->dockItemInfo());
}

return iteminfos;
}

Expand All @@ -244,13 +253,18 @@ void DockDBusProxy::callShow()

void DockDBusProxy::setItemOnDock(const QString &settingKey, const QString &itemKey, bool visible)
{
if (itemKey == "multitasking-view" && m_multitaskviewApplet) {
QMetaObject::invokeMethod(m_multitaskviewApplet, "setVisible", Qt::QueuedConnection, visible);
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
pluginsVisible[itemKey] = visible;
DockSettings::instance()->setPluginsVisible(pluginsVisible);
Q_EMIT pluginVisibleChanged(itemKey, visible);
} else if (m_trayApplet) {
for (auto *dockApplet : dockApplets(parent())) {
if (dockApplet->dockItemInfo().itemKey == itemKey) {
dockApplet->setVisible(visible);
auto pluginsVisible = DockSettings::instance()->pluginsVisible();
pluginsVisible[itemKey] = visible;
DockSettings::instance()->setPluginsVisible(pluginsVisible);
Q_EMIT pluginVisibleChanged(itemKey, visible);
return;
}
}

if (m_trayApplet) {
Q_EMIT pluginVisibleChanged(itemKey, visible);
QMetaObject::invokeMethod(m_trayApplet, "setItemOnDock", Qt::QueuedConnection, settingKey, itemKey, visible);
}
Expand Down
8 changes: 4 additions & 4 deletions panels/dock/dockdbusproxy.h
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once

#include "dsglobal.h"

Check warning on line 7 in panels/dock/dockdbusproxy.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: "dsglobal.h" not found.
#include "dockpanel.h"
#include "constants.h"
#include "dockiteminfo.h"
#include "frame/dockiteminfo.h"
#include "frame/dappletdock.h"

#include <appletproxy.h>

Check warning on line 13 in panels/dock/dockdbusproxy.h

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: <appletproxy.h> not found. Please note: Cppcheck does not need standard library headers to get proper results.

#include <QObject>
#include <QDBusContext>
Expand Down Expand Up @@ -86,10 +87,9 @@
private:
DockPanel* parent() const;
QString getAppID(const QString &desktopfile);
void setPluginVisible(const QString &pluginId, const QVariantMap &pluginsVisible);
void updateDockPluginsVisible(const QVariantMap &pluginsVisible);

DS_NAMESPACE::DAppletProxy *m_oldDockApplet;
DS_NAMESPACE::DAppletProxy *m_multitaskviewApplet;
DS_NAMESPACE::DAppletProxy *m_trayApplet;
};
}
Expand Down
63 changes: 63 additions & 0 deletions panels/dock/frame/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later
set(DOCK_PUBLIC_HEADERS
dockiteminfo.h
dappletdock.h
)

add_library(dde-shell-dock SHARED
${DOCK_PUBLIC_HEADERS}
dockiteminfo.cpp
dappletdock.cpp
)

set_target_properties(dde-shell-dock PROPERTIES
PUBLIC_HEADER "${DOCK_PUBLIC_HEADERS}"
VERSION ${CMAKE_PROJECT_VERSION}
SOVERSION 1
OUTPUT_NAME dde-shell-dock
EXPORT_NAME ShellDock
)

target_link_libraries(dde-shell-dock
PUBLIC
dde-shell-frame
Qt${QT_VERSION_MAJOR}::Core
Qt${QT_VERSION_MAJOR}::Gui
Qt${QT_VERSION_MAJOR}::Quick
)

target_include_directories(dde-shell-dock INTERFACE
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>
)
target_link_directories(dde-shell-dock INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:${LIB_INSTALL_DIR}>
)

target_compile_definitions(dde-shell-dock PRIVATE DS_LIB)

install(TARGETS dde-shell-dock EXPORT DDEShellDockTargets DESTINATION "${LIB_INSTALL_DIR}" PUBLIC_HEADER DESTINATION "${INCLUDE_INSTALL_DIR}/dock")

set(DOCK_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/DDEShellDock")

install(EXPORT DDEShellDockTargets NAMESPACE Dde:: FILE DDEShellDockTargets.cmake DESTINATION "${DOCK_CONFIG_INSTALL_DIR}")

include(CMakePackageConfigHelpers)
configure_package_config_file(
"${CMAKE_CURRENT_LIST_DIR}/DDEShellDockConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/DDEShellDockConfig.cmake"
INSTALL_DESTINATION "${DOCK_CONFIG_INSTALL_DIR}"
)

write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/DDEShellDockConfigVersion.cmake"
VERSION ${CMAKE_PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DDEShellDockConfig.cmake" DESTINATION "${DOCK_CONFIG_INSTALL_DIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/DDEShellDockConfigVersion.cmake" DESTINATION "${DOCK_CONFIG_INSTALL_DIR}")
13 changes: 13 additions & 0 deletions panels/dock/frame/DDEShellDockConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

@PACKAGE_INIT@
include(CMakeFindDependencyMacro)

find_dependency(Qt@QT_VERSION_MAJOR@ COMPONENTS Core Gui Quick REQUIRED)
find_dependency(DDEShell)

include(${CMAKE_CURRENT_LIST_DIR}/DDEShellDockTargets.cmake)

check_required_components(Qt@QT_VERSION_MAJOR@)
Loading
Loading