/*SPDX-FileCopyrightText: 2024 Evgeny Chesnokov <echesnokov@astralinux.ru>SPDX-License-Identifier: GPL-2.0-or-later*/import QtQuickimport QtQuick.Layoutsimport QtQuick.Controls as QQC2import org.kde.kquickcontrols as KQuickControlsimport org.kde.kitemmodels as KItemModelsimport org.kde.kirigami as Kirigamiimport org.kde.kcmutils as KCMKCM.AbstractKCM {title: i18nc("@title", "Configure Switching")contentItem: Kirigami.FormLayout {Kirigami.Separator {Kirigami.FormData.isSection: trueKirigami.FormData.label: i18nc("@title:group", "Behavior")}QQC2.ComboBox {id: switchingPolicyComboboxKirigami.FormData.label: i18nc("@label:listbox", "Switching layout affects:")textRole: "text"valueRole: "value"onActivated: kcm.keyboardSettings.switchMode = currentValuemodel: [{"text": i18nc("@item:inlistbox", "All windows"),"value": "Global",},{"text": i18nc("@item:inlistbox", "All windows on current desktop"),"value": "Desktop",},{"text": i18nc("@item:inlistbox", "All windows of current application"),"value": "WinClass",},{"text": i18nc("@item:inlistbox", "Current window only"),"value": "Window",},]Component.onCompleted: selectCurrent()Connections {target: kcm?.keyboardSettings ?? undefinedfunction onSwitchModeChanged(): void {switchingPolicyCombobox.selectCurrent()}}function selectCurrent(): void {currentIndex = indexOfValue(kcm.keyboardSettings.switchMode);}KCM.SettingStateBinding {configObject: kcm.keyboardSettingssettingName: "switchMode"}}QQC2.CheckBox {text: i18nc("@label:checkbox", "Show OSD popup on layout change")checked: kcm.workspaceOptions.osdKbdLayoutChangedEnabledonToggled: kcm.workspaceOptions.osdKbdLayoutChangedEnabled = checkedKCM.SettingStateBinding {configObject: kcm.workspaceOptionssettingName: "osdKbdLayoutChangedEnabled"}}Kirigami.Separator {Kirigami.FormData.isSection: trueKirigami.FormData.label: i18nc("@title:group", "Shortcuts")}KQuickControls.KeySequenceItem {id: alternativeShortcutKirigami.FormData.label: i18nc("@option:textbox", "Change layout:")patterns: KQuickControls.ShortcutPattern.Modifier | KQuickControls.ShortcutPattern.ModifierAndKeykeySequence: kcm.shortcutHelper.alternativeShortcutonKeySequenceModified: kcm.shortcutHelper.alternativeShortcut = keySequenceBinding {target: alternativeShortcutproperty: "keySequence"value: kcm.shortcutHelper.alternativeShortcut}KCM.SettingHighlighter {target: alternativeShortcuthighlight: alternativeShortcut.keySequence !== kcm.shortcutHelper.defaultAlternativeShortcut()}}KQuickControls.KeySequenceItem {id: lastUsedShortcutKirigami.FormData.label: i18nc("@option:textbox", "Switch to last used layout:")patterns: KQuickControls.ShortcutPattern.Modifier | KQuickControls.ShortcutPattern.ModifierAndKeykeySequence: kcm.shortcutHelper.lastUsedShortcutonCaptureFinished: kcm.shortcutHelper.lastUsedShortcut = keySequenceBinding {target: lastUsedShortcutproperty: "keySequence"value: kcm.shortcutHelper.lastUsedShortcut}KCM.SettingHighlighter {target: lastUsedShortcuthighlight: lastUsedShortcut.keySequence !== kcm.shortcutHelper.defaultLastUsedShortcut()}}ColumnLayout {spacing: Kirigami.Units.smallSpacingKirigami.FormData.label: i18nc("@title:group", "Legacy Shortcuts")Kirigami.FormData.isSection: trueKirigami.ContextualHelpButton {Layout.alignment: Qt.AlignRightLayout.topMargin: -height// Make sure the button doesn't take size of its parentLayout.maximumHeight: -1toolTipText: xi18nc("@info", "Legacy X11 shortcuts allow finer control of modifier-only shortcuts and have slightly better support on X11 in edge cases. They can also be used on Wayland.<nl/><nl/>Setting these shortcuts will take you to the Key bindings page.")}Kirigami.Separator {Layout.fillWidth: true}}// Since "Main shortcut" has specific behavior (we push "KeyBindings" page) we can`t use standard KeySequenceItem// But this component looks exactly like KeySequenceItemRowLayout {spacing: Kirigami.Units.smallSpacingKirigami.FormData.label: i18nc("@option:textbox", "Change layout:")// TODO: SettingStateBinding and default valueQQC2.Button {id: mainShortcutButtonicon.name: "configure-symbolic"text: kcm.xkbOptionsModel.getShortcutName(__internal.mainShortcutGroupName)onClicked: {if (!kcm.keyboardSettings.resetOldXkbOptions) {kcm.keyboardSettings.resetOldXkbOptions = true;}kcm.push("KeyBindings.qml");kcm.xkbOptionsModel.navigateToGroup(__internal.mainShortcutGroupName);}}QQC2.Button {icon.name: Application.layoutDirection === Qt.LeftToRight ? "edit-clear-locationbar-rtl-symbolic" :"edit-clear-locationbar-ltr-symbolic"onClicked: kcm.xkbOptionsModel.clearXkbGroup(__internal.mainShortcutGroupName);}}// Since "3rd level shortcuts" has specific behavior (we push "KeyBindings" page) we can`t use standard KeySequenceItem// But this component looks exactly like KeySequenceItemRowLayout {spacing: Kirigami.Units.smallSpacingKirigami.FormData.label: i18nc("@option:textbox", "Alternative symbols:")// TODO: SettingStateBinding and default valueQQC2.Button {id: lvl3lShortcutButtonicon.name: "configure-symbolic"text: kcm.xkbOptionsModel.getShortcutName(__internal.lvl3ShortcutGroupName)onClicked: {if (!kcm.keyboardSettings.resetOldXkbOptions) {kcm.keyboardSettings.resetOldXkbOptions = true;}kcm.push("KeyBindings.qml");kcm.xkbOptionsModel.navigateToGroup(__internal.lvl3ShortcutGroupName);}}QQC2.Button {icon.name: Application.layoutDirection === Qt.LeftToRight ? "edit-clear-locationbar-rtl-symbolic" :"edit-clear-locationbar-ltr-symbolic"onClicked: kcm.xkbOptionsModel.clearXkbGroup(__internal.lvl3ShortcutGroupName)}Kirigami.ContextualHelpButton {toolTipText: i18nc("@info", "Modifier keys can be used to type additional characters, symbols, and diacritical marks.")}}}// Update main & 3dLvl shortcuts textConnections {target: kcm.xkbOptionsModelfunction onDataChanged(): void {mainShortcutButton.text = kcm.xkbOptionsModel.getShortcutName(__internal.mainShortcutGroupName);lvl3lShortcutButton.text = kcm.xkbOptionsModel.getShortcutName(__internal.lvl3ShortcutGroupName);}function onModelReset(): void {mainShortcutButton.text = kcm.xkbOptionsModel.getShortcutName(__internal.mainShortcutGroupName);lvl3lShortcutButton.text = kcm.xkbOptionsModel.getShortcutName(__internal.lvl3ShortcutGroupName);}}QtObject {id: __internalreadonly property string mainShortcutGroupName: "grp"readonly property string lvl3ShortcutGroupName: "lv3"}}