/*SPDX-FileCopyrightText: 2018 Furkan Tokac <furkantokac34@gmail.com>SPDX-FileCopyrightText: 2019 Nate Graham <nate@kde.org>SPDX-License-Identifier: GPL-2.0-or-later*/import QtQuickimport QtQuick.Controls as QQC2import QtQuick.Layoutsimport org.kde.kirigami as Kirigamiimport org.kde.kcmutils as KCMimport org.kde.kwindowsystemimport org.kde.plasma.workspaceoptions.kcmKCM.SimpleKCM {implicitWidth: Kirigami.Units.gridUnit * 40headerPaddingEnabled: false // Let the InlineMessage touch the edgesheader: Kirigami.InlineMessage {id: primarySelectionRebootMessageposition: Kirigami.InlineMessage.Position.Headertype: Kirigami.MessageType.Informationtext: i18nc("@info:status inlinemessage", "The system must be restarted before changes to the middle-click paste setting can take effect.")visible: falseshowCloseButton: trueactions: [Kirigami.Action {icon.name: "system-reboot"text: i18nc("@action:button", "Restart")onTriggered: kcm.requestReboot();}]Connections {target: kcmfunction onPrimarySelectionOptionSaved() {primarySelectionRebootMessage.visible = true;}}}Kirigami.Form {Layout.fillWidth: trueKirigami.FormGroup {title: i18nc("@title:group", "Plasma")// Visual behavior settingsKirigami.FormEntry {title: i18nc("Part of the sentence 'Allow Plasma to show panel and widget tooltips'", "Allow Plasma to show:")contentItem: QQC2.CheckBox {id: tooltipDisablerCheckboxtext: i18nc("Part of the sentence 'Allow Plasma to show panel and widget tooltips'", "Panel and widget tooltips")checked: kcm.plasmaSettings.delay > 0onCheckedChanged: kcm.plasmaSettings.delay = (checked ? 0.7 : -1)KCM.SettingStateBinding {configObject: kcm.plasmaSettingssettingName: "delay"}}trailingItems: Kirigami.ContextualHelpButton {toolTipText: i18nc("@info:whatsthis contextualhelpbutton tooltip", "Allows all Plasma panel and desktop widgets to show descriptive tooltips when hovered with the pointer. This setting has no effect on the small tooltips displayed when hovering over individual buttons and other user interface elements.")}}Kirigami.FormEntry {contentItem: QQC2.CheckBox {id: osdDisablerCheckboxtext: i18nc("Part of the sentence 'Allow Plasma to show OSD popups for status changes'", "OSD popups for status changes")checked: kcm.plasmaSettings.osdEnabledonCheckedChanged: kcm.plasmaSettings.osdEnabled = checkedKCM.SettingStateBinding {configObject: kcm.plasmaSettingssettingName: "osdEnabled"}}trailingItems: Kirigami.ContextualHelpButton {Layout.alignment: Qt.AlignRighttoolTipText: i18nc("@info:whatsthis contextualhelpbutton tooltip", "Allows all Plasma widgets to show on-screen display (OSD) popups for changes like volume and brightness level, or audio device switching.")}}}Kirigami.FormGroup {title: i18nc("@title:group", "Scrolling")Kirigami.FormEntry {contentItem: QQC2.RadioButton {Kirigami.FormData.label: i18nc("@title:group prefix radiobutton group", "Clicking in scrollbar track:")text: i18nc("@radio part of a complete sentence: 'Clicking in scrollbar track scrolls to the clicked location'", "Scrolls to the clicked location")checked: !kcm.globalsSettings.scrollbarLeftClickNavigatesByPageonToggled: kcm.globalsSettings.scrollbarLeftClickNavigatesByPage = falseQQC2.ButtonGroup { id: scrollHandleBehaviorGroup }QQC2.ButtonGroup.group: scrollHandleBehaviorGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "scrollbarLeftClickNavigatesByPage"extraEnabledConditions: scrollbarLeftClickNavigatesByPage.enabled}}}Kirigami.FormEntry {subtitle: scrollbarLeftClickNavigatesByPage.Accessible.descriptioncontentItem: QQC2.RadioButton {id: scrollbarLeftClickNavigatesByPagetext: i18nc("@radio part of a complete sentence: 'Clicking in scrollbar track scrolls one page up or down'", "Scrolls one page up or down")Accessible.description: i18nc("@info:usagetip", "Middle-click to scroll to clicked location")checked: kcm.globalsSettings.scrollbarLeftClickNavigatesByPageonToggled: kcm.globalsSettings.scrollbarLeftClickNavigatesByPage = trueQQC2.ButtonGroup.group: scrollHandleBehaviorGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "scrollbarLeftClickNavigatesByPage"}}}Kirigami.FormSeparator {}Kirigami.FormEntry {contentItem: QQC2.CheckBox {id: smoothScrollingCheckboxtext: i18nc("@option:check", "Prefer smooth scrolling")checked: kcm.globalsSettings.smoothScrollonToggled: kcm.globalsSettings.smoothScroll = checkedKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "smoothScroll"}}trailingItems: Kirigami.ContextualHelpButton {Layout.alignment: Qt.AlignRighttoolTipText: i18nc("@info:tooltip", "This setting enables or disables animated transitions when scrolling with a mouse wheel or the keyboard. Some applications may not honor this setting because they either do not support smooth scrolling, or have their own setting for enabling and disabling it.")}}}Kirigami.FormGroup {title: i18nc("@title:group", "Clicking")Kirigami.FormEntry {title: i18nc("part of a sentence: 'Clicking files or folders [opens them/selects them]'", "Clicking files or folders:")subtitle: doubleClick.Accessible.descriptioncontentItem: QQC2.RadioButton {id: doubleClicktext: i18nc("part of a sentence: 'Clicking files or folders selects them'", "Selects them")Accessible.description: i18nc("@info:usagetip", "Open by double-clicking instead")checked: !kcm.globalsSettings.singleClickonToggled: kcm.globalsSettings.singleClick = falseQQC2.ButtonGroup.group: singleClickGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "singleClick"extraEnabledConditions: singleClick.enabled}}}Kirigami.FormEntry {subtitle: singleClick.Accessible.descriptioncontentItem: QQC2.RadioButton {id: singleClicktext: i18nc("part of a sentence: 'Clicking files or folders opens them'", "Opens them")Accessible.description: i18nc("@info:usagetip", "Select by clicking on item's selection marker")checked: kcm.globalsSettings.singleClickonToggled: kcm.globalsSettings.singleClick = trueQQC2.ButtonGroup { id: singleClickGroup }QQC2.ButtonGroup.group: singleClickGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "singleClick"}}}Kirigami.FormSeparator {visible: KWindowSystem.isPlatformWayland}Kirigami.FormEntry {title: i18nc("@label for checkbox, part of a complete sentence: 'Middle-click pastes selected text'", "Middle-click:")visible: KWindowSystem.isPlatformWaylandcontentItem: QQC2.CheckBox {id: primarySelectionRadiotext: i18nc("@option:check part of a complete sentence: 'Middle click pastes selected text'", "Pastes selected text")checked: kcm.kwinSettings.primarySelectiononToggled: kcm.kwinSettings.primarySelection = checkedKCM.SettingStateBinding {configObject: kcm.kwinSettingssettingName: "primarySelection"}}}// There is no label for what middle-clicking does when using the// "click to zoom the handle" behavior because Qt doesn't invert the// middle-click functionality when using this; see// https://bugreports.qt.io/browse/QTBUG-80728Kirigami.FormSeparator {}Kirigami.FormEntry {title: i18nc("@label:spinbox", "Double-click interval:")contentItem: ColumnLayout {Kirigami.FormData.buddyFor: spinboxspacing: Kirigami.Units.smallSpacingRowLayout {spacing: Kirigami.Units.smallSpacingQQC2.SpinBox {id: spinboxfrom: 100to: 2000stepSize: 100validator: IntValidator {bottom: Math.min(spinbox.from, spinbox.to)top: Math.max(spinbox.from, spinbox.to)}textFromValue: (value, locale) => {return i18ncp("short for millisecond(s)", "%1 ms", "%1 ms", value)}valueFromText: (text, locale) => {return Number.fromLocaleString(locale, text.replace(i18nc("short for millisecond(s)", "ms"), ""))}onValueModified: kcm.globalsSettings.doubleClickInterval = valuevalue: kcm.globalsSettings.doubleClickIntervalKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "doubleClickInterval"}}Kirigami.ContextualHelpButton {Layout.alignment: Qt.AlignRighttoolTipText: i18nc("@info:whatsthis contextualhelpbutton tooltip", "Two clicks within this duration are considered a double-click. Some applications may not honor this setting.")}}RowLayout {Layout.fillWidth: truespacing: Kirigami.Units.smallSpacingQQC2.Label {Layout.fillWidth: trueLayout.preferredWidth: Kirigami.Units.gridUnit * 16text: i18nc("Test double-click speed", "Double-click the folder to test. If it does not change its appearance, increase double-click interval.")textFormat: Text.PlainTextwrapMode: Text.WordWrapfont: Kirigami.Theme.smallFont}QQC2.Frame {Layout.preferredWidth: Kirigami.Units.iconSizes.largeLayout.preferredHeight: Kirigami.Units.iconSizes.largeKirigami.Theme.colorSet: Kirigami.Theme.ViewKirigami.Icon {id: doubleClickTestIconproperty bool checked: falseanchors.fill: parentsource: checked ? "folder-open" : "folder"}MouseArea {anchors.fill: parenthoverEnabled: true // for onExited to properly work.onPressed: {if (testDoubleClickTimer.running) {doubleClickTestIcon.checked = !doubleClickTestIcon.checkedtestDoubleClickTimer.stop()} else {testDoubleClickTimer.start()}}onExited: testDoubleClickTimer.stop()}Timer {id: testDoubleClickTimerinterval: kcm.globalsSettings.doubleClickInterval}}}}}}Kirigami.FormGroup {title: i18nc("@title:group prefix radiobutton group", "Drag and Drop")Kirigami.FormEntry {title: i18nc("@title:group prefix radiobutton group", "When dragging files or folders:")subtitle: dndBehaviorAsk.Accessible.descriptioncontentItem: QQC2.RadioButton {id: dndBehaviorAsktext: i18nc("@option:radio When dragging...", "Always ask what to do")Accessible.description: xi18nc("@info", "Hold <shortcut>Shift</shortcut> to move, <shortcut>Ctrl</shortcut> to copy, and <shortcut>Shift+Ctrl</shortcut> to create a symlink. Otherwise show a dialog.")enabled: !kcm.globalsSettings.isImmutable("dndBehavior")checked: kcm.globalsSettings.dndBehavior === WorkspaceOptionsGlobalsSettings.AlwaysAskonToggled: kcm.globalsSettings.dndBehavior = WorkspaceOptionsGlobalsSettings.AlwaysAskQQC2.ButtonGroup { id: dndBehaviorGroup }QQC2.ButtonGroup.group: dndBehaviorGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "dndBehavior"}}}Kirigami.FormEntry {subtitle: dndBehaviorMove.Accessible.descriptioncontentItem: QQC2.RadioButton {id: dndBehaviorMovetext: i18nc("@option:radio When draggingβ¦", "Move if on the same device")Accessible.description: xi18nc("@info", "Hold <shortcut>Shift</shortcut> when dropping to show other options.")enabled: !kcm.globalsSettings.isImmutable("dndBehavior")checked: kcm.globalsSettings.dndBehavior === WorkspaceOptionsGlobalsSettings.MoveIfSameDeviceonToggled: kcm.globalsSettings.dndBehavior = WorkspaceOptionsGlobalsSettings.MoveIfSameDeviceQQC2.ButtonGroup.group: dndBehaviorGroupKCM.SettingStateBinding {configObject: kcm.globalsSettingssettingName: "dndBehavior"}}}}Kirigami.FormGroup {title: i18nc("@title:group", "Touch")Kirigami.FormEntry {title: i18nc("@title:group prefix radiobutton group", "Enable Tablet Mode:")contentItem: QQC2.RadioButton {id: touchEnabledRadiotext: KWindowSystem.isPlatformWayland ? i18nc("As in: 'Tablet Mode is automatically enabled as needed'", "Automatically enable as needed") : i18nc("As in: 'Tablet Mode is never enabled'", "Never enabled")Accessible.description: touchModeAlwaysOffRadioButton.Accessible.descriptionchecked: kcm.kwinSettings.tabletMode === "auto"onToggled: {if (checked) {kcm.kwinSettings.tabletMode = "auto"}}QQC2.ButtonGroup { id: tabletModeBehaviorGroup }QQC2.ButtonGroup.group: tabletModeBehaviorGroupKCM.SettingStateBinding {configObject: kcm.kwinSettingssettingName: "tabletMode"}}trailingItems: Kirigami.ContextualHelpButton {Layout.alignment: Qt.AlignRightvisible: KWindowSystem.isPlatformWaylandtoolTipText: i18nc("@info:whatsthis contextualhelpbutton tooltip", "Tablet Mode will be automatically enabled whenever the system detects a touchscreen but no mouse or touchpad. For example: when a transformable laptop's keyboard is flipped around or detached.")}}Kirigami.FormEntry {contentItem: QQC2.RadioButton {text: i18nc("As in: 'Tablet Mode is always enabled'", "Always enabled")Accessible.description: touchModeAlwaysOffRadioButton.Accessible.descriptionchecked: kcm.kwinSettings.tabletMode === "on"onToggled: {if (checked) {kcm.kwinSettings.tabletMode = "on"}}QQC2.ButtonGroup.group: tabletModeBehaviorGroupKCM.SettingStateBinding {configObject: kcm.kwinSettingssettingName: "tabletMode"}}}Kirigami.FormEntry {subtitle: touchModeAlwaysOffRadioButton.Accessible.descriptionvisible: KWindowSystem.isPlatformWaylandcontentItem: QQC2.RadioButton {id: touchModeAlwaysOffRadioButtontext: i18nc("As in: 'Tablet Mode is never enabled'", "Disabled")Accessible.description: i18nc("@info:usagetip", "In Tablet Mode, the virtual keyboard will appear when needed.")checked: kcm.kwinSettings.tabletMode === "off"onToggled: {if (checked) {kcm.kwinSettings.tabletMode = "off"}}QQC2.ButtonGroup.group: tabletModeBehaviorGroupKCM.SettingStateBinding {configObject: kcm.kwinSettingssettingName: "tabletMode"}}}}}}