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; } }