move notifications to top overlay

This commit is contained in:
lucy 2026-09-04 13:21:47 +02:00
commit 021c82f438
12 changed files with 106 additions and 172 deletions

View file

@ -1,101 +0,0 @@
import QtQuick
import Quickshell
import Quickshell.Wayland
import qs.modules.Services
import qs.modules.applets
import qs.settings
Variants {
model: Quickshell.screens
delegate: PanelWindow {
id: root
required property ShellScreen modelData
property bool shown: WidgetTracker.current !== "" && WidgetTracker.screen === modelData
screen: modelData
anchors {
top: true
left: true
bottom: true
right: true
}
exclusionMode: ExclusionMode.Ignore
color: 'transparent'
visible: true
mask: Region {
item: root.shown ? dismisser : null
}
WlrLayershell.keyboardFocus: shown ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
Item {
anchors.fill: parent
focus: true
Keys.onEscapePressed: event => {
WidgetTracker.close();
event.accepted = true;
}
VolPopup {
id: volPopup
z: 1
property bool shown: root.shown && WidgetTracker.current === "volume"
opacity: shown ? 1 : 0
visible: opacity > 0
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: Config.cfg.bar.floating ? Config.cfg.bar.height + 20 : Config.cfg.bar.height
anchors.rightMargin: 10
Behavior on opacity {
NumberAnimation {
duration: 140
easing.type: Easing.OutCubic
}
}
transform: Translate {
y: volPopup.shown ? 0 : -12
Behavior on y {
NumberAnimation {
duration: 140
easing.type: Easing.OutCubic
}
}
}
}
WallPicker {
id: wallpapers
z: 1
property bool shown: root.shown && WidgetTracker.current === "wallpapers"
opacity: shown ? 1 : 0
visible: opacity > 0
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 20
implicitWidth: 1000
implicitHeight: 200
Behavior on opacity {
NumberAnimation {
duration: 200
easing.type: Easing.OutCubic
}
}
transform: Translate {
y: wallpapers.shown ? 0 : 12
Behavior on y {
NumberAnimation {
duration: 200
easing.type: Easing.OutCubic
}
}
}
}
MouseArea {
id: dismisser
z: 0
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: WidgetTracker.close()
}
}
}
}

View file

@ -4,6 +4,7 @@ import Quickshell.Wayland
import qs.modules.Services
import qs.modules.applets
import qs.settings
import qs.modules.notifications
Variants {
model: Quickshell.screens
@ -23,7 +24,12 @@ Variants {
color: 'transparent'
visible: true
mask: Region {
item: root.shown ? dismisser : null
Region {
item: notiList.visible ? notiList : null
}
Region {
item: root.shown ? dismisser : null
}
}
WlrLayershell.keyboardFocus: shown ? WlrKeyboardFocus.Exclusive : WlrKeyboardFocus.None
Item {
@ -41,7 +47,7 @@ Variants {
visible: opacity > 0
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: Config.cfg.bar.floating ? Config.cfg.bar.height + 20 : Config.cfg.bar.height
anchors.topMargin: Config.cfg.bar.floating ? Config.cfg.bar.height + 20 : Config.cfg.bar.height + 10
anchors.rightMargin: 10
Behavior on opacity {
NumberAnimation {
@ -59,6 +65,27 @@ Variants {
}
}
}
ListView {
id: notiList
z: 2
anchors.top: parent.top
anchors.right: parent.right
anchors.topMargin: Config.cfg.bar.height + 10 + (Config.cfg.bar.floating ? 10 : 0)
anchors.rightMargin: 10
width: root.modelData.width / 6
height: contentHeight
interactive: false
visible: count > 0 && Compositor.focusedScreen === root.modelData
model: NotiServer.notifications
spacing: 6
delegate: NotiCard {
required property var modelData
nScreen: root.modelData
notification: modelData
}
}
WallPicker {
id: wallpapers
z: 1