File tree Expand file tree Collapse file tree 9 files changed +200
-3
lines changed
Expand file tree Collapse file tree 9 files changed +200
-3
lines changed Original file line number Diff line number Diff line change 11# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
22#
33# SPDX-License-Identifier: GPL-3.0-or-later
4+ find_package (TreelandProtocols REQUIRED)
45
56add_library (dde-shutdown SHARED
67 shutdownapplet.cpp
78 shutdownapplet.h
9+ treelandlockscreen.h
10+ treelandlockscreen.cpp
11+ )
12+
13+ qt_generate_wayland_protocol_client_sources(dde-shutdown
14+ FILES
15+ ${TREELAND_PROTOCOLS_DATA_DIR} /treeland-dde-shell-v1.xml
816)
917
1018target_link_libraries (dde-shutdown PRIVATE
1119 dde-shell-frame
1220 Qt${QT_MAJOR_VERSION} ::DBus
21+ Qt${QT_VERSION_MAJOR} ::WaylandClient
1322)
1423
1524ds_install_package(PACKAGE org.deepin.ds.dde-shutdown TARGET dde-shutdown)
Original file line number Diff line number Diff line change 33// SPDX-License-Identifier: GPL-3.0-or-later
44
55#include " shutdownapplet.h"
6- #include " pluginfactory .h"
6+ #include " treelandlockscreen .h"
77
88#include < QDebug>
99#include < QGuiApplication>
1010
1111#include < DDBusSender>
12+
13+ #include < pluginfactory.h>
1214DCORE_USE_NAMESPACE
1315
1416DS_BEGIN_NAMESPACE
@@ -25,13 +27,18 @@ ShutdownApplet::~ShutdownApplet()
2527
2628bool ShutdownApplet::load ()
2729{
30+ auto platformName = QGuiApplication::platformName ();
31+ if (QStringLiteral (" wayland" ) == platformName) {
32+ m_lockscreen.reset (new TreeLandLockScreen);
33+ }
2834 return true ;
2935}
3036
3137bool ShutdownApplet::requestShutdown ()
3238{
33- if (QStringLiteral (" wayland" ) == QGuiApplication::platformName ()) {
34- qDebug () << " request treeland shutdown" ;
39+ qDebug () << " request shutdown" ;
40+ if (m_lockscreen) {
41+ m_lockscreen->shutdown ();
3542 } else {
3643 DDBusSender ()
3744 .service (" org.deepin.dde.ShutdownFront1" )
@@ -44,6 +51,22 @@ bool ShutdownApplet::requestShutdown()
4451 return true ;
4552}
4653
54+ bool ShutdownApplet::requestLock ()
55+ {
56+ if (m_lockscreen) {
57+ m_lockscreen->lock ();
58+ }
59+ return true ;
60+ }
61+
62+ bool ShutdownApplet::requestSwitchUser ()
63+ {
64+ if (m_lockscreen) {
65+ m_lockscreen->switchUser ();
66+ }
67+ return true ;
68+ }
69+
4770D_APPLET_CLASS (ShutdownApplet)
4871}
4972DS_END_NAMESPACE
Original file line number Diff line number Diff line change 88
99DS_BEGIN_NAMESPACE
1010namespace shutdown {
11+ class TreeLandLockScreen ;
1112class ShutdownApplet : public DApplet
1213{
1314 Q_OBJECT
@@ -19,6 +20,11 @@ class ShutdownApplet : public DApplet
1920
2021public Q_SLOTS:
2122 bool requestShutdown ();
23+ bool requestLock ();
24+ bool requestSwitchUser ();
25+
26+ private:
27+ QScopedPointer<TreeLandLockScreen> m_lockscreen;
2228};
2329
2430}
Original file line number Diff line number Diff line change 1+ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
2+ //
3+ // SPDX-License-Identifier: GPL-3.0-or-later
4+
5+ #include " treelandlockscreen.h"
6+
7+ DS_BEGIN_NAMESPACE
8+ namespace shutdown
9+ {
10+ TreeLandLockScreen::TreeLandLockScreen ()
11+ : QWaylandClientExtensionTemplate<TreeLandLockScreen>(treeland_dde_shell_manager_v1_interface.version)
12+ {
13+ }
14+
15+ void TreeLandLockScreen::lock ()
16+ {
17+ if (auto impl = workder ())
18+ impl->lock ();
19+ }
20+
21+ void TreeLandLockScreen::shutdown ()
22+ {
23+ if (auto impl = workder ())
24+ impl->shutdown ();
25+ }
26+
27+ void TreeLandLockScreen::switchUser ()
28+ {
29+ if (auto impl = workder ())
30+ impl->switch_user ();
31+ }
32+
33+ TreeLandLockScreenWorker *TreeLandLockScreen::workder ()
34+ {
35+ if (!isActive ()) {
36+ return nullptr ;
37+ }
38+
39+ if (m_worker.isNull ()) {
40+ m_worker.reset (new TreeLandLockScreenWorker (get_treeland_lockscreen ()));
41+ }
42+ return m_worker.get ();
43+ }
44+
45+ TreeLandLockScreenWorker::TreeLandLockScreenWorker (struct ::treeland_lockscreen_v1 *object)
46+ : QWaylandClientExtensionTemplate<TreeLandLockScreenWorker>(treeland_lockscreen_v1_interface.version)
47+ , QtWayland::treeland_lockscreen_v1(object)
48+ {
49+ }
50+ }
51+ DS_END_NAMESPACE
Original file line number Diff line number Diff line change 1+ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
2+ //
3+ // SPDX-License-Identifier: GPL-3.0-or-later
4+
5+ #pragma once
6+
7+ #include " dsglobal.h"
8+ #include " qwayland-treeland-dde-shell-v1.h"
9+
10+ #include < QtWaylandClient/QWaylandClientExtension>
11+
12+ DS_BEGIN_NAMESPACE
13+ namespace shutdown
14+ {
15+ class TreeLandLockScreenWorker ;
16+ class TreeLandLockScreen : public QWaylandClientExtensionTemplate <TreeLandLockScreen>, public QtWayland::treeland_dde_shell_manager_v1
17+ {
18+ Q_OBJECT
19+
20+ public:
21+ explicit TreeLandLockScreen ();
22+ void lock ();
23+ void shutdown ();
24+ void switchUser ();
25+
26+ private:
27+ TreeLandLockScreenWorker *workder ();
28+
29+ private:
30+ QScopedPointer<TreeLandLockScreenWorker> m_worker;
31+ };
32+
33+ class TreeLandLockScreenWorker : public QWaylandClientExtensionTemplate <TreeLandLockScreenWorker>, public QtWayland::treeland_lockscreen_v1
34+ {
35+ Q_OBJECT
36+
37+ public:
38+ explicit TreeLandLockScreenWorker (struct ::treeland_lockscreen_v1 *object);
39+ };
40+ }
41+ DS_END_NAMESPACE
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ add_subdirectory(panel-example)
1111add_subdirectory (layershell-example)
1212add_subdirectory (osd-example)
1313add_subdirectory (drag-example)
14+ add_subdirectory (lockscreen-example)
1415
1516if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
1617 add_subdirectory (bridge-example)
Original file line number Diff line number Diff line change 1+ # SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
2+ #
3+ # SPDX-License-Identifier: GPL-3.0-or-later
4+
5+ ds_install_package(PACKAGE org.deepin.ds.example.lockscreen)
Original file line number Diff line number Diff line change 1+ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
2+ //
3+ // SPDX-License-Identifier: LGPL-3.0-or-later
4+
5+ import QtQuick 2.11
6+ import QtQuick.Controls 2.4
7+
8+ import org.deepin.ds 1.0
9+
10+ AppletItem {
11+ implicitWidth: 120
12+ implicitHeight: 100
13+
14+ function lockscreenApplet ()
15+ {
16+ var lockscreen = DS .applet (" org.deepin.ds.dde-shutdown" )
17+ if (lockscreen) {
18+ return lockscreen
19+ } else {
20+ console .warn (" shutdown applet not found" )
21+ }
22+ }
23+
24+ Column {
25+ Button {
26+ text: " Lock"
27+ onClicked: {
28+ let lockscreen = lockscreenApplet ()
29+ if (lockscreen) {
30+ lockscreen .requestLock ()
31+ }
32+ }
33+ }
34+ Button {
35+ text: " Shutdown"
36+ onClicked: {
37+ let lockscreen = lockscreenApplet ()
38+ if (lockscreen) {
39+ lockscreen .requestShutdown ()
40+ }
41+ }
42+ }
43+ Button {
44+ text: " SwitchUser"
45+ onClicked: {
46+ let lockscreen = lockscreenApplet ()
47+ if (lockscreen) {
48+ lockscreen .requestSwitchUser ()
49+ }
50+ }
51+ }
52+ }
53+ }
Original file line number Diff line number Diff line change 1+ {
2+ "Plugin" : {
3+ "Version" : " 1.0" ,
4+ "Id" : " org.deepin.ds.example.lockscreen" ,
5+ "Url" : " main.qml" ,
6+ "Parent" : " org.deepin.ds.example.containment"
7+ }
8+ }
You can’t perform that action at this time.
0 commit comments