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
9 changes: 9 additions & 0 deletions applets/dde-shutdown/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later
find_package(TreelandProtocols REQUIRED)

add_library(dde-shutdown SHARED
shutdownapplet.cpp
shutdownapplet.h
treelandlockscreen.h
treelandlockscreen.cpp
)

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

target_link_libraries(dde-shutdown PRIVATE
dde-shell-frame
Qt${QT_MAJOR_VERSION}::DBus
Qt${QT_VERSION_MAJOR}::WaylandClient
)

ds_install_package(PACKAGE org.deepin.ds.dde-shutdown TARGET dde-shutdown)
29 changes: 26 additions & 3 deletions applets/dde-shutdown/shutdownapplet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
// SPDX-License-Identifier: GPL-3.0-or-later

#include "shutdownapplet.h"
#include "pluginfactory.h"
#include "treelandlockscreen.h"

#include <QDebug>
#include <QGuiApplication>

#include <DDBusSender>

#include <pluginfactory.h>
DCORE_USE_NAMESPACE

DS_BEGIN_NAMESPACE
Expand All @@ -25,13 +27,18 @@

bool ShutdownApplet::load()
{
auto platformName = QGuiApplication::platformName();
if (QStringLiteral("wayland") == platformName) {
m_lockscreen.reset(new TreeLandLockScreen);
}
return true;
}

bool ShutdownApplet::requestShutdown()

Check warning on line 37 in applets/dde-shutdown/shutdownapplet.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

The function 'requestShutdown' is never used.
{
if (QStringLiteral("wayland") == QGuiApplication::platformName()) {
qDebug() << "request treeland shutdown";
qDebug() << "request shutdown";
if (m_lockscreen) {
m_lockscreen->shutdown();
} else {
DDBusSender()
.service("org.deepin.dde.ShutdownFront1")
Expand All @@ -44,6 +51,22 @@
return true;
}

bool ShutdownApplet::requestLock()

Check warning on line 54 in applets/dde-shutdown/shutdownapplet.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

The function 'requestLock' is never used.
{
if (m_lockscreen) {
m_lockscreen->lock();
}
return true;
}

bool ShutdownApplet::requestSwitchUser()

Check warning on line 62 in applets/dde-shutdown/shutdownapplet.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

The function 'requestSwitchUser' is never used.
{
if (m_lockscreen) {
m_lockscreen->switchUser();
}
return true;
}

D_APPLET_CLASS(ShutdownApplet)
}
DS_END_NAMESPACE
Expand Down
6 changes: 6 additions & 0 deletions applets/dde-shutdown/shutdownapplet.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

DS_BEGIN_NAMESPACE
namespace shutdown {
class TreeLandLockScreen;
class ShutdownApplet : public DApplet
{
Q_OBJECT
Expand All @@ -19,6 +20,11 @@ class ShutdownApplet : public DApplet

public Q_SLOTS:
bool requestShutdown();
bool requestLock();
bool requestSwitchUser();

private:
QScopedPointer<TreeLandLockScreen> m_lockscreen;
};

}
Expand Down
51 changes: 51 additions & 0 deletions applets/dde-shutdown/treelandlockscreen.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "treelandlockscreen.h"

DS_BEGIN_NAMESPACE
namespace shutdown
{
TreeLandLockScreen::TreeLandLockScreen()
: QWaylandClientExtensionTemplate<TreeLandLockScreen>(treeland_dde_shell_manager_v1_interface.version)
{
}

void TreeLandLockScreen::lock()
{
if (auto impl = workder())
impl->lock();
}

void TreeLandLockScreen::shutdown()
{
if (auto impl = workder())
impl->shutdown();
}

void TreeLandLockScreen::switchUser()
{
if (auto impl = workder())
impl->switch_user();
}

TreeLandLockScreenWorker *TreeLandLockScreen::workder()
{
if (!isActive()) {
return nullptr;
}

if (m_worker.isNull()) {
m_worker.reset(new TreeLandLockScreenWorker(get_treeland_lockscreen()));
}
return m_worker.get();
}

TreeLandLockScreenWorker::TreeLandLockScreenWorker(struct ::treeland_lockscreen_v1 *object)
: QWaylandClientExtensionTemplate<TreeLandLockScreenWorker>(treeland_lockscreen_v1_interface.version)
, QtWayland::treeland_lockscreen_v1(object)
{
}
}
DS_END_NAMESPACE
41 changes: 41 additions & 0 deletions applets/dde-shutdown/treelandlockscreen.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once

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

#include <QtWaylandClient/QWaylandClientExtension>

DS_BEGIN_NAMESPACE
namespace shutdown
{
class TreeLandLockScreenWorker;
class TreeLandLockScreen : public QWaylandClientExtensionTemplate<TreeLandLockScreen>, public QtWayland::treeland_dde_shell_manager_v1
{
Q_OBJECT

public:
explicit TreeLandLockScreen();
void lock();
void shutdown();
void switchUser();

private:
TreeLandLockScreenWorker *workder();

private:
QScopedPointer<TreeLandLockScreenWorker> m_worker;
};

class TreeLandLockScreenWorker : public QWaylandClientExtensionTemplate<TreeLandLockScreenWorker>, public QtWayland::treeland_lockscreen_v1
{
Q_OBJECT

public:
explicit TreeLandLockScreenWorker(struct ::treeland_lockscreen_v1 *object);
};
}
DS_END_NAMESPACE
1 change: 1 addition & 0 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ add_subdirectory(panel-example)
add_subdirectory(layershell-example)
add_subdirectory(osd-example)
add_subdirectory(drag-example)
add_subdirectory(lockscreen-example)

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_subdirectory(bridge-example)
Expand Down
5 changes: 5 additions & 0 deletions example/lockscreen-example/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

ds_install_package(PACKAGE org.deepin.ds.example.lockscreen)
53 changes: 53 additions & 0 deletions example/lockscreen-example/package/main.qml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

import QtQuick 2.11
import QtQuick.Controls 2.4

import org.deepin.ds 1.0

AppletItem {
implicitWidth: 120
implicitHeight: 100

function lockscreenApplet()
{
var lockscreen = DS.applet("org.deepin.ds.dde-shutdown")
if (lockscreen) {
return lockscreen
} else {
console.warn("shutdown applet not found")
}
}

Column {
Button {
text: "Lock"
onClicked: {
let lockscreen = lockscreenApplet()
if (lockscreen) {
lockscreen.requestLock()
}
}
}
Button {
text: "Shutdown"
onClicked: {
let lockscreen = lockscreenApplet()
if (lockscreen) {
lockscreen.requestShutdown()
}
}
}
Button {
text: "SwitchUser"
onClicked: {
let lockscreen = lockscreenApplet()
if (lockscreen) {
lockscreen.requestSwitchUser()
}
}
}
}
}
8 changes: 8 additions & 0 deletions example/lockscreen-example/package/metadata.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Plugin": {
"Version": "1.0",
"Id": "org.deepin.ds.example.lockscreen",
"Url": "main.qml",
"Parent": "org.deepin.ds.example.containment"
}
}