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
14 changes: 14 additions & 0 deletions panels/dock/multitaskview/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@
#
# SPDX-License-Identifier: GPL-3.0-or-later

find_package(PkgConfig REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} ${REQUIRED_QT_VERSION} COMPONENTS WaylandClient)
find_package(TreelandProtocols REQUIRED)
pkg_check_modules(WaylandClient REQUIRED IMPORTED_TARGET wayland-client)

add_library(dock-multitaskview SHARED
multitaskview.cpp
multitaskview.h
treelandmultitaskview.cpp
treelandmultitaskview.h
../dockiteminfo.cpp
../dockiteminfo.h
)
Expand All @@ -14,7 +21,14 @@ target_include_directories(dock-multitaskview PRIVATE
"../"
)

qt_generate_wayland_protocol_client_sources(dock-multitaskview
FILES
${TREELAND_PROTOCOLS_DATA_DIR}/treeland-dde-shell-v1.xml
)

target_link_libraries(dock-multitaskview PRIVATE
PkgConfig::WaylandClient
Qt${QT_VERSION_MAJOR}::WaylandClient
dde-shell-frame
)

Expand Down
9 changes: 9 additions & 0 deletions panels/dock/multitaskview/multitaskview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ MultiTaskView::MultiTaskView(QObject *parent)
, m_iconName("deepin-multitasking-view")
{
connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasCompositeChanged, this, &MultiTaskView::visibleChanged);
auto platformName = QGuiApplication::platformName();
if (QStringLiteral("wayland") == platformName) {
m_multitaskview.reset(new TreeLandMultitaskview);
}
}

bool MultiTaskView::init()
Expand All @@ -33,6 +37,11 @@ bool MultiTaskView::init()

void MultiTaskView::openWorkspace()
{
if (m_multitaskview) {
m_multitaskview->toggle();
return;
}

DDBusSender()
.service("com.deepin.wm")
.path("/com/deepin/wm")
Expand Down
4 changes: 3 additions & 1 deletion panels/dock/multitaskview/multitaskview.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@

#pragma once

#include "../dockiteminfo.h"
#include "applet.h"
#include "dsglobal.h"
#include "../dockiteminfo.h"
#include "treelandmultitaskview.h"

namespace dock {

Expand Down Expand Up @@ -37,6 +38,7 @@ class MultiTaskView : public DS_NAMESPACE::DApplet
private:
bool m_visible;
QString m_iconName;
QScopedPointer<TreeLandMultitaskview> m_multitaskview;
};

}
31 changes: 31 additions & 0 deletions panels/dock/multitaskview/treelandmultitaskview.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "treelandmultitaskview.h"

namespace dock
{
TreeLandMultitaskview::TreeLandMultitaskview()
: QWaylandClientExtensionTemplate<TreeLandMultitaskview>(treeland_dde_shell_manager_v1_interface.version)
{
}

void TreeLandMultitaskview::toggle()
{
if (!isActive()) {
return;
}

if (m_worker.isNull()) {
m_worker.reset(new TreeLandMultitaskviewWorker(get_treeland_multitaskview()));
}
m_worker->toggle();
}

TreeLandMultitaskviewWorker::TreeLandMultitaskviewWorker(struct ::treeland_multitaskview_v1 *object)
: QWaylandClientExtensionTemplate<TreeLandMultitaskviewWorker>(treeland_multitaskview_v1_interface.version)
, QtWayland::treeland_multitaskview_v1(object)
{
}
}
33 changes: 33 additions & 0 deletions panels/dock/multitaskview/treelandmultitaskview.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once

#include "qwayland-treeland-dde-shell-v1.h"

#include <QtWaylandClient/QWaylandClientExtension>

namespace dock
{
class TreeLandMultitaskviewWorker;
class TreeLandMultitaskview : public QWaylandClientExtensionTemplate<TreeLandMultitaskview>, public QtWayland::treeland_dde_shell_manager_v1
{
Q_OBJECT

public:
explicit TreeLandMultitaskview();
void toggle();

private:
QScopedPointer<TreeLandMultitaskviewWorker> m_worker;
};

class TreeLandMultitaskviewWorker : public QWaylandClientExtensionTemplate<TreeLandMultitaskviewWorker>, public QtWayland::treeland_multitaskview_v1
{
Q_OBJECT

public:
explicit TreeLandMultitaskviewWorker(struct ::treeland_multitaskview_v1 *object);
};
}
Loading