diff --git a/debian/control b/debian/control index a497fd282..2cc47da58 100644 --- a/debian/control +++ b/debian/control @@ -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. diff --git a/debian/dde-shell.install b/debian/dde-shell.install index 87dfdcde5..62683587a 100644 --- a/debian/dde-shell.install +++ b/debian/dde-shell.install @@ -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/* diff --git a/debian/libdde-shell-dev.install b/debian/libdde-shell-dev.install index ba7eac759..4ea81667a 100644 --- a/debian/libdde-shell-dev.install +++ b/debian/libdde-shell-dev.install @@ -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 diff --git a/debian/libdde-shell-dock-dev.install b/debian/libdde-shell-dock-dev.install new file mode 100644 index 000000000..2ece1f00b --- /dev/null +++ b/debian/libdde-shell-dock-dev.install @@ -0,0 +1,3 @@ +usr/include/dde-shell/dock/*.h +usr/lib/*/libdde-shell-dock.so* +usr/lib/*/cmake/DDEShellDock/*.cmake diff --git a/panels/dock/AppletDockItem.qml b/panels/dock/AppletDockItem.qml new file mode 100644 index 000000000..a9a76c44b --- /dev/null +++ b/panels/dock/AppletDockItem.qml @@ -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 + +} diff --git a/panels/dock/CMakeLists.txt b/panels/dock/CMakeLists.txt index f1ac1966b..ca8179c12 100644 --- a/panels/dock/CMakeLists.txt +++ b/panels/dock/CMakeLists.txt @@ -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 @@ -18,8 +18,6 @@ file( dockabstractsettingsconfig.h dockdbusproxy.cpp dockdbusproxy.h - dockiteminfo.cpp - dockiteminfo.h dockpanel.cpp dockpanel.h docksettings.cpp @@ -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) @@ -97,6 +96,7 @@ add_subdirectory(showdesktop) add_subdirectory(taskmanager) add_subdirectory(tray) add_subdirectory(multitaskview) +add_subdirectory(frame) #add_subdirectory(appruntimeitem) @@ -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/ ) diff --git a/panels/dock/appruntimeitem/CMakeLists.txt b/panels/dock/appruntimeitem/CMakeLists.txt index 4c0677e6d..c8e063bcb 100644 --- a/panels/dock/appruntimeitem/CMakeLists.txt +++ b/panels/dock/appruntimeitem/CMakeLists.txt @@ -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 @@ -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 diff --git a/panels/dock/appruntimeitem/appruntimeitem.h b/panels/dock/appruntimeitem/appruntimeitem.h index 803c8c946..75f241cb0 100644 --- a/panels/dock/appruntimeitem/appruntimeitem.h +++ b/panels/dock/appruntimeitem/appruntimeitem.h @@ -1,11 +1,11 @@ -// 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" #include "dsglobal.h" -#include "dockiteminfo.h" +#include "dock/dockiteminfo.h" #include #include diff --git a/panels/dock/dockdbusproxy.cpp b/panels/dock/dockdbusproxy.cpp index 27ad8ac7b..19b1ee391 100644 --- a/panels/dock/dockdbusproxy.cpp +++ b/panels/dock/dockdbusproxy.cpp @@ -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 @@ -15,22 +15,38 @@ DGUI_USE_NAMESPACE DS_USE_NAMESPACE +namespace { +constexpr auto DockVersionV1 = "1.0"; +QList dockApplets(dock::DockPanel *panel) +{ + QList 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(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 @@ -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`? @@ -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; @@ -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; } @@ -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); } diff --git a/panels/dock/dockdbusproxy.h b/panels/dock/dockdbusproxy.h index 5bceb9754..addca9537 100644 --- a/panels/dock/dockdbusproxy.h +++ b/panels/dock/dockdbusproxy.h @@ -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 @@ -7,7 +7,8 @@ #include "dsglobal.h" #include "dockpanel.h" #include "constants.h" -#include "dockiteminfo.h" +#include "frame/dockiteminfo.h" +#include "frame/dappletdock.h" #include @@ -86,10 +87,9 @@ class DockDBusProxy final: public QObject, public QDBusContext 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; }; } diff --git a/panels/dock/frame/CMakeLists.txt b/panels/dock/frame/CMakeLists.txt new file mode 100644 index 000000000..d1553084f --- /dev/null +++ b/panels/dock/frame/CMakeLists.txt @@ -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 + $ + $ + $ +) +target_link_directories(dde-shell-dock INTERFACE + $ + $ +) + +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}") diff --git a/panels/dock/frame/DDEShellDockConfig.cmake.in b/panels/dock/frame/DDEShellDockConfig.cmake.in new file mode 100644 index 000000000..0e8a05d19 --- /dev/null +++ b/panels/dock/frame/DDEShellDockConfig.cmake.in @@ -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@) diff --git a/panels/dock/frame/dappletdock.cpp b/panels/dock/frame/dappletdock.cpp new file mode 100644 index 000000000..548cee350 --- /dev/null +++ b/panels/dock/frame/dappletdock.cpp @@ -0,0 +1,55 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "dappletdock.h" +#include + +DS_BEGIN_NAMESPACE + +class DAppletDockPrivate : public DAppletPrivate +{ +public: + explicit DAppletDockPrivate(DAppletDock *qq) + : DAppletPrivate(qq) + { + } + ~DAppletDockPrivate() override = default; + + bool m_visible = true; + + D_DECLARE_PUBLIC(DAppletDock) +}; + +DAppletDock::DAppletDock(QObject *parent) + : DApplet(*new DAppletDockPrivate(this), parent) +{ +} + +DAppletDock::DAppletDock(DAppletDockPrivate &dd, QObject *parent) + : DApplet(dd, parent) +{ +} + +bool DAppletDock::visible() const +{ + D_DC(DAppletDock); + return d->m_visible; +} + +void DAppletDock::setVisible(bool visible) +{ + D_D(DAppletDock); + if (d->m_visible == visible) + return; + + d->m_visible = visible; + Q_EMIT visibleChanged(); +} + +DockItemInfo DAppletDock::dockItemInfo() +{ + return {}; +} + +DS_END_NAMESPACE diff --git a/panels/dock/frame/dappletdock.h b/panels/dock/frame/dappletdock.h new file mode 100644 index 000000000..93f5adfeb --- /dev/null +++ b/panels/dock/frame/dappletdock.h @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: GPL-3.0-or-later + +#pragma once + +#include "applet.h" +#include "dockiteminfo.h" +#include "dsglobal.h" + +DS_BEGIN_NAMESPACE + +class DAppletDockPrivate; + +class DS_SHARE DAppletDock : public DApplet +{ + Q_OBJECT + Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged) + D_DECLARE_PRIVATE(DAppletDock) + +public: + explicit DAppletDock(QObject *parent = nullptr); + virtual ~DAppletDock() = default; + + virtual DockItemInfo dockItemInfo(); + + bool visible() const; + void setVisible(bool visible); + +Q_SIGNALS: + void visibleChanged(); + +protected: + explicit DAppletDock(DAppletDockPrivate &dd, QObject *parent = nullptr); +}; + +DS_END_NAMESPACE diff --git a/panels/dock/dockiteminfo.cpp b/panels/dock/frame/dockiteminfo.cpp similarity index 93% rename from panels/dock/dockiteminfo.cpp rename to panels/dock/frame/dockiteminfo.cpp index 4535e30c9..a3d9908b3 100644 --- a/panels/dock/dockiteminfo.cpp +++ b/panels/dock/frame/dockiteminfo.cpp @@ -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 diff --git a/panels/dock/dockiteminfo.h b/panels/dock/frame/dockiteminfo.h similarity index 88% rename from panels/dock/dockiteminfo.h rename to panels/dock/frame/dockiteminfo.h index d5e62a071..d432ae1c5 100644 --- a/panels/dock/dockiteminfo.h +++ b/panels/dock/frame/dockiteminfo.h @@ -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 #pragma once diff --git a/panels/dock/multitaskview/CMakeLists.txt b/panels/dock/multitaskview/CMakeLists.txt index 7a06dc248..9401c534e 100644 --- a/panels/dock/multitaskview/CMakeLists.txt +++ b/panels/dock/multitaskview/CMakeLists.txt @@ -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 @@ -12,8 +12,6 @@ add_library(dock-multitaskview SHARED multitaskview.h treelandmultitaskview.cpp treelandmultitaskview.h - ../dockiteminfo.cpp - ../dockiteminfo.h ) target_include_directories(dock-multitaskview PRIVATE @@ -31,6 +29,7 @@ target_link_libraries(dock-multitaskview PRIVATE PkgConfig::WaylandClient Qt${QT_VERSION_MAJOR}::WaylandClient dde-shell-frame + dde-shell-dock ) ds_install_package(PACKAGE org.deepin.ds.dock.multitaskview TARGET dock-multitaskview) diff --git a/panels/dock/multitaskview/multitaskview.cpp b/panels/dock/multitaskview/multitaskview.cpp index 7e7d93102..fb660c1da 100644 --- a/panels/dock/multitaskview/multitaskview.cpp +++ b/panels/dock/multitaskview/multitaskview.cpp @@ -1,8 +1,7 @@ -// 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 -#include "applet.h" #include "multitaskview.h" #include "pluginfactory.h" #include "../constants.h" @@ -23,7 +22,7 @@ constexpr int KWinOptimalPerformance = 4; const QString windowEffectTypeKey = QStringLiteral("user_type"); MultiTaskView::MultiTaskView(QObject *parent) - : DApplet(parent) + : DAppletDock(parent) , m_iconName("deepin-multitasking-view") { connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasCompositeChanged, this, &MultiTaskView::visibleChanged); @@ -48,7 +47,7 @@ MultiTaskView::MultiTaskView(QObject *parent) bool MultiTaskView::init() { - DApplet::init(); + DAppletDock::init(); return true; } @@ -80,11 +79,6 @@ void MultiTaskView::setIconName(const QString& iconName) } } -bool MultiTaskView::visible() const -{ - return m_kWinEffect && m_visible && DWindowManagerHelper::instance()->hasComposite(); -} - DockItemInfo MultiTaskView::dockItemInfo() { DockItemInfo info; @@ -92,20 +86,11 @@ DockItemInfo MultiTaskView::dockItemInfo() info.displayName = tr("Multitasking View"); info.itemKey = "multitasking-view"; info.settingKey = "multitasking-view"; - info.visible = visible(); + info.visible = m_kWinEffect && DWindowManagerHelper::instance()->hasComposite(); info.dccIcon = DCCIconPath + "multitasking-view.svg"; return info; } -void MultiTaskView::setVisible(bool visible) -{ - if (m_visible != visible) { - m_visible = visible; - - Q_EMIT visibleChanged(); - } -} - D_APPLET_CLASS(MultiTaskView) } diff --git a/panels/dock/multitaskview/multitaskview.h b/panels/dock/multitaskview/multitaskview.h index b78b17c34..77df6490f 100644 --- a/panels/dock/multitaskview/multitaskview.h +++ b/panels/dock/multitaskview/multitaskview.h @@ -1,10 +1,11 @@ -// 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 "../dockiteminfo.h" +#include "../frame/dappletdock.h" +#include "../frame/dockiteminfo.h" #include "applet.h" #include "dsglobal.h" #include "treelandmultitaskview.h" @@ -13,11 +14,10 @@ namespace dock { -class MultiTaskView : public DS_NAMESPACE::DApplet +class MultiTaskView : public DS_NAMESPACE::DAppletDock { Q_OBJECT Q_PROPERTY(QString iconName READ iconName WRITE setIconName NOTIFY iconNameChanged FINAL) - Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged) public: explicit MultiTaskView(QObject *parent = nullptr); @@ -28,17 +28,12 @@ class MultiTaskView : public DS_NAMESPACE::DApplet bool hasComposite(); Q_INVOKABLE void openWorkspace(); - Q_INVOKABLE DockItemInfo dockItemInfo(); - - Q_INVOKABLE bool visible() const; - Q_INVOKABLE void setVisible(bool visible); + DockItemInfo dockItemInfo() override; Q_SIGNALS: void iconNameChanged(); - void visibleChanged(); private: - bool m_visible = true; bool m_kWinEffect = true; QString m_iconName; QScopedPointer m_multitaskview; diff --git a/panels/dock/multitaskview/package/metadata.json b/panels/dock/multitaskview/package/metadata.json index 51c517023..fdd14a8db 100644 --- a/panels/dock/multitaskview/package/metadata.json +++ b/panels/dock/multitaskview/package/metadata.json @@ -1,6 +1,9 @@ { "Plugin": { "Version": "1.0", + "dock": { + "version": "1.0" + }, "Id": "org.deepin.ds.dock.multitaskview", "Url": "multitaskview.qml", "Parent": "org.deepin.ds.dock" diff --git a/panels/dock/multitaskview/package/multitaskview.qml b/panels/dock/multitaskview/package/multitaskview.qml index 224ca4adb..cbd081f22 100644 --- a/panels/dock/multitaskview/package/multitaskview.qml +++ b/panels/dock/multitaskview/package/multitaskview.qml @@ -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 @@ -9,14 +9,9 @@ import org.deepin.ds 1.0 import org.deepin.dtk 1.0 as D import org.deepin.ds.dock 1.0 -AppletItem { +AppletDockItem { id: toggleworkspace - property bool useColumnLayout: Panel.position % 2 - property int dockOrder: 15 - property bool shouldVisible: Applet.visible - // 1:4 the distance between app : dock height; get width/height≈0.8 - implicitWidth: useColumnLayout ? Panel.rootObject.dockSize : Panel.rootObject.dockItemMaxSize * 0.8 - implicitHeight: useColumnLayout ? Panel.rootObject.dockItemMaxSize * 0.8 : Panel.rootObject.dockSize + dockOrder: 15 PanelToolTip { id: toolTip diff --git a/panels/dock/tray/CMakeLists.txt b/panels/dock/tray/CMakeLists.txt index 9710ace45..2104d810e 100644 --- a/panels/dock/tray/CMakeLists.txt +++ b/panels/dock/tray/CMakeLists.txt @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +# SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: CC0-1.0 @@ -42,8 +42,6 @@ add_library(trayitem SHARED trayitem.h traysettings.cpp traysettings.h - ../dockiteminfo.cpp - ../dockiteminfo.h ../constants.h ) @@ -54,6 +52,7 @@ target_include_directories(trayitem PUBLIC target_link_libraries(trayitem PRIVATE dde-shell-frame + dde-shell-dock ) install(TARGETS dock-tray DESTINATION "${QML_INSTALL_DIR}/org/deepin/ds/dock/tray/") diff --git a/panels/dock/tray/trayitem.h b/panels/dock/tray/trayitem.h index e7b3124d1..4391a6da7 100644 --- a/panels/dock/tray/trayitem.h +++ b/panels/dock/tray/trayitem.h @@ -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 @@ -6,7 +6,7 @@ #include "applet.h" #include "dsglobal.h" -#include "dockiteminfo.h" +#include "../frame/dockiteminfo.h" #include