Skip to content

Notification popup stays in the middle of the screen after hover #1887

Description

@marcinjahn

Compositor

Niri

Distribution

Fedora

If Other, please specify

No response

Select your Installation Method

DankInstaller

Was this your original Installation method?

Yes

If no, specify

No response

dms doctor -vC

Click to expand

DMS Doctor Report

System

  • [ok] Operating System: Fedora Linux 43 (Workstation Edition)
    • ID: fedora, Version: 43, Arch: amd64
  • [ok] Architecture: amd64
  • [ok] Display Server: Wayland
    • WAYLAND_DISPLAY=wayland-1

Versions

  • [ok] DMS CLI: dms v1.4.3
    • /usr/bin/dms
  • [ok] Quickshell: quickshell 0.2.1, revision 26531fc46ef17e9365b03770edd3fb9206fcb460, distributed by: Fedora COPR (avengemedia/quickshell)
    • /usr/bin/qs
  • [ok] DMS Shell: 1.4.3
    • /usr/share/quickshell/dms

Installation

  • [ok] DMS Configuration: Found
    • /usr/share/quickshell/dms
  • [ok] shell.qml: Present
    • /usr/share/quickshell/dms/shell.qml
  • [info] Install Type: System package
    • /usr/share/quickshell/dms

Compositor

  • [ok] niri: 25.11
    • /usr/bin/niri
  • [info] Active: niri

Quickshell Features

  • [ok] Polkit: Available
    • Authentication prompts
  • [ok] IdleMonitor: Available
    • Idle detection
  • [ok] IdleInhibitor: Available
    • Prevent idle/sleep
  • [ok] ShortcutInhibitor: Available
    • Allow shortcut management (niri)

Optional Features

  • [ok] accountsservice: Available
    • User accounts
  • [ok] power-profiles-daemon: Available
    • Power profile management
  • [ok] logind: Available
    • Session management
  • [ok] cups-pk-helper: Available
    • Printer management
  • [info] I2C/DDC: No monitors detected
    • External monitor brightness control
  • [ok] qt6-imageformats: Installed (1 formats)
    • Formats: GIF (/usr/lib64/qt6/plugins/imageformats)
  • [ok] kimageformats: Installed (4 formats)
    • Formats: AVIF, HEIF, JXL, EXR (/usr/lib64/qt6/plugins/imageformats)
  • [ok] Terminal: alacritty
  • [ok] Network: NetworkManager
    • NetworkManager present. Using NM API.
  • [ok] matugen: Installed
    • Dynamic theming
  • [ok] dgop: Installed
    • System monitoring
  • [ok] cava: Installed
    • Audio visualizer
  • [info] khal: Not installed
    • Calendar events
  • [ok] danksearch: Installed
    • File search
  • [ok] fprintd: Installed
    • Fingerprint auth

Config Files

  • [ok] settings.json: Present
    • /home/mnj/.config/DankMaterialShell/settings.json
  • [ok] clsettings.json: Present
    • /home/mnj/.config/DankMaterialShell/clsettings.json
  • [ok] plugin_settings.json: Present
    • /home/mnj/.config/DankMaterialShell/plugin_settings.json
  • [ok] session.json: Present
    • /home/mnj/.local/state/DankMaterialShell/session.json
  • [ok] dms-colors.json: Present
    • /home/mnj/.cache/DankMaterialShell/dms-colors.json

Services

  • [ok] dms.service: enabled, active
  • [info] greetd: Not installed
    • Optional greeter service

Environment

  • [info] QT_QPA_PLATFORMTHEME: gtk3
  • [info] QS_ICON_THEME: Not set

Summary: 0 error(s), 0 warning(s), 32 ok

Description

When multiple notifications appear, and you hover over one at the bottom, it will stay there, even after the top notifications disappear, and you stop hovering it.

Expected Behavior

The notification should move up when user stops hovering it, and there's free space above.

Steps to Reproduce

  1. Send multiple notificatons
  2. Hover one at the bottom
  3. Stop hovering as soon as top notification disappears

Error Messages/Logs

No response

Screenshots/Recordings

Screencast.From.2026-03-02.10-08-25.mp4

Activity

  1. added and removed
    bugSomething isn't working
    on Mar 2, 2026
  2. purian23 commented on Mar 2, 2026

    @purian23
    Collaborator

    I wouldn't label this a bug, or even make a change here I don't think. When you hover, it stops in place to respect what you're doing to read it. After release, it go goes away with the time left. Making it jump again my be jarring but I'll take it into consideration

  3. marcinjahn commented on Mar 2, 2026

    @marcinjahn
    ContributorAuthor

    I thought it looked odd, only after a couple seconds I realized that it was probably due to my hover.
    I guess it’d make sense to check how other platforms deal with it - gnome, elementary, macOS

  4. marcinjahn commented on Mar 2, 2026

    @marcinjahn
    ContributorAuthor

    Well, on macOS they have changed the notification system to never show more than 1 at a time (which might be a good idea btw).

  5. purian23 commented on Mar 2, 2026

    @purian23
    Collaborator

    We definitely aren't gonna go the MacOS route. I think this is more user preference than anything. Ours shows up to 4 and starts stacking and now you know why it would stay in place on hover. Not sure anything will change from here.

  6. louzt commented on Jul 7, 2026

    @louzt
    Contributor

    This behavior is confirmed to be fully resolved in the current v1.5-beta branch, specifically addressed by commit c554d973 authored by @purian23.

    I conducted a series of automated stress tests to evaluate the asynchronous lifetime cross-over and accumulation limits of the notification stack on a tiling compositor environment.

    Test Environment:

    • DMS Shell: v1.5-beta (~/.config/quickshell/dms/)
    • Quickshell: 0.3.0 (Debian package)
    • Compositor: Niri (niri --session) via wayland-1
    • OS: Debian GNU/Linux forky/sid (Kernel 6.19.14)

    Test Scenario (Asymmetric Accumulation & Staggered Expirations):

    # 5 notifications dispatched at 3-second intervals, 15s TTL each
    notify-send "SRE Monitor" "Active capture" -t 15000 & sleep 3
    notify-send "Slack B2B" "Mention from @bbedward" -t 15000 & sleep 3
    notify-send "PipeWire" "Handshake successful" -t 15000 & sleep 3
    notify-send "D-Bus Router" "Queue full (4)" -t 15000 & sleep 3
    notify-send "Systemd User" "Background queued (5)" -t 15000

    Observed Behavior:

    1. Notifications accumulated orderly up to the strict limit of 4 active popups.
    2. The 5th payload stayed securely queued in memory as a background wrapper.
    3. Upon expiration of the oldest popups, the remaining surfaces instantly triggered a fluid slide-up cascade animation to claim the newly cleared Y-coordinates.
    4. The queued notification materialized seamlessly into the available bottom slot.

    Code Verification:

    The fix introduced in c554d973 breaks the race condition by adding the contextMenuActive guard to intercept ghost timer initializations post-hover release. Additionally, _sync() stabilization via _isFocusedScreen() prevents out-of-focus screen states from bleeding into the active stack vertical geometry model. Combined with the micro-task scheduling safety of Qt.callLater on state mutations, the layout engine now consistently collapses dead space without leaving stuck layer-shell windows floating in the middle of the screen.

    This issue can be safely closed as completed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions