mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-06-11 16:57:43 +00:00
Expose theme and accent controls in MobileShellSettings and the\nAppearance KCM. Generate ShiftWallpaperDark/Light from Shift base\nschemes, apply them through KDE color tools, and debounce wallpaper\ncolor updates. Register a dedicated dynamic-theming regression test.
446 lines
18 KiB
QML
446 lines
18 KiB
QML
/*
|
|
* SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
|
|
* SPDX-License-Identifier: LGPL-2.0-or-later
|
|
*/
|
|
|
|
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import QtQuick.Controls 2.15 as QQC2
|
|
|
|
import org.kde.kirigami as Kirigami
|
|
import org.kde.kcmutils as KCM
|
|
import org.kde.kirigamiaddons.formcard 1.0 as FormCard
|
|
import org.kde.plasma.private.mobileshell as MobileShell
|
|
import org.kde.plasma.private.mobileshell.shellsettingsplugin as ShellSettings
|
|
|
|
KCM.SimpleKCM {
|
|
id: root
|
|
|
|
title: i18n("Shell")
|
|
|
|
topPadding: 0
|
|
bottomPadding: 0
|
|
leftPadding: 0
|
|
rightPadding: 0
|
|
|
|
function openSettingsModule(moduleName) {
|
|
MobileShell.ShellUtil.executeCommand("plasma-open-settings " + moduleName);
|
|
}
|
|
|
|
ColumnLayout {
|
|
FormCard.FormHeader {
|
|
title: i18n("Appearance")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
FormCard.FormButtonDelegate {
|
|
id: appearanceButton
|
|
icon.name: "preferences-desktop-theme-global"
|
|
text: i18n("Appearance")
|
|
onClicked: kcm.push("AppearanceForm.qml")
|
|
}
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18n("General")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
FormCard.FormButtonDelegate {
|
|
id: shellVibrationsButton
|
|
text: i18n("Shell Vibrations")
|
|
onClicked: kcm.push("VibrationForm.qml")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: shellVibrationsButton; below: animationsSwitch }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: animationsSwitch
|
|
text: i18n("Animations")
|
|
description: i18n("If this is off, animations will be reduced as much as possible.")
|
|
checked: ShellSettings.Settings.animationsEnabled
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.animationsEnabled) {
|
|
ShellSettings.Settings.animationsEnabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: animationsSwitch; below: doubleTapWakeup }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: doubleTapWakeup
|
|
text: i18n("Double Tap to Wakeup")
|
|
description: i18n("When the screen is off, double tap to wakeup the device.")
|
|
checked: ShellSettings.KWinSettings.doubleTapWakeup
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.KWinSettings.doubleTapWakeup) {
|
|
ShellSettings.KWinSettings.doubleTapWakeup = checked;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18n("Convergence")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
FormCard.FormSwitchDelegate {
|
|
id: convergenceModeSwitch
|
|
text: i18n("Convergence Mode")
|
|
description: i18n("Use desktop-style window placement, titlebar controls, Overview, and the dock.")
|
|
checked: ShellSettings.Settings.convergenceModeEnabled
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.convergenceModeEnabled) {
|
|
ShellSettings.Settings.convergenceModeEnabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: convergenceModeSwitch; below: dynamicTilingSwitch }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: dynamicTilingSwitch
|
|
text: i18n("Dynamic Tiling")
|
|
description: i18n("Automatically arrange windows in convergence mode. Disabled while convergence mode is off or gaming mode is active.")
|
|
enabled: ShellSettings.Settings.convergenceModeEnabled && !ShellSettings.Settings.gamingModeEnabled
|
|
checked: ShellSettings.Settings.dynamicTilingEnabled
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.dynamicTilingEnabled) {
|
|
ShellSettings.Settings.dynamicTilingEnabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: dynamicTilingSwitch; below: snapLayoutsSwitch }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: snapLayoutsSwitch
|
|
text: i18n("Snap Layouts")
|
|
description: i18n("Show the snap layout picker from the maximize button. Disabled while convergence mode is off, gaming mode is active, or dynamic tiling is enabled.")
|
|
enabled: ShellSettings.Settings.convergenceModeEnabled
|
|
&& !ShellSettings.Settings.gamingModeEnabled
|
|
&& !ShellSettings.Settings.dynamicTilingEnabled
|
|
checked: ShellSettings.Settings.snapLayoutsEnabled
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.snapLayoutsEnabled) {
|
|
ShellSettings.Settings.snapLayoutsEnabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: snapLayoutsSwitch; below: autoHidePanels }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: autoHidePanels
|
|
text: i18n("Auto Hide Panels")
|
|
description: i18n("Allow maximized or fullscreen applications to reclaim panel and dock space.")
|
|
checked: ShellSettings.Settings.autoHidePanelsEnabled
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.autoHidePanelsEnabled) {
|
|
ShellSettings.Settings.autoHidePanelsEnabled = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: autoHidePanels; below: displayConfigurationButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: displayConfigurationButton
|
|
icon.name: "preferences-desktop-display-randr"
|
|
text: i18n("Display Configuration")
|
|
onClicked: root.openSettingsModule("kcm_kscreen")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: displayConfigurationButton; below: networkingButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: networkingButton
|
|
icon.name: "preferences-system-network"
|
|
text: i18n("Wi-Fi & Networking")
|
|
onClicked: root.openSettingsModule("kcm_networkmanagement")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: networkingButton; below: soundButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: soundButton
|
|
icon.name: "preferences-desktop-sound"
|
|
text: i18n("Sound")
|
|
onClicked: root.openSettingsModule("kcm_pulseaudio")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: soundButton; below: shortcutsButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: shortcutsButton
|
|
icon.name: "preferences-desktop-keyboard-shortcut"
|
|
text: i18n("Shortcuts")
|
|
onClicked: root.openSettingsModule("kcm_keys")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: shortcutsButton; below: accessibilityButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: accessibilityButton
|
|
icon.name: "preferences-desktop-accessibility"
|
|
text: i18n("Accessibility")
|
|
onClicked: root.openSettingsModule("kcm_access")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: accessibilityButton; below: notificationsButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: notificationsButton
|
|
icon.name: "preferences-desktop-notification-bell"
|
|
text: i18n("Notifications")
|
|
onClicked: root.openSettingsModule("kcm_notifications")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: notificationsButton; below: screenLockingButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: screenLockingButton
|
|
icon.name: "preferences-desktop-user-password"
|
|
text: i18n("Screen Locking")
|
|
onClicked: root.openSettingsModule("kcm_screenlocker")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: screenLockingButton; below: virtualKeyboardButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: virtualKeyboardButton
|
|
icon.name: "input-keyboard-virtual"
|
|
text: i18n("Virtual Keyboard")
|
|
onClicked: root.openSettingsModule("kcm_virtualkeyboard")
|
|
}
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18n("Desktop Workspace")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
FormCard.FormButtonDelegate {
|
|
id: virtualDesktopsButton
|
|
icon.name: "preferences-desktop-virtual"
|
|
text: i18n("Virtual Desktops")
|
|
onClicked: root.openSettingsModule("kcm_kwin_virtualdesktops")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: virtualDesktopsButton; below: windowBehaviorButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: windowBehaviorButton
|
|
icon.name: "preferences-system-windows-actions"
|
|
text: i18n("Window Behavior")
|
|
onClicked: root.openSettingsModule("kcm_kwinoptions")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: windowBehaviorButton; below: windowRulesButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: windowRulesButton
|
|
icon.name: "preferences-system-windows-actions"
|
|
text: i18n("Window Rules")
|
|
onClicked: root.openSettingsModule("kcm_kwinrules")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: windowRulesButton; below: taskSwitcherButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: taskSwitcherButton
|
|
icon.name: "preferences-system-tabbox"
|
|
text: i18n("Task Switcher")
|
|
onClicked: root.openSettingsModule("kcm_kwintabbox")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: taskSwitcherButton; below: desktopEffectsButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: desktopEffectsButton
|
|
icon.name: "preferences-desktop-effects"
|
|
text: i18n("Desktop Effects")
|
|
onClicked: root.openSettingsModule("kcm_kwin_effects")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: desktopEffectsButton; below: windowDecorationsButton }
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: windowDecorationsButton
|
|
icon.name: "preferences-desktop-theme-windowdecorations"
|
|
text: i18n("Window Decorations")
|
|
onClicked: root.openSettingsModule("kcm_kwindecoration")
|
|
}
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18n("Status Bar")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
FormCard.FormSwitchDelegate {
|
|
id: dateInStatusBar
|
|
text: i18n("Date in status bar")
|
|
description: i18n("If on, date will be shown next to the clock in the status bar.")
|
|
checked: ShellSettings.Settings.dateInStatusBar
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.dateInStatusBar) {
|
|
ShellSettings.Settings.dateInStatusBar = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: quickSettingsButton; below: topLeftActionDrawerModeDelegate }
|
|
|
|
FormCard.FormSwitchDelegate {
|
|
id: showBatteryPercentage
|
|
text: i18n("Battery Percentage")
|
|
description: i18n("Show battery percentage in the status bar.")
|
|
checked: ShellSettings.Settings.showBatteryPercentage
|
|
onCheckedChanged: {
|
|
if (checked != ShellSettings.Settings.showBatteryPercentage) {
|
|
ShellSettings.Settings.showBatteryPercentage = checked;
|
|
}
|
|
}
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: quickSettingsButton; below: topLeftActionDrawerModeDelegate }
|
|
|
|
FormCard.FormComboBoxDelegate {
|
|
id: statusBarScaleFactorDelegate
|
|
|
|
text: i18n("Status Bar Size")
|
|
description: i18n("Size of the top panel (needs restart).")
|
|
|
|
model: [
|
|
{"name": i18nc("Status bar height", "Tiny"), "value": 1.0},
|
|
{"name": i18nc("Status bar height", "Small"), "value": 1.15},
|
|
{"name": i18nc("Status bar height", "Normal"), "value": 1.25},
|
|
{"name": i18nc("Status bar height", "Large"), "value": 1.5},
|
|
{"name": i18nc("Status bar height", "Very Large"), "value": 2.0}
|
|
]
|
|
|
|
textRole: "name"
|
|
valueRole: "value"
|
|
|
|
Component.onCompleted: {
|
|
currentIndex = indexOfValue(ShellSettings.Settings.statusBarScaleFactor);
|
|
}
|
|
onCurrentValueChanged: ShellSettings.Settings.statusBarScaleFactor = currentValue
|
|
}
|
|
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18n("Action Drawer")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
id: quickSettings
|
|
|
|
property string pinnedString: i18nc("Pinned action drawer mode", "Pinned Mode")
|
|
property string expandedString: i18nc("Expanded action drawer mode", "Expanded Mode")
|
|
|
|
FormCard.FormButtonDelegate {
|
|
id: quickSettingsButton
|
|
text: i18n("Quick Settings")
|
|
onClicked: kcm.push("QuickSettingsForm.qml")
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: quickSettingsButton; below: topLeftActionDrawerModeDelegate }
|
|
|
|
FormCard.FormComboBoxDelegate {
|
|
id: topLeftActionDrawerModeDelegate
|
|
text: i18n("Top Left Drawer Mode")
|
|
description: i18n("Mode when opening from the top left.")
|
|
|
|
model: [
|
|
{"name": quickSettings.pinnedString, "value": ShellSettings.Settings.Pinned},
|
|
{"name": quickSettings.expandedString, "value": ShellSettings.Settings.Expanded}
|
|
]
|
|
|
|
textRole: "name"
|
|
valueRole: "value"
|
|
|
|
Component.onCompleted: {
|
|
currentIndex = indexOfValue(ShellSettings.Settings.actionDrawerTopLeftMode);
|
|
}
|
|
onCurrentValueChanged: ShellSettings.Settings.actionDrawerTopLeftMode = currentValue
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: topLeftActionDrawerModeDelegate; below: topRightActionDrawerModeDelegate }
|
|
|
|
FormCard.FormComboBoxDelegate {
|
|
id: topRightActionDrawerModeDelegate
|
|
text: i18n("Top Right Drawer Mode")
|
|
description: i18n("Mode when opening from the top right.")
|
|
|
|
model: [
|
|
{"name": quickSettings.pinnedString, "value": ShellSettings.Settings.Pinned},
|
|
{"name": quickSettings.expandedString, "value": ShellSettings.Settings.Expanded}
|
|
]
|
|
|
|
textRole: "name"
|
|
valueRole: "value"
|
|
|
|
Component.onCompleted: {
|
|
currentIndex = indexOfValue(ShellSettings.Settings.actionDrawerTopRightMode);
|
|
}
|
|
onCurrentValueChanged: ShellSettings.Settings.actionDrawerTopRightMode = currentValue
|
|
}
|
|
}
|
|
|
|
FormCard.FormHeader {
|
|
title: i18nc("@title:group, shortcuts available from lock screen", "Lock Screen Shortcuts")
|
|
}
|
|
|
|
FormCard.FormCard {
|
|
id: quickActionButtons
|
|
property string noneString: i18nc("@item:inlistbox", "None")
|
|
property string flashlightString: i18nc("@item:inlistbox", "Flashlight")
|
|
property string cameraString: i18nc("@item:inlistbox", "Camera")
|
|
|
|
FormCard.FormComboBoxDelegate {
|
|
id: lockscreenLeftButtonDelegate
|
|
text: i18nc("@label:listbox", "Left button")
|
|
|
|
model: [
|
|
{"name": quickActionButtons.noneString, "value": ShellSettings.Settings.None},
|
|
{"name": quickActionButtons.flashlightString, "value": ShellSettings.Settings.Flashlight}
|
|
// {"name": quickActionButtons.cameraString, "value": ShellSettings.Settings.Camera}
|
|
]
|
|
|
|
textRole: "name"
|
|
valueRole: "value"
|
|
|
|
Component.onCompleted: {
|
|
currentIndex = indexOfValue(ShellSettings.Settings.lockscreenLeftButtonAction);
|
|
}
|
|
onCurrentValueChanged: ShellSettings.Settings.lockscreenLeftButtonAction = currentValue
|
|
}
|
|
|
|
FormCard.FormDelegateSeparator { above: lockscreenRightButtonDelegate; below: lockscreenLeftButtonDelegate }
|
|
|
|
FormCard.FormComboBoxDelegate {
|
|
id: lockscreenRightButtonDelegate
|
|
text: i18nc("@label:listbox", "Right button")
|
|
|
|
model: [
|
|
{"name": quickActionButtons.noneString, "value": ShellSettings.Settings.None},
|
|
{"name": quickActionButtons.flashlightString, "value": ShellSettings.Settings.Flashlight}
|
|
// {"name": quickActionButtons.cameraString, "value": ShellSettings.Settings.Camera}
|
|
]
|
|
|
|
textRole: "name"
|
|
valueRole: "value"
|
|
|
|
Component.onCompleted: {
|
|
currentIndex = indexOfValue(ShellSettings.Settings.lockscreenRightButtonAction);
|
|
}
|
|
onCurrentValueChanged: ShellSettings.Settings.lockscreenRightButtonAction = currentValue
|
|
}
|
|
}
|
|
}
|
|
}
|