From 573cc9def02e00c7e202d64a75a330614942b76c Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Wed, 6 May 2026 20:20:59 +1000 Subject: [PATCH] feat: notif popups margin ignore border --- modules/notifications/Content.qml | 17 ++++++++++++----- modules/notifications/Notification.qml | 6 +++--- modules/notifications/Wrapper.qml | 1 + plugin/src/Caelestia/Config/tokens.hpp | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/modules/notifications/Content.qml b/modules/notifications/Content.qml index 68ca5271..df8418c4 100644 --- a/modules/notifications/Content.qml +++ b/modules/notifications/Content.qml @@ -1,6 +1,9 @@ +pragma ComponentBehavior: Bound + import QtQuick import Quickshell import Quickshell.Widgets +import Caelestia import Caelestia.Config import qs.components import qs.components.containers @@ -16,12 +19,13 @@ Item { required property Item sessionPanel required property Item utilitiesPanel readonly property int padding: Tokens.padding.large + readonly property int clampedPadding: CUtils.clamp(padding - Config.border.thickness, 0, padding) anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right - implicitWidth: Tokens.sizes.notifs.width + padding * 2 + implicitWidth: Tokens.sizes.notifs.width implicitHeight: { const count = list.count; if (count === 0) @@ -32,13 +36,13 @@ Item { height += (list.itemAtIndex(i) as NotifWrapper)?.nonAnimHeight ?? 0; if (visibilities.osd) { - const h = osdPanel.y - padding; + const h = osdPanel.y - clampedPadding; if (height > h) height = h; } if (visibilities.session) { - const h = sessionPanel.y - padding; + const h = sessionPanel.y - clampedPadding; if (height > h) height = h; } @@ -49,12 +53,14 @@ Item { height = h; } - return Math.min(((QsWindow.window as QsWindow)?.screen?.height ?? 0) - Config.border.thickness * 2, height + padding * 2); + return Math.min(((QsWindow.window as QsWindow)?.screen?.height ?? 0) + padding - clampedPadding * 2 - Config.border.thickness, height + padding + clampedPadding); } ClippingWrapperRectangle { anchors.fill: parent anchors.margins: root.padding + anchors.topMargin: root.clampedPadding + anchors.rightMargin: root.clampedPadding color: "transparent" radius: Tokens.rounding.large @@ -178,7 +184,7 @@ Item { Anim { target: notif property: "x" - to: (notif.x >= 0 ? wrapper.Tokens.sizes.notifs.width : -wrapper.Tokens.sizes.notifs.width) * 2 + to: (notif.x >= 0 ? root.implicitWidth : -root.implicitWidth) * 2 duration: Tokens.anim.durations.normal easing: Tokens.anim.emphasized } @@ -202,6 +208,7 @@ Item { id: notif modelData: wrapper.modelData + implicitWidth: root.implicitWidth - root.padding - root.clampedPadding } } } diff --git a/modules/notifications/Notification.qml b/modules/notifications/Notification.qml index 326acf84..da2b14c4 100644 --- a/modules/notifications/Notification.qml +++ b/modules/notifications/Notification.qml @@ -24,10 +24,10 @@ StyledRect { color: root.modelData.urgency === NotificationUrgency.Critical ? Colours.palette.m3secondaryContainer : Colours.tPalette.m3surfaceContainer radius: Tokens.rounding.large - implicitWidth: Tokens.sizes.notifs.width + implicitHeight: inner.implicitHeight - x: Tokens.sizes.notifs.width + x: implicitWidth Component.onCompleted: { x = 0; modelData.lock(this); @@ -68,7 +68,7 @@ StyledRect { if (!containsMouse) root.modelData.timer.start(); - if (Math.abs(root.x) < Tokens.sizes.notifs.width * Config.notifs.clearThreshold) + if (Math.abs(root.x) < root.implicitWidth * Config.notifs.clearThreshold) root.x = 0; else root.modelData.popup = false; diff --git a/modules/notifications/Wrapper.qml b/modules/notifications/Wrapper.qml index 0a18e943..2c6ebea6 100644 --- a/modules/notifications/Wrapper.qml +++ b/modules/notifications/Wrapper.qml @@ -18,6 +18,7 @@ Item { Content { id: content + anchors.topMargin: -root.anchors.topMargin visibilities: root.visibilities } } diff --git a/plugin/src/Caelestia/Config/tokens.hpp b/plugin/src/Caelestia/Config/tokens.hpp index 168e82ca..9725556a 100644 --- a/plugin/src/Caelestia/Config/tokens.hpp +++ b/plugin/src/Caelestia/Config/tokens.hpp @@ -223,7 +223,7 @@ class NotifsTokens : public ConfigObject { Q_OBJECT QML_ANONYMOUS - CONFIG_PROPERTY(int, width, 400) + CONFIG_PROPERTY(int, width, 430) CONFIG_GLOBAL_PROPERTY(int, image, 42) CONFIG_PROPERTY(int, badge, 20)