Files
sloposk/qml/Main.qml
T
ericek111andClaude Opus 5.5 6164839886 Float as a KWin-managed window instead of a layer surface
The grab bar didn't move the window by mouse, and the corner grip never
resized it (the bar's handler took over its drag). The bar and grip now
start the window manager's move/resize, and Super+LMB/RMB work too.

A KWin rule in kwinrulesrc keeps the window above and unfocused, off the
taskbar, pager and switcher, and remembers its position. KWin now places
the window and keeps it on screen.

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

81 lines
2.8 KiB
QML

import QtQuick
import Sloposk
Window {
id: root
required property LayoutModel layoutModel
required property KeyboardController controller
required property Settings settings
property var placement: null // FloatingWindow, set from C++
property bool settingsOpen: false
// Height of the key area, for C++ keeping key sizes when rows change.
readonly property real keysHeight: keyboard.height
// Transparent room above the keyboard for long-press popups on the top row.
readonly property real popupMargin: 90
// Outside this, input passes through to whatever is below the window.
readonly property rect inputRegion: keyboard.alternates.open
? Qt.rect(0, 0, width, height)
: Qt.rect(panel.x, panel.y, panel.width, panel.height)
// Empty when nothing shows through, so the compositor skips the blur.
readonly property rect blurRegion: 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
minimumWidth: 480
minimumHeight: 180 + popupMargin
visible: false
color: "transparent"
onInputRegionChanged: placement?.setInputRegion(inputRegion)
onBlurRegionChanged: placement?.setBlurRegion(blurRegion, Theme.windowRadius)
onPlacementChanged: {
placement?.setInputRegion(inputRegion);
placement?.setBlurRegion(blurRegion, Theme.windowRadius);
}
Rectangle {
id: panel
anchors { fill: parent; topMargin: root.popupMargin }
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
}
DragHandle {
id: handle
anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
onDragStarted: root.startSystemMove()
}
SettingsButton {
anchors { left: parent.left; leftMargin: 8; bottom: parent.bottom }
checked: root.settingsOpen
onClicked: root.settingsOpen = !root.settingsOpen
}
ResizeHandle {
anchors { right: parent.right; bottom: parent.bottom }
onDragStarted: root.startSystemResize(Qt.RightEdge | Qt.BottomEdge)
}
}
}