From 53dd959f5e07977662c7f2fc70656b30123cec01 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sun, 26 Apr 2026 15:13:28 +1000 Subject: [PATCH] feat: always expire notifs if fullscreen Also faster expire timeout when fullscreen --- plugin/src/Caelestia/Config/notifsconfig.hpp | 1 + services/NotifData.qml | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/plugin/src/Caelestia/Config/notifsconfig.hpp b/plugin/src/Caelestia/Config/notifsconfig.hpp index eef360fe..cdac94bd 100644 --- a/plugin/src/Caelestia/Config/notifsconfig.hpp +++ b/plugin/src/Caelestia/Config/notifsconfig.hpp @@ -13,6 +13,7 @@ class NotifsConfig : public ConfigObject { CONFIG_GLOBAL_PROPERTY(bool, expire, true) CONFIG_GLOBAL_PROPERTY(QString, fullscreen, QStringLiteral("on")) CONFIG_GLOBAL_PROPERTY(int, defaultExpireTimeout, 5000) + CONFIG_GLOBAL_PROPERTY(int, fullscreenExpireTimeout, 2000) CONFIG_PROPERTY(qreal, clearThreshold, 0.3) CONFIG_PROPERTY(int, expandThreshold, 20) CONFIG_GLOBAL_PROPERTY(bool, actionOnClick, false) diff --git a/services/NotifData.qml b/services/NotifData.qml index 33794243..3c6ae23b 100644 --- a/services/NotifData.qml +++ b/services/NotifData.qml @@ -39,11 +39,22 @@ QtObject { property bool hasActionIcons property list actions + readonly property bool hasFullscreen: { + const monitor = Hypr.focusedMonitor; + const specialName = monitor?.lastIpcObject.specialWorkspace?.name; + if (specialName) { + const specialWs = Hypr.workspaces.values.find(ws => ws.name === specialName); + return specialWs?.toplevels.values.some(t => t.lastIpcObject.fullscreen > 1) ?? false; + } + return monitor?.activeWorkspace?.toplevels.values.some(t => t.lastIpcObject.fullscreen > 1) ?? false; + } + readonly property Timer timer: Timer { running: true - interval: notif.expireTimeout > 0 ? notif.expireTimeout : GlobalConfig.notifs.defaultExpireTimeout + interval: notif.expireTimeout > 0 ? notif.expireTimeout : notif.hasFullscreen ? GlobalConfig.notifs.fullscreenExpireTimeout : GlobalConfig.notifs.defaultExpireTimeout onTriggered: { - if (GlobalConfig.notifs.expire) + // Always expire if the active workspace has a fullscreen window + if (GlobalConfig.notifs.expire || notif.hasFullscreen) notif.popup = false; } }