Files
sloposk/qml/SettingsPanel.qml
T
ericek111andClaude Opus 5.5 499e5ee76e Report unavailable protocols and services; send combos as real keys
Diagnostics collects what this session doesn't allow, logs it, and lists
it in the settings panel (with a dot on the gear): KWin not launching
sloposk as its keyboard (detected by WAYLAND_SOCKET, since KWin offers the
input-method global to every client), fake input missing or too old,
org.kde.keyboard unreachable, and the D-Bus control name taken.

Modifier combos go through fake input even in text fields: KWin drops
the input method's modifier mask for most clients, so Ctrl+A typed "a".

The desktop file is generated with an absolute Exec, which KWin needs to
match it: one for the installed binary, one for the build's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:36:56 +02:00

123 lines
4.3 KiB
QML

import QtQuick
import Sloposk
// Replaces the keys while open, over the window's own background so
// opacity changes show live. Binds straight to Settings, which persists.
Flickable {
id: panel
required property Settings settings
required property LayoutModel layoutModel
required property Diagnostics diagnostics
clip: true
contentHeight: content.height + 2 * content.y
boundsBehavior: Flickable.StopAtBounds
Column {
id: content
x: 16
y: 16
width: panel.width - 2 * x
spacing: 16
ProblemList {
width: parent.width
problems: panel.diagnostics.problems
}
Row {
id: columns
readonly property real columnWidth: (width - spacing) / 2
width: parent.width
spacing: 32
Column {
width: columns.columnWidth
spacing: 4
SectionHeader { text: qsTr("Typing") }
ToggleRow {
width: parent.width
text: qsTr("Auto-Capitalization")
detail: qsTr("Shift at the start of a sentence")
checked: panel.settings.autoCapitalize
onToggled: checked => panel.settings.autoCapitalize = checked
}
ToggleRow {
width: parent.width
text: qsTr("Hold Keys")
detail: qsTr("Keys stay down while touched, like a hardware keyboard; no accents or flicks")
checked: panel.settings.holdKeys
onToggled: checked => panel.settings.holdKeys = checked
}
ToggleRow {
width: parent.width
text: qsTr("Always Show")
detail: qsTr("Type into any window, not just text fields")
checked: panel.settings.alwaysVisible
onToggled: checked => panel.settings.alwaysVisible = checked
}
ToggleRow {
width: parent.width
text: qsTr("“.” Shortcut")
detail: qsTr("Double-tap space for a period and a space")
checked: panel.settings.doubleSpacePeriod
onToggled: checked => panel.settings.doubleSpacePeriod = checked
}
SectionHeader { text: qsTr("Appearance"); topPadding: 12 }
SliderRow {
width: parent.width
text: qsTr("Background")
from: panel.settings.minBackgroundOpacity
value: panel.settings.backgroundOpacity
onMoved: value => panel.settings.backgroundOpacity = value
}
ToggleRow {
width: parent.width
text: qsTr("Blur Behind")
detail: qsTr("Frosted glass under a see-through background, if the desktop supports it")
checked: panel.settings.blurBackground
onToggled: checked => panel.settings.blurBackground = checked
}
}
Column {
width: columns.columnWidth
spacing: 4
SectionHeader { text: qsTr("Keys") }
ToggleRow {
width: parent.width
text: qsTr("Full Keyboard")
detail: qsTr("Number row, tab, ctrl, alt — like iPad Pro")
checked: panel.settings.fullKeyboard
onToggled: checked => panel.settings.fullKeyboard = checked
}
Repeater {
// "main" is the typing keys; the rest come from the template.
model: [{ id: "main", name: qsTr("Typing keys") }].concat(panel.layoutModel.sections)
ToggleRow {
required property var modelData
width: parent.width
text: modelData.name
checked: panel.settings.visibleSections.includes(modelData.id)
onToggled: checked => panel.settings.setSectionVisible(modelData.id, checked)
}
}
}
}
}
}