fixup focusing and key handling in volpopup by moving it to a wlrlayershell

This commit is contained in:
lucy 2026-08-28 16:55:28 +02:00
commit 6f2bc1a107
4 changed files with 47 additions and 25 deletions

View file

@ -2,39 +2,59 @@ pragma ComponentBehavior: Bound
import qs
import qs.settings
import Quickshell
import Quickshell.Wayland
import QtQuick
import qs.widgets
import qs.modules.Services
import QtQuick.Layouts
import QtQuick.Controls
PopupWindow {
implicitWidth: audioLayout.implicitWidth + 2 * audioLayout.anchors.margins
implicitHeight: audioLayout.implicitHeight + 24
anchor.edges: Edges.Top | Edges.Right
anchor.gravity: Edges.Bottom | Edges.Left
anchor.margins.top: 40
WlrLayershell {
id: win
required property ShellScreen barScreen
screen: barScreen
visible: false
color: 'transparent'
grabFocus: true
layer: WlrLayer.Overlay
exclusionMode: ExclusionMode.Ignore
keyboardFocus: visible ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
anchors {
top: true
right: true
}
margins {
top: Config.cfg.bar.height + (Config.cfg.bar.floating ? 20 : 10)
right: Config.cfg.bar.floating ? 10 : 0
}
implicitWidth: audioLayout.implicitWidth + 20
implicitHeight: audioLayout.implicitHeight + 20
onVisibleChanged: {
if (visible)
root.forceActiveFocus();
}
Rectangle {
id: root
Keys.onEscapePressed: {
parent.visible = false;
}
onVisibleChanged: {
if (parent.visible)
forceActiveFocus();
}
anchors.fill: parent
anchors.centerIn: parent
focus: true
color: Colors.barBg
radius: Config.cfg.appearance.rounding
Keys.onEscapePressed: event => {
win.visible = false;
event.accepted = true;
}
ColumnLayout {
id: audioLayout
anchors.centerIn: parent
anchors.margins: 10
spacing: 8
Repeater {
id: audioRep
model: Audio.sinks
@ -50,8 +70,6 @@ PopupWindow {
RowLayout {
id: audioRow
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
anchors.fill: parent
StyledText {
@ -89,6 +107,8 @@ PopupWindow {
}
Slider {
Layout.rightMargin: 10
focusPolicy: Qt.NoFocus
value: audioDelContainer.modelData.audio.volume
from: 0
to: 1