diff --git a/components/quicksettingsplugin/quicksettingsconfig.cpp b/components/quicksettingsplugin/quicksettingsconfig.cpp index e40a378b..eb8bda7b 100644 --- a/components/quicksettingsplugin/quicksettingsconfig.cpp +++ b/components/quicksettingsplugin/quicksettingsconfig.cpp @@ -45,6 +45,8 @@ QList QuickSettingsConfig::enabledQuickSettings() const QStringLiteral("org.kde.plasma.quicksetting.screenshot"), QStringLiteral("org.kde.plasma.quicksetting.powermenu"), QStringLiteral("org.kde.plasma.quicksetting.donotdisturb"), + QStringLiteral("org.kde.plasma.quicksetting.gaming"), + QStringLiteral("org.kde.plasma.quicksetting.gaminghint"), QStringLiteral("org.kde.plasma.quicksetting.caffeine"), QStringLiteral("org.kde.plasma.quicksetting.keyboardtoggle"), QStringLiteral("org.kde.plasma.quicksetting.hotspot")}); diff --git a/components/shellsettingsplugin/mobileshellsettings.cpp b/components/shellsettingsplugin/mobileshellsettings.cpp index 88beb01e..29ff0077 100644 --- a/components/shellsettingsplugin/mobileshellsettings.cpp +++ b/components/shellsettingsplugin/mobileshellsettings.cpp @@ -44,6 +44,8 @@ MobileShellSettings::MobileShellSettings(QObject *parent) Q_EMIT actionDrawerTopRightModeChanged(); Q_EMIT convergenceModeEnabledChanged(); Q_EMIT autoHidePanelsEnabledChanged(); + Q_EMIT gamingModeEnabledChanged(); + Q_EMIT gamingDismissHintEnabledChanged(); Q_EMIT allowLogoutChanged(); } if (group.name() == LOCKSCREEN_CONFIG_GROUP) { @@ -248,6 +250,32 @@ void MobileShellSettings::setAutoHidePanelsEnabled(bool enabled) m_config->sync(); } +bool MobileShellSettings::gamingModeEnabled() const +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + return group.readEntry("gamingModeEnabled", false); +} + +void MobileShellSettings::setGamingModeEnabled(bool enabled) +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + group.writeEntry("gamingModeEnabled", enabled, KConfigGroup::Notify); + m_config->sync(); +} + +bool MobileShellSettings::gamingDismissHintEnabled() const +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + return group.readEntry("gamingDismissHintEnabled", true); +} + +void MobileShellSettings::setGamingDismissHintEnabled(bool enabled) +{ + auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP}; + group.writeEntry("gamingDismissHintEnabled", enabled, KConfigGroup::Notify); + m_config->sync(); +} + void MobileShellSettings::updateNavigationBarsInPlasma() { // Do not update panels when not in Plasma Mobile diff --git a/components/shellsettingsplugin/mobileshellsettings.h b/components/shellsettingsplugin/mobileshellsettings.h index 64be056b..a88d96d3 100644 --- a/components/shellsettingsplugin/mobileshellsettings.h +++ b/components/shellsettingsplugin/mobileshellsettings.h @@ -52,6 +52,10 @@ class MobileShellSettings : public QObject // Auto Hide Panels Q_PROPERTY(bool autoHidePanelsEnabled READ autoHidePanelsEnabled WRITE setAutoHidePanelsEnabled NOTIFY autoHidePanelsEnabledChanged) + // Gaming mode + Q_PROPERTY(bool gamingModeEnabled READ gamingModeEnabled WRITE setGamingModeEnabled NOTIFY gamingModeEnabledChanged) + Q_PROPERTY(bool gamingDismissHintEnabled READ gamingDismissHintEnabled WRITE setGamingDismissHintEnabled NOTIFY gamingDismissHintEnabledChanged) + // logout dialog Q_PROPERTY(bool allowLogout READ allowLogout READ allowLogout NOTIFY allowLogoutChanged) @@ -264,6 +268,12 @@ public: */ void setAutoHidePanelsEnabled(bool enabled); + bool gamingModeEnabled() const; + void setGamingModeEnabled(bool enabled); + + bool gamingDismissHintEnabled() const; + void setGamingDismissHintEnabled(bool enabled); + /** * Whether logout button is shown in the logout/shutdown dialog. */ @@ -310,6 +320,8 @@ Q_SIGNALS: void quickSettingsColumnsChanged(); void convergenceModeEnabledChanged(); void autoHidePanelsEnabledChanged(); + void gamingModeEnabledChanged(); + void gamingDismissHintEnabledChanged(); void allowLogoutChanged(); void lockscreenLeftButtonActionChanged(); void lockscreenRightButtonActionChanged(); diff --git a/quicksettings/CMakeLists.txt b/quicksettings/CMakeLists.txt index a560bdaf..0869f509 100644 --- a/quicksettings/CMakeLists.txt +++ b/quicksettings/CMakeLists.txt @@ -8,6 +8,8 @@ plasma_install_package(bluetooth org.kde.plasma.quicksetting.bluetooth quicksett plasma_install_package(caffeine org.kde.plasma.quicksetting.caffeine quicksettings) plasma_install_package(docked org.kde.plasma.quicksetting.docked quicksettings) plasma_install_package(donotdisturb org.kde.plasma.quicksetting.donotdisturb quicksettings) +plasma_install_package(gaming org.kde.plasma.quicksetting.gaming quicksettings) +plasma_install_package(gaminghint org.kde.plasma.quicksetting.gaminghint 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) diff --git a/quicksettings/gaming/Messages.sh b/quicksettings/gaming/Messages.sh new file mode 100644 index 00000000..37df498c --- /dev/null +++ b/quicksettings/gaming/Messages.sh @@ -0,0 +1,6 @@ +#! /usr/bin/env bash + +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +$XGETTEXT `find . -name \*.js -o -name \*.qml -o -name \*.cpp` -o $podir/plasma_org.kde.plasma.quicksetting.gaming.pot diff --git a/quicksettings/gaming/contents/ui/main.qml b/quicksettings/gaming/contents/ui/main.qml new file mode 100644 index 00000000..a390c193 --- /dev/null +++ b/quicksettings/gaming/contents/ui/main.qml @@ -0,0 +1,46 @@ +// SPDX-FileCopyrightText: 2026 Marco Allegretti +// SPDX-License-Identifier: EUPL-1.2 + +import QtQuick 2.15 + +import org.kde.kirigami as Kirigami + +import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings +import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS + +QS.QuickSetting { + id: root + + text: i18n("Gaming Mode") + icon: "input-gaming" + status: enabled ? i18n("Active") : i18n("Inactive") + enabled: ShellSettings.Settings.gamingModeEnabled + + function requestDisable() { + confirmDisableDialog.active = true; + confirmDisableDialog.item.open(); + } + + function toggle() { + if (ShellSettings.Settings.gamingModeEnabled) { + requestDisable(); + return; + } + + ShellSettings.Settings.gamingModeEnabled = true; + } + + Loader { + id: confirmDisableDialog + active: false + + sourceComponent: Kirigami.PromptDialog { + title: i18n("Exit Gaming Mode") + subtitle: i18n("Switch back to the normal shell layout?") + standardButtons: Kirigami.Dialog.Yes | Kirigami.Dialog.Cancel + + onAccepted: ShellSettings.Settings.gamingModeEnabled = false + onClosed: confirmDisableDialog.active = false + } + } +} diff --git a/quicksettings/gaming/metadata.json b/quicksettings/gaming/metadata.json new file mode 100644 index 00000000..a86169b0 --- /dev/null +++ b/quicksettings/gaming/metadata.json @@ -0,0 +1,18 @@ +{ + "KPackageStructure": "KPackage/GenericQML", + "KPlugin": { + "Authors": [ + { + "Email": "mightymarco4@gmail.com", + "Name": "Marco Allegretti" + } + ], + "Description": "Quick setting to toggle gaming mode for Plasma Mobile", + "Icon": "input-gaming", + "Id": "org.kde.plasma.quicksetting.gaming", + "License": "EUPL-1.2", + "Name": "Gaming Mode", + "Version": "0.1", + "Website": "" + } +} diff --git a/quicksettings/gaminghint/Messages.sh b/quicksettings/gaminghint/Messages.sh new file mode 100644 index 00000000..73c7528f --- /dev/null +++ b/quicksettings/gaminghint/Messages.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: 2026 Marco Allegretti +# SPDX-License-Identifier: EUPL-1.2 + +$XGETTEXT *.json contents/ui/*.qml -o $podir/plasma_mobile_qt.pot diff --git a/quicksettings/gaminghint/contents/ui/main.qml b/quicksettings/gaminghint/contents/ui/main.qml new file mode 100644 index 00000000..f6623072 --- /dev/null +++ b/quicksettings/gaminghint/contents/ui/main.qml @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2026 Marco Allegretti +// SPDX-License-Identifier: EUPL-1.2 + +import QtQuick 2.15 + +import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings +import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS + +QS.QuickSetting { + text: i18n("Game Center Hint") + icon: "dialog-information" + status: "" + enabled: ShellSettings.Settings.gamingDismissHintEnabled + + function toggle() { + ShellSettings.Settings.gamingDismissHintEnabled = !ShellSettings.Settings.gamingDismissHintEnabled; + } +} diff --git a/quicksettings/gaminghint/metadata.json b/quicksettings/gaminghint/metadata.json new file mode 100644 index 00000000..7095774f --- /dev/null +++ b/quicksettings/gaminghint/metadata.json @@ -0,0 +1,18 @@ +{ + "KPackageStructure": "KPackage/GenericQML", + "KPlugin": { + "Authors": [ + { + "Email": "mightymarco4@gmail.com", + "Name": "Marco Allegretti" + } + ], + "Description": "Quick setting to toggle the Game Center dismiss hint banner", + "Icon": "dialog-information", + "Id": "org.kde.plasma.quicksetting.gaminghint", + "License": "EUPL-1.2", + "Name": "Game Center Hint", + "Version": "0.1", + "Website": "" + } +}