Files
ericek111andClaude Opus 5.5 23e957660f Reword code comments in plain technical language
Comments only, no code changes. Replaces vague or personified phrasing
with explicit statements of what the code does and why, uses bullet
lists for multi-case behavior, and fixes the settings path in
WindowSettings.h (~/.config/sloposk/sloposk.conf).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 19:58:59 +01:00

120 lines
4.6 KiB
QML

import QtQuick
import Sloposk
Window {
id: root
required property LayoutModel layoutModel
required property KeyboardController controller
required property Settings settings
required property Diagnostics diagnostics
property var placement: null // FloatingWindow, set from C++
property var collapse: null // CollapseController, set from C++
readonly property bool collapsed: collapse?.collapsed ?? false
property bool settingsOpen: false
// Read by C++ to keep key size constant when rows are added or removed.
readonly property real keysHeight: keyboard.height
// Transparent space above the keyboard for the top row's long-press popups.
readonly property real popupMargin: 90
// Input outside this rect goes to the window underneath.
readonly property rect inputRegion: collapsed
? Qt.rect(floatingButton.x, floatingButton.y, floatingButton.width, floatingButton.height)
: keyboard.alternates.open
? Qt.rect(0, 0, width, height)
: Qt.rect(panel.x, panel.y, panel.width, panel.height)
// Empty (no blur) when collapsed, blur is off, or the background is opaque.
readonly property rect blurRegion: !collapsed && settings.blurBackground && settings.backgroundOpacity < 1
? Qt.rect(panel.x, panel.y, panel.width, panel.height)
: Qt.rect(0, 0, 0, 0)
width: 1000
height: 340 + popupMargin
// No minimum while collapsed, so the window can shrink to the button.
minimumWidth: collapsed ? 0 : 480
minimumHeight: collapsed ? 0 : 180 + popupMargin
visible: false
color: "transparent"
// Ignore close requests (Alt+F4, task manager): they would hide the window
// without VisibilityController knowing. Hiding goes through the dismiss key or tray toggle.
onClosing: close => close.accepted = false
onInputRegionChanged: placement?.setInputRegion(inputRegion)
onBlurRegionChanged: placement?.setBlurRegion(blurRegion, Theme.windowRadius)
// Called by CollapseController.
function dismissKeyRect() {
return keyboard.keyRect("dismiss");
}
onPlacementChanged: {
placement?.setInputRegion(inputRegion);
placement?.setBlurRegion(blurRegion, Theme.windowRadius);
}
Rectangle {
id: panel
anchors { fill: parent; topMargin: root.popupMargin }
visible: !root.collapsed
radius: Theme.windowRadius
color: Qt.rgba(Theme.background.r, Theme.background.g, Theme.background.b, root.settings.backgroundOpacity)
Keyboard {
id: keyboard
anchors { left: parent.left; right: parent.right; top: parent.top; bottom: handle.top }
anchors.margins: 2
visible: !root.settingsOpen
model: root.layoutModel
controller: root.controller
popupHeadroom: root.popupMargin + anchors.margins
}
SettingsPanel {
anchors.fill: keyboard
visible: root.settingsOpen
settings: root.settings
layoutModel: root.layoutModel
diagnostics: root.diagnostics
}
DragHandle {
id: handle
anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
pillWidth: Math.min(120, width - 2 * (quickToggles.x + quickToggles.width + 12))
onDragStarted: root.placement.startMove()
}
SettingsButton {
id: settingsButton
anchors { left: parent.left; leftMargin: 8; bottom: parent.bottom }
checked: root.settingsOpen
alert: root.diagnostics.problems.length > 0
onClicked: root.settingsOpen = !root.settingsOpen
}
QuickToggles {
id: quickToggles
anchors { left: settingsButton.right; bottom: parent.bottom }
settings: root.settings
layoutModel: root.layoutModel
}
ResizeHandle {
anchors { right: parent.right; bottom: parent.bottom }
onDragStarted: root.placement.startResize(Qt.RightEdge | Qt.BottomEdge)
}
}
FloatingButton {
id: floatingButton
readonly property rect keyRect: root.collapse?.keyRect ?? Qt.rect(0, 0, 0, 0)
// keyRect is in full-window coordinates; the clamp keeps the button inside the window once it has shrunk.
x: Math.max(0, Math.min(keyRect.x, root.width - width))
y: Math.max(0, Math.min(keyRect.y, root.height - height))
width: keyRect.width
height: keyRect.height
visible: root.collapsed
onTapped: root.collapse.expand()
onDragStarted: root.placement.startMove()
}
}