Shrink to a floating button instead of hiding

With "Shrink to Button" on, the dismiss key shrinks the window to just
itself: a see-through button that can be dragged anywhere. Tapping it
grows the keyboard back around it, kept on screen. KWin moves and
resizes the window through a one-off script, as Wayland clients can't
place themselves.

Also moves the window back on screen whenever it appears (KWin remembers
where the button was), and releases the mouse after a window manager
move or resize, which used to eat the next press on the grab bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-31 01:05:37 +01:00
co-authored by Claude Opus 5.5
parent ac5f43ca5f
commit 032fbd8ba4
15 changed files with 401 additions and 14 deletions
+11
View File
@@ -4,7 +4,18 @@ import Sloposk
KeyboardSurface {
id: surface
// Window-relative rect of the first key of `type`; empty if there is none.
function keyRect(type) {
for (let i = 0; i < keys.count; ++i) {
const key = keys.itemAt(i);
if (key?.keyType === type)
return key.mapToItem(null, 0, 0, key.width, key.height);
}
return Qt.rect(0, 0, 0, 0);
}
Repeater {
id: keys
model: surface.model
delegate: Key {
shiftMode: surface.controller ? surface.controller.shiftMode : KeyboardController.Off