mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 06:13:09 +00:00
kscreenosd quicksetting
This quicksetting plugion allows the user to open the KScreen OSD which makes it easy to reconfigure a multiscreen setup. It's only available when more than one monitor is connected. Signed-off-by: Sebastian Kügler <sebas@kde.org>
This commit is contained in:
parent
c3ae6650ed
commit
b849fb98ab
10 changed files with 203 additions and 0 deletions
|
|
@ -10,12 +10,14 @@ plasma_install_package(docked org.kde.plasma.quicksetting.docked quicksettings)
|
|||
plasma_install_package(donotdisturb org.kde.plasma.quicksetting.donotdisturb quicksettings)
|
||||
plasma_install_package(autohidepanels org.kde.plasma.quicksetting.autohidepanels quicksettings)
|
||||
plasma_install_package(keyboardtoggle org.kde.plasma.quicksetting.keyboardtoggle quicksettings)
|
||||
plasma_install_package(kscreenosd org.kde.plasma.quicksetting.kscreenosd quicksettings)
|
||||
plasma_install_package(mobiledata org.kde.plasma.quicksetting.mobiledata quicksettings)
|
||||
plasma_install_package(settingsapp org.kde.plasma.quicksetting.settingsapp quicksettings)
|
||||
plasma_install_package(waydroid org.kde.plasma.quicksetting.waydroid quicksettings)
|
||||
plasma_install_package(wifi org.kde.plasma.quicksetting.wifi quicksettings)
|
||||
plasma_install_package(hotspot org.kde.plasma.quicksetting.hotspot quicksettings)
|
||||
add_subdirectory(flashlight)
|
||||
add_subdirectory(kscreenosd)
|
||||
add_subdirectory(nightcolor)
|
||||
add_subdirectory(powermenu)
|
||||
# TODO: Disable screen recording quick setting, as it does not work properly
|
||||
|
|
|
|||
27
quicksettings/kscreenosd/CMakeLists.txt
Normal file
27
quicksettings/kscreenosd/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
set(kscreenosdplugin_SRCS
|
||||
kscreenosdplugin.cpp
|
||||
kscreenosdutil.cpp
|
||||
)
|
||||
|
||||
add_library(kscreenosdplugin ${kscreenosdplugin_SRCS})
|
||||
|
||||
target_link_libraries(kscreenosdplugin
|
||||
Qt::Core
|
||||
Qt::Qml
|
||||
Qt::Quick
|
||||
Qt::DBus
|
||||
KF6::Screen
|
||||
)
|
||||
|
||||
set_property(TARGET kscreenosdplugin PROPERTY LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/org/kde/plasma/quicksetting/kscreenosd)
|
||||
file(COPY qmldir DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/org/kde/plasma/quicksetting/kscreenosd)
|
||||
|
||||
install(TARGETS kscreenosdplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/quicksetting/kscreenosd)
|
||||
install(FILES qmldir ${qml_SRC} DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/quicksetting/kscreenosd)
|
||||
|
||||
plasma_install_package(package org.kde.plasma.quicksetting.kscreenosd quicksettings)
|
||||
|
||||
|
||||
8
quicksettings/kscreenosd/Messages.sh
Normal file
8
quicksettings/kscreenosd/Messages.sh
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#! /usr/bin/env bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
|
||||
$XGETTEXT `find . -name \*.js -o -name \*.qml -o -name \*.cpp` -o $podir/plasma_org.kde.plasma.quicksetting.kscreenosd.pot
|
||||
|
||||
20
quicksettings/kscreenosd/kscreenosdplugin.cpp
Normal file
20
quicksettings/kscreenosd/kscreenosdplugin.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "kscreenosdplugin.h"
|
||||
|
||||
#include <QQmlContext>
|
||||
#include <QQuickItem>
|
||||
|
||||
#include "kscreenosdutil.h"
|
||||
|
||||
void KScreenOSDPlugin::registerTypes(const char *uri)
|
||||
{
|
||||
Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.quicksetting.kscreenosd"));
|
||||
|
||||
qmlRegisterSingletonType<KScreenOSDUtil>(uri, 1, 0, "KScreenOSDUtil", [](QQmlEngine *, QJSEngine *) {
|
||||
return new KScreenOSDUtil;
|
||||
});
|
||||
}
|
||||
|
||||
//#include "moc_screenrotationplugin.cpp"
|
||||
18
quicksettings/kscreenosd/kscreenosdplugin.h
Normal file
18
quicksettings/kscreenosd/kscreenosdplugin.h
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
// SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QUrl>
|
||||
|
||||
#include <QQmlEngine>
|
||||
#include <QQmlExtensionPlugin>
|
||||
|
||||
class KScreenOSDPlugin : public QQmlExtensionPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface")
|
||||
|
||||
public:
|
||||
void registerTypes(const char *uri) override;
|
||||
};
|
||||
53
quicksettings/kscreenosd/kscreenosdutil.cpp
Normal file
53
quicksettings/kscreenosd/kscreenosdutil.cpp
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
// SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "kscreenosdutil.h"
|
||||
|
||||
#include <kscreen/configmonitor.h>
|
||||
#include <kscreen/getconfigoperation.h>
|
||||
#include <kscreen/output.h>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDBusInterface>
|
||||
#include <QDBusReply>
|
||||
|
||||
KScreenOSDUtil::KScreenOSDUtil(QObject *parent)
|
||||
: QObject{parent}
|
||||
{
|
||||
connect(KScreen::ConfigMonitor::instance(), &KScreen::ConfigMonitor::configurationChanged, this, [this]() {
|
||||
setOutputs(m_config->outputs().size());
|
||||
});
|
||||
|
||||
connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this, [this](auto *op) {
|
||||
m_config = qobject_cast<KScreen::GetConfigOperation *>(op)->config();
|
||||
KScreen::ConfigMonitor::instance()->addConfig(m_config);
|
||||
setOutputs(m_config->outputs().size());
|
||||
});
|
||||
}
|
||||
|
||||
void KScreenOSDUtil::setOutputs(int _outputs)
|
||||
{
|
||||
if (_outputs != m_outputs) {
|
||||
m_outputs = _outputs;
|
||||
Q_EMIT outputsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
int KScreenOSDUtil::outputs() const
|
||||
{
|
||||
return m_outputs;
|
||||
}
|
||||
|
||||
void KScreenOSDUtil::showKScreenOSD()
|
||||
{
|
||||
// This is equivalent to this call from the command line:
|
||||
// busctl --user call org.kde.kscreen.osdService /org/kde/kscreen/osdService org.kde.kscreen.osdService showActionSelector
|
||||
QDBusMessage msg = QDBusMessage::createMethodCall(
|
||||
"org.kde.kscreen.osdService", // service
|
||||
"/org/kde/kscreen/osdService", // object path
|
||||
"org.kde.kscreen.osdService", // interface
|
||||
"showActionSelector" // method
|
||||
);
|
||||
|
||||
auto pendingCall = QDBusConnection::sessionBus().asyncCall(msg);
|
||||
}
|
||||
29
quicksettings/kscreenosd/kscreenosdutil.h
Normal file
29
quicksettings/kscreenosd/kscreenosdutil.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <kscreen/config.h>
|
||||
|
||||
class KScreenOSDUtil : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(int outputs READ outputs WRITE setOutputs NOTIFY outputsChanged);
|
||||
|
||||
public:
|
||||
KScreenOSDUtil(QObject *parent = nullptr);
|
||||
|
||||
Q_INVOKABLE void showKScreenOSD();
|
||||
|
||||
int outputs() const;
|
||||
void setOutputs(int _outputs);
|
||||
|
||||
Q_SIGNALS:
|
||||
void outputsChanged();
|
||||
|
||||
private:
|
||||
KScreen::ConfigPtr m_config{nullptr};
|
||||
int m_outputs{0};
|
||||
|
||||
};
|
||||
22
quicksettings/kscreenosd/package/contents/ui/main.qml
Normal file
22
quicksettings/kscreenosd/package/contents/ui/main.qml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
// SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.quicksetting.kscreenosd
|
||||
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
||||
|
||||
QS.QuickSetting {
|
||||
id: kscreenosd_qs
|
||||
text: i18n("Display Config")
|
||||
icon: "osd-duplicate"
|
||||
settingsCommand: "plasma-open-settings kcm_kscreen"
|
||||
status: i18nc("kscreen osd quicksetting", "Tap to set up")
|
||||
enabled: false
|
||||
available: true
|
||||
|
||||
function toggle() {
|
||||
console.log("Showing KScreen OSD");
|
||||
KScreenOSDUtil.showKScreenOSD();
|
||||
}
|
||||
}
|
||||
17
quicksettings/kscreenosd/package/metadata.json
Normal file
17
quicksettings/kscreenosd/package/metadata.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"KPackageStructure": "KPackage/GenericQML",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "sebas@kde.org",
|
||||
"Name": "Sebastian Kügler"
|
||||
}
|
||||
],
|
||||
"Description": "Screen setup OSD quick setting for Plasma Mobile",
|
||||
"Icon": "osd-duplicate",
|
||||
"Id": "org.kde.plasma.quicksetting.kscreenosd",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Screen OSD",
|
||||
"Website": "https://kde.org"
|
||||
}
|
||||
}
|
||||
7
quicksettings/kscreenosd/qmldir
Normal file
7
quicksettings/kscreenosd/qmldir
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# SPDX-FileCopyrightText: 2025 Sebastian Kügler <sebas@kde.org>
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
module org.kde.plasma.quicksetting.kscreenosd
|
||||
plugin kscreenosdplugin
|
||||
classname KScreenOSDPlugin
|
||||
|
||||
Loading…
Reference in a new issue