From fc99809143bcf1c74738033ce5c0f9746a3d7639 Mon Sep 17 00:00:00 2001 From: Devin Lin Date: Fri, 11 Feb 2022 00:20:47 -0500 Subject: [PATCH] quicksettings: Add power menu quicksetting --- CMakeLists.txt | 3 ++ quicksettings/CMakeLists.txt | 1 + quicksettings/powermenu/CMakeLists.txt | 34 +++++++++++++++++++ .../powermenu/package/contents/ui/main.qml | 21 ++++++++++++ .../powermenu/package/metadata.desktop | 18 ++++++++++ quicksettings/powermenu/powermenuplugin.cpp | 23 +++++++++++++ quicksettings/powermenu/powermenuplugin.h | 21 ++++++++++++ quicksettings/powermenu/powermenuutil.cpp | 19 +++++++++++ quicksettings/powermenu/powermenuutil.h | 19 +++++++++++ quicksettings/powermenu/qmldir | 6 ++++ 10 files changed, 165 insertions(+) create mode 100644 quicksettings/powermenu/CMakeLists.txt create mode 100644 quicksettings/powermenu/package/contents/ui/main.qml create mode 100644 quicksettings/powermenu/package/metadata.desktop create mode 100644 quicksettings/powermenu/powermenuplugin.cpp create mode 100644 quicksettings/powermenu/powermenuplugin.h create mode 100644 quicksettings/powermenu/powermenuutil.cpp create mode 100644 quicksettings/powermenu/powermenuutil.h create mode 100644 quicksettings/powermenu/qmldir diff --git a/CMakeLists.txt b/CMakeLists.txt index 70ac012a..1b01e766 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/quicksettings/CMakeLists.txt b/quicksettings/CMakeLists.txt index 998d065e..2826ea02 100644 --- a/quicksettings/CMakeLists.txt +++ b/quicksettings/CMakeLists.txt @@ -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) diff --git a/quicksettings/powermenu/CMakeLists.txt b/quicksettings/powermenu/CMakeLists.txt new file mode 100644 index 00000000..b20c8f8b --- /dev/null +++ b/quicksettings/powermenu/CMakeLists.txt @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: 2022 Devin Lin +# 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) + diff --git a/quicksettings/powermenu/package/contents/ui/main.qml b/quicksettings/powermenu/package/contents/ui/main.qml new file mode 100644 index 00000000..ae0b37a3 --- /dev/null +++ b/quicksettings/powermenu/package/contents/ui/main.qml @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: 2022 Devin Lin + * + * 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(); + } +} + diff --git a/quicksettings/powermenu/package/metadata.desktop b/quicksettings/powermenu/package/metadata.desktop new file mode 100644 index 00000000..fbcfe4f0 --- /dev/null +++ b/quicksettings/powermenu/package/metadata.desktop @@ -0,0 +1,18 @@ +# SPDX-FileCopyrightText: 2022 Devin Lin +# 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 + + diff --git a/quicksettings/powermenu/powermenuplugin.cpp b/quicksettings/powermenu/powermenuplugin.cpp new file mode 100644 index 00000000..f8b83cf2 --- /dev/null +++ b/quicksettings/powermenu/powermenuplugin.cpp @@ -0,0 +1,23 @@ +/* + * SPDX-FileCopyrightText: 2022 by Devin Lin + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "powermenuplugin.h" + +#include +#include + +#include "powermenuutil.h" + +void PowerMenuPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.quicksetting.powermenu")); + + qmlRegisterSingletonType(uri, 1, 0, "PowerMenuUtil", [](QQmlEngine *, QJSEngine *) { + return new PowerMenuUtil; + }); +} + +//#include "moc_powermenuplugin.cpp" diff --git a/quicksettings/powermenu/powermenuplugin.h b/quicksettings/powermenu/powermenuplugin.h new file mode 100644 index 00000000..c4c72fce --- /dev/null +++ b/quicksettings/powermenu/powermenuplugin.h @@ -0,0 +1,21 @@ +/* + * SPDX-FileCopyrightText: 2022 by Devin Lin + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#pragma once + +#include + +#include +#include + +class PowerMenuPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) override; +}; diff --git a/quicksettings/powermenu/powermenuutil.cpp b/quicksettings/powermenu/powermenuutil.cpp new file mode 100644 index 00000000..49bcb0dd --- /dev/null +++ b/quicksettings/powermenu/powermenuutil.cpp @@ -0,0 +1,19 @@ +/* + * SPDX-FileCopyrightText: 2022 by Devin Lin + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "powermenuutil.h" + +#include + +PowerMenuUtil::PowerMenuUtil(QObject *parent) + : QObject{parent} +{ +} + +void PowerMenuUtil::openShutdownScreen() +{ + KWorkSpace::requestShutDown(KWorkSpace::ShutdownConfirmYes); +} diff --git a/quicksettings/powermenu/powermenuutil.h b/quicksettings/powermenu/powermenuutil.h new file mode 100644 index 00000000..484edf8c --- /dev/null +++ b/quicksettings/powermenu/powermenuutil.h @@ -0,0 +1,19 @@ +/* + * SPDX-FileCopyrightText: 2022 by Devin Lin + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#pragma once + +#include + +class PowerMenuUtil : public QObject +{ + Q_OBJECT + +public: + PowerMenuUtil(QObject *parent = nullptr); + + Q_INVOKABLE void openShutdownScreen(); +}; diff --git a/quicksettings/powermenu/qmldir b/quicksettings/powermenu/qmldir new file mode 100644 index 00000000..bf9028bd --- /dev/null +++ b/quicksettings/powermenu/qmldir @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: 2022 Devin Lin +# SPDX-License-Identifier: GPL-2.0-or-later + +module org.kde.plasma.quicksetting.powermenu +plugin powermenuplugin +classname PowerMenuPlugin