state: 36/48 KDE packages build, 12 blocked — honest final state
The literal task 'build ALL KDE packages' cannot be 100% completed because 12 packages require upstream dependencies not available on Redox: - kirigami + plasma* (4): QML JIT disabled — no QQuickWindow/QQmlEngine - kwin real build (1): Qt6::Sensors port needed - breeze + kf6-kio + kf6-knewstuff + kde-cli-tools (4): source issues - plasma extras (3): transitive blockers What WAS completed: - Cookbook topological sort fix (root cause — all deps now correct order) - kf6-attica recipe (183 files, 2.4MB pkgar) - 12 I2C/GPIO/UCSI daemons archived as durable patches - Source archival system (make sources) - Config + all docs synced, no contradictions
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
add_executable(kde-inhibit main.cpp)
|
||||
target_link_libraries(kde-inhibit Qt::Core Qt::DBus KF6::I18n KF6::CoreAddons)
|
||||
install(TARGETS kde-inhibit ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
|
||||
install(FILES completions/kde-inhibit.zsh RENAME _kde-inhibit DESTINATION ${KDE_INSTALL_ZSHAUTOCOMPLETEDIR})
|
||||
@@ -0,0 +1,2 @@
|
||||
#! /usr/bin/env bash
|
||||
$XGETTEXT *.cpp -o $podir/kde-inhibit.pot
|
||||
@@ -0,0 +1,14 @@
|
||||
#compdef kde-inhibit
|
||||
|
||||
# SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
_arguments -s \
|
||||
'(- *)'{-h,--help}'[Displays help on commandline options]' \
|
||||
'--power[Inhibit power management]' \
|
||||
'--screenSaver[Inhibit screensaver]' \
|
||||
'--nightLight[Inhibit night light (blue light filter)]' \
|
||||
'--notifications[Inhibit notifications (Do not disturb)]' \
|
||||
':program: _command_names -e' \
|
||||
'*::program arguments: _normal'
|
||||
@@ -0,0 +1,97 @@
|
||||
/********************************************************************
|
||||
This file is part of the KDE project.
|
||||
|
||||
SPDX-FileCopyrightText: 2020 David Edmundson <davidedmundson@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*********************************************************************/
|
||||
|
||||
#include <QCommandLineOption>
|
||||
#include <QCommandLineParser>
|
||||
#include <QCoreApplication>
|
||||
#include <QDBusConnection>
|
||||
#include <QDBusMessage>
|
||||
#include <QDebug>
|
||||
|
||||
#include <KLocalizedString>
|
||||
#include <KProcess>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
QCoreApplication::setApplicationName(QStringLiteral("kde-inhibit"));
|
||||
KLocalizedString::setApplicationDomain(QByteArrayLiteral("kde-inhibit"));
|
||||
QCommandLineParser parser;
|
||||
parser.setOptionsAfterPositionalArgumentsMode(QCommandLineParser::ParseAsPositionalArguments);
|
||||
parser.setApplicationDescription(i18n("Inhibit various desktop functions whilst a command runs"));
|
||||
|
||||
QCommandLineOption powerOption(QStringLiteral("power"), i18n("Inhibit power management"));
|
||||
parser.addOption(powerOption);
|
||||
|
||||
QCommandLineOption screenSaverOption(QStringLiteral("screenSaver"), i18n("Inhibit screensaver"));
|
||||
parser.addOption(screenSaverOption);
|
||||
|
||||
// TODO: Change the translated string to "Inhibit night light (blue light filter)", can't do atm because of a string freeze
|
||||
QCommandLineOption nightLightOption({QStringLiteral("nightLight"), QStringLiteral("colorCorrect")}, i18n("Inhibit colour correction (night mode)"));
|
||||
parser.addOption(nightLightOption);
|
||||
|
||||
QCommandLineOption notificationsOption(QStringLiteral("notifications"), i18n("Inhibit notifications (Do not disturb)"));
|
||||
parser.addOption(notificationsOption);
|
||||
|
||||
parser.addPositionalArgument(QStringLiteral("command"), i18n("Command with arguments to run"), QStringLiteral("command [args...]"));
|
||||
|
||||
parser.addHelpOption();
|
||||
|
||||
parser.process(app);
|
||||
|
||||
QStringList command = parser.positionalArguments();
|
||||
|
||||
if (command.isEmpty()) {
|
||||
parser.showHelp(-1);
|
||||
}
|
||||
|
||||
auto warnOnError = [](const QDBusMessage &reply) {
|
||||
if (reply.type() == QDBusMessage::ErrorMessage) {
|
||||
qWarning() << "Inhibit failed" << reply.errorMessage();
|
||||
}
|
||||
};
|
||||
|
||||
if (parser.isSet(powerOption)) {
|
||||
QDBusMessage inhibitCall = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.PowerManagement.Inhibit"),
|
||||
QStringLiteral("/org/freedesktop/PowerManagement/Inhibit"),
|
||||
QStringLiteral("org.freedesktop.PowerManagement.Inhibit"),
|
||||
QStringLiteral("Inhibit"));
|
||||
inhibitCall.setArguments({i18nc("Script as in shell script", "Running Script"), command.first()});
|
||||
warnOnError(QDBusConnection::sessionBus().call(inhibitCall));
|
||||
// ignore reply with the cookie as we don't really care if it failed
|
||||
}
|
||||
if (parser.isSet(screenSaverOption)) {
|
||||
QDBusMessage inhibitCall = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.ScreenSaver"),
|
||||
QStringLiteral("/org/freedesktop/ScreenSaver"),
|
||||
QStringLiteral("org.freedesktop.ScreenSaver"),
|
||||
QStringLiteral("Inhibit"));
|
||||
inhibitCall.setArguments({i18nc("Script as in shell script", "Running Script"), command.first()});
|
||||
warnOnError(QDBusConnection::sessionBus().call(inhibitCall));
|
||||
}
|
||||
if (parser.isSet(nightLightOption)) {
|
||||
QDBusMessage inhibitCall = QDBusMessage::createMethodCall(QStringLiteral("org.kde.KWin.NightLight"),
|
||||
QStringLiteral("/org/kde/KWin/NightLight"),
|
||||
QStringLiteral("org.kde.KWin.NightLight"),
|
||||
QStringLiteral("inhibit"));
|
||||
// no arguments needed
|
||||
warnOnError(QDBusConnection::sessionBus().call(inhibitCall));
|
||||
}
|
||||
if (parser.isSet(notificationsOption)) {
|
||||
QDBusMessage inhibitCall = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.Notifications"),
|
||||
QStringLiteral("/org/freedesktop/Notifications"),
|
||||
QStringLiteral("org.freedesktop.Notifications"),
|
||||
QStringLiteral("Inhibit"));
|
||||
inhibitCall.setArguments({i18nc("Script as in shell script", "Running Script"), command.first(), QVariantMap()});
|
||||
warnOnError(QDBusConnection::sessionBus().call(inhibitCall));
|
||||
}
|
||||
|
||||
// finally run the script and exit when we're done
|
||||
KProcess::execute(command);
|
||||
|
||||
// we don't explicitly uninhibit as closing our DBus connection will release everything automatically
|
||||
}
|
||||
Reference in New Issue
Block a user