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

View file

@ -10,12 +10,12 @@ import qs.settings
import qs.widgets
BarComponent {
id: main
implicitWidth: implicitHeight
required property int screenHeight
id: main
StyledIcon {
iconName: "preferences-desktop-wallpaper-symbolic"
anchors.centerIn: parent
iconName: "preferences-desktop-wallpaper-symbolic"
anchors.centerIn: parent
}
MouseArea {
id: clickHandler
@ -30,7 +30,7 @@ BarComponent {
id: wallPicker
visible: false
exclusionMode: ExclusionMode.Ignore
keyboardFocus: WlrKeyboardFocus.OnDemand
keyboardFocus: visible ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
implicitHeight: main.screenHeight / 8
color: 'transparent'
anchors {
@ -92,7 +92,7 @@ BarComponent {
hoverEnabled: true
onClicked: {
Config.cfg.wallpaper.wallpaper = wallTile.modelData.filePath;
Config.save()
Config.save();
}
}
}

View file

@ -16,6 +16,7 @@ Variants {
left: true
right: true
}
color: 'transparent'
implicitHeight: Config.cfg.bar.height
margins.top: Config.cfg.bar.floating ? 10 : 0
@ -49,7 +50,7 @@ Variants {
screenHeight: root.screen.height
}
Pw {}
Pw {barScreen: root.modelData}
Netstatus {}
}
}

View file

@ -8,6 +8,7 @@ import qs.settings
import qs.modules.Services
BarComponent {
required property ShellScreen barScreen
id: root
active: clickHandler.containsMouse
implicitWidth: pwLayout.implicitWidth + 16
@ -32,7 +33,7 @@ BarComponent {
onClicked: volPopup.visible = !volPopup.visible
}
VolPopup {
barScreen: root.barScreen
id: volPopup
anchor.item: root
}
}