quicksettings: Add power menu quicksetting

This commit is contained in:
Devin Lin 2022-02-11 00:20:47 -05:00
parent 1101599e58
commit fc99809143
10 changed files with 165 additions and 0 deletions

View file

@ -49,6 +49,9 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
ModemManagerQt
NetworkManagerQt
)
find_package(LibKWorkspace CONFIG REQUIRED)
find_package(KWinDBusInterface)
set_package_properties(KWinDBusInterface PROPERTIES DESCRIPTION "KWin DBus interface"
TYPE REQUIRED

View file

@ -4,3 +4,4 @@
plasma_install_package(airplanemode org.kde.plasma.airplanemode quicksettings)
plasma_install_package(caffeine org.kde.plasma.caffeine quicksettings)
add_subdirectory(nightcolor)
add_subdirectory(powermenu)

View file

@ -0,0 +1,34 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
set(powermenuplugin_SRCS
powermenuplugin.cpp
powermenuutil.cpp
)
add_library(powermenuplugin ${powermenuplugin_SRCS})
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
Config
Declarative
)
find_package(PW::KWorkspace)
target_link_libraries(powermenuplugin
PUBLIC
Qt::Core
PRIVATE
KF5::CoreAddons
KF5::QuickAddons
PW::KWorkspace
)
set_property(TARGET powermenuplugin PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/org/kde/plasma/quicksetting/powermenu)
file(COPY qmldir DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/org/kde/plasma/quicksetting/powermenu)
install(TARGETS powermenuplugin DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/quicksetting/powermenu)
install(FILES qmldir ${qml_SRC} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/quicksetting/powermenu)
plasma_install_package(package org.kde.plasma.powermenu quicksettings)

View file

@ -0,0 +1,21 @@
/*
* SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.quicksetting.powermenu 1.0 as PowerMenu
MobileShell.QuickSetting {
text: i18n("Shut Down")
icon: "system-shutdown-symbolic"
status: i18n("Open power menu")
enabled: false
function toggle() {
PowerMenu.PowerMenuUtil.openShutdownScreen();
}
}

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Power Menu
Icon=system-shutdown-symbolic
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.powermenu
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL

View file

@ -0,0 +1,23 @@
/*
* SPDX-FileCopyrightText: 2022 by Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "powermenuplugin.h"
#include <QQmlContext>
#include <QQuickItem>
#include "powermenuutil.h"
void PowerMenuPlugin::registerTypes(const char *uri)
{
Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.quicksetting.powermenu"));
qmlRegisterSingletonType<PowerMenuUtil>(uri, 1, 0, "PowerMenuUtil", [](QQmlEngine *, QJSEngine *) {
return new PowerMenuUtil;
});
}
//#include "moc_powermenuplugin.cpp"

View file

@ -0,0 +1,21 @@
/*
* SPDX-FileCopyrightText: 2022 by Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QUrl>
#include <QQmlEngine>
#include <QQmlExtensionPlugin>
class PowerMenuPlugin : public QQmlExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
public:
void registerTypes(const char *uri) override;
};

View file

@ -0,0 +1,19 @@
/*
* SPDX-FileCopyrightText: 2022 by Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "powermenuutil.h"
#include <kworkspace.h>
PowerMenuUtil::PowerMenuUtil(QObject *parent)
: QObject{parent}
{
}
void PowerMenuUtil::openShutdownScreen()
{
KWorkSpace::requestShutDown(KWorkSpace::ShutdownConfirmYes);
}

View file

@ -0,0 +1,19 @@
/*
* SPDX-FileCopyrightText: 2022 by Devin Lin <devin@kde.org>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#pragma once
#include <QObject>
class PowerMenuUtil : public QObject
{
Q_OBJECT
public:
PowerMenuUtil(QObject *parent = nullptr);
Q_INVOKABLE void openShutdownScreen();
};

View file

@ -0,0 +1,6 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
module org.kde.plasma.quicksetting.powermenu
plugin powermenuplugin
classname PowerMenuPlugin