Skip to content

Commit dbb0ac1

Browse files
committed
feat: add lockscreen protocol for ShutdownApplet
as title.
1 parent 36ae417 commit dbb0ac1

File tree

9 files changed

+200
-3
lines changed

9 files changed

+200
-3
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
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

56
add_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

1018
target_link_libraries(dde-shutdown PRIVATE
1119
dde-shell-frame
1220
Qt${QT_MAJOR_VERSION}::DBus
21+
Qt${QT_VERSION_MAJOR}::WaylandClient
1322
)
1423

1524
ds_install_package(PACKAGE org.deepin.ds.dde-shutdown TARGET dde-shutdown)

applets/dde-shutdown/shutdownapplet.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
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>
1214
DCORE_USE_NAMESPACE
1315

1416
DS_BEGIN_NAMESPACE
@@ -25,13 +27,18 @@ ShutdownApplet::~ShutdownApplet()
2527

2628
bool 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

3137
bool 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+
4770
D_APPLET_CLASS(ShutdownApplet)
4871
}
4972
DS_END_NAMESPACE

applets/dde-shutdown/shutdownapplet.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
DS_BEGIN_NAMESPACE
1010
namespace shutdown {
11+
class TreeLandLockScreen;
1112
class ShutdownApplet : public DApplet
1213
{
1314
Q_OBJECT
@@ -19,6 +20,11 @@ class ShutdownApplet : public DApplet
1920

2021
public Q_SLOTS:
2122
bool requestShutdown();
23+
bool requestLock();
24+
bool requestSwitchUser();
25+
26+
private:
27+
QScopedPointer<TreeLandLockScreen> m_lockscreen;
2228
};
2329

2430
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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

example/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ add_subdirectory(panel-example)
1111
add_subdirectory(layershell-example)
1212
add_subdirectory(osd-example)
1313
add_subdirectory(drag-example)
14+
add_subdirectory(lockscreen-example)
1415

1516
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
1617
add_subdirectory(bridge-example)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
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)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
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+
}

0 commit comments

Comments
 (0)