diff --git a/modules/drawers/ContentWindow.qml b/modules/drawers/ContentWindow.qml index b5d9c4f1..91780a78 100644 --- a/modules/drawers/ContentWindow.qml +++ b/modules/drawers/ContentWindow.qml @@ -61,11 +61,7 @@ StyledWindow { WlrLayershell.layer: WlrLayer.Overlay WlrLayershell.keyboardFocus: visibilities.launcher || visibilities.session || panels.dashboard.needsKeyboard ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None - mask: Regions { - bar: bar - panels: panels - win: root - } + mask: hasFullscreen ? emptyRegion : regions anchors.top: true anchors.bottom: true @@ -84,6 +80,18 @@ StyledWindow { Anim {} } + Region { + id: emptyRegion + } + + Regions { + id: regions + + bar: bar + panels: panels + win: root + } + HyprlandFocusGrab { id: focusGrab 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; } }