notifs: better height

Get blocked by other panels from the right side (osd and session)
Limit max height to screen height
This commit is contained in:
2 * r + 2 * t 2025-05-26 22:32:25 +08:00
parent daf92f36e1
commit f305c3f3f6
4 changed files with 29 additions and 5 deletions

View file

@ -1,3 +1,4 @@
import "root:/services"
import "root:/config"
import "root:/modules/osd" as Osd
import "root:/modules/notifications" as Notifications
@ -22,6 +23,8 @@ Item {
anchors.fill: parent
anchors.margins: BorderConfig.thickness
Component.onCompleted: Visibilities.panels[screen] = this
Osd.Wrapper {
id: osd

View file

@ -14,7 +14,7 @@ Item {
anchors.right: parent.right
implicitWidth: NotifsConfig.sizes.width + root.padding * 2
implicitHeight: list.height + root.padding * 2
implicitHeight: list.implicitHeight + root.padding * 2
ListView {
id: list
@ -31,13 +31,32 @@ Item {
implicitHeight: {
let height = (count - 1) * spacing;
for (let i = 0; i < count; i++)
height += itemAtIndex(i).nonAnimHeight;
return Math.max(61, height);
height += itemAtIndex(i)?.nonAnimHeight ?? 0;
const screen = QsWindow.window?.screen;
const visibilities = Visibilities.screens[screen];
const panel = Visibilities.panels[screen];
if (visibilities && panel) {
if (visibilities.osd) {
const h = panel.osd.y - BorderConfig.rounding * 2;
if (height > h)
height = h;
}
if (visibilities.session) {
const h = panel.session.y - BorderConfig.rounding * 2;
if (height > h)
height = h;
}
}
return Math.max(61, Math.min(screen?.height - root.padding * 2 - BorderConfig.thickness * 2, height));
}
orientation: Qt.Vertical
spacing: Appearance.spacing.smaller
interactive: false
cacheBuffer: QsWindow.window?.screen.height ?? 0
clip: true
delegate: ClippingRectangle {
id: wrapper

View file

@ -33,6 +33,7 @@ StyledRect {
hoverEnabled: true
cursorShape: pressed ? Qt.ClosedHandCursor : undefined
acceptedButtons: Qt.LeftButton | Qt.MiddleButton
preventStealing: true
onEntered: root.modelData?.timer.stop()
onExited: root.modelData?.timer.start()
@ -461,7 +462,7 @@ StyledRect {
TextMetrics {
id: actionTextMetrics
text: modelData?.text
text: modelData?.text ?? ""
font.family: actionText.font.family
font.pointSize: actionText.font.pointSize
elide: Text.ElideRight

View file

@ -5,6 +5,7 @@ import Quickshell
Singleton {
property var screens: ({})
property var bars: ({})
property var panels: ({})
function getForActive(): PersistentProperties {
return Object.entries(screens).find(s => s[0].slice(s[0].indexOf('"') + 1, s[0].lastIndexOf('"')) === Hyprland.focusedMonitor.name)[1];