summaryrefslogtreecommitdiff
path: root/modules/drawers/Interactions.qml
diff options
context:
space:
mode:
authorATMDA <atdma2600@gmail.com>2025-11-12 14:51:22 -0500
committerATMDA <atdma2600@gmail.com>2025-11-12 14:51:22 -0500
commitc1510b547645de5e8f70f6be99a0ba894b797241 (patch)
treece67826496f6530ef0ad09482f28ffc85c79eb51 /modules/drawers/Interactions.qml
parenttray: if background enabled and empty, background is hidden (diff)
downloadcaelestia-shell-c1510b547645de5e8f70f6be99a0ba894b797241.tar.gz
caelestia-shell-c1510b547645de5e8f70f6be99a0ba894b797241.tar.bz2
caelestia-shell-c1510b547645de5e8f70f6be99a0ba894b797241.zip
notifs/toasts: reworked notifications and toasts and how they display and work together. see pull request comment.
Diffstat (limited to 'modules/drawers/Interactions.qml')
-rw-r--r--modules/drawers/Interactions.qml46
1 files changed, 46 insertions, 0 deletions
diff --git a/modules/drawers/Interactions.qml b/modules/drawers/Interactions.qml
index 9579b15..10190a4 100644
--- a/modules/drawers/Interactions.qml
+++ b/modules/drawers/Interactions.qml
@@ -198,6 +198,52 @@ CustomMouseArea {
utilitiesShortcutActive = false;
}
+ // Show notifications panel on hover
+ // Try using inTopPanel first (works when panel is visible), fallback to corner detection only when panel is collapsed
+ const panelHeight = panels.notifications.height || panels.notifications.implicitHeight || 0;
+ const panelWidth = panels.notifications.width || panels.notifications.implicitWidth || Config.notifs.sizes.width;
+ const panelX = bar.implicitWidth + panels.notifications.x;
+ const isPanelCollapsed = panelHeight < 10; // Consider collapsed if height is very small
+
+ let showNotifications = inTopPanel(panels.notifications, x, y);
+
+ // Only use fallback corner detection when panel is collapsed
+ if (!showNotifications && isPanelCollapsed) {
+ // Use panel's actual width and position for fallback, with some padding
+ const cornerPadding = Config.border.rounding || 20;
+ showNotifications = x >= panelX - cornerPadding &&
+ x <= panelX + panelWidth + cornerPadding &&
+ y < Config.border.thickness + cornerPadding;
+ }
+
+ // Check if mouse is over the clear all button area
+ // Button is positioned to the left of the notification panel
+ if (!showNotifications && panels.notifications.height > 0 && panels.clearAllButton && panels.clearAllButton.visible) {
+ const buttonX = bar.implicitWidth + panels.clearAllButton.x;
+ const buttonY = Config.border.thickness + panels.clearAllButton.y;
+ const buttonWidth = panels.clearAllButton.width;
+ const buttonHeight = panels.clearAllButton.height;
+
+ const inButtonArea = x >= buttonX &&
+ x <= buttonX + buttonWidth &&
+ y >= buttonY &&
+ y <= buttonY + buttonHeight;
+
+ if (inButtonArea) {
+ showNotifications = true;
+ }
+ }
+
+ // Show or hide notification panel based on hover
+ if (panels.notifications.content) {
+ if (showNotifications) {
+ panels.notifications.content.show();
+ } else {
+ // Hide if not hovering over panel or button
+ panels.notifications.content.shouldShow = false;
+ }
+ }
+
// Show popouts on hover
if (x < bar.implicitWidth) {
bar.checkPopout(y);