Skip to content

Fix: notch never showed up on extended multi-monitor setups - #113

Merged
gitcoder89431 merged 2 commits into
masterfrom
notch-multi-monitor-fix
Oct 17, 2026
Merged

gitcoder89431 merged 2 commits into
masterfrom
notch-multi-monitor-fix

Conversation

@gitcoder89431

Copy link
Copy Markdown
Owner

Summary

  • The notch's own PanelWindow had no screen: property and no Variants over Quickshell.screens, unlike ruixen.bar's own windows — on an extended multi-monitor desktop it only ever mapped to one output, leaving every other monitor without a notch. Mirrored output looked fine by coincidence (same framebuffer duplicated), which masked the bug there.
  • Split the window's visible content into a new NotchWindow.qml, instantiated once per screen via Variants, following the barRoot-forwarding pattern already established in ruixen.bar's own Phase 6 refactor.
  • Singleton services (notifications/kanban/app library/cava) and the ruixen.notch IPC target stay on root, genuinely once each.
  • Dashboard/launcher open state is shared but gated by a new activeScreenName, so only the screen actually clicked renders the expanded view and grabs exclusive keyboard focus — not every monitor at once.
  • Hover-reveal state went the other direction, from shared to per-window-local, so hovering the pill on one monitor doesn't fade it in on every other one.

Test plan

  • tests/run-all.sh passes in full (13 test files updated for the new file layout)
  • qmllint clean on both files (no new warning classes vs. the pre-change baseline)
  • Live-deployed, fresh PID, clean journal
  • Verified interactively via IPC: dashboard opens/closes, Kanban tab renders, pill collapses correctly
  • Needs real multi-monitor hardware — only tested on a single-monitor machine here, so the actual "shows up on every monitor in extended mode" outcome is unverified. Please test on a real extended multi-monitor setup before merging, and flag here if anything looks off.

🤖 Generated with Claude Code

…ended multi-monitor setups

The notch's own PanelWindow had no screen: property and no Variants
over Quickshell.screens, unlike ruixen.bar's own per-screen windows --
so on an extended multi-monitor desktop it only ever mapped to one
output, leaving every other monitor without a notch at all (mirrored
output happened to look fine since it's the same framebuffer
duplicated, masking the bug).

Split the window's visible content out into NotchWindow.qml,
instantiated once per screen via Variants, with a notchRoot back-
reference to Overlay.qml's own root -- the same pattern ruixen.bar's
own Phase 6 refactor already established for FrameWindow/BarPanel.

Singleton services (NotificationService/KanbanService/AppLibrary/
CavaFeed) and the "ruixen.notch" IpcHandler stay on root, genuinely
once each -- duplicating those per screen would register the IPC
target N times and give every monitor independent board/notification
state. The dashboard/launcher open/closed/tab state moved to root too
(shared), gated per-window by a new activeScreenName so only the
screen that was actually clicked renders the expanded view and grabs
exclusive keyboard focus -- otherwise every monitor would try to open
the full interactive dashboard and fight over Wayland focus at once.
Hover-reveal state went the other direction, from shared to per-window
local, so hovering the pill on one monitor doesn't fade it in on every
other one.

Updated the dependent test files whose checks grepped the window
content's old single-file location.
Both test files retargeted their only overlay_qml check to the new
notch_window_qml file in the previous commit, leaving the original
variable declared but never read -- shellcheck's default unused-
variable check caught it in CI even though nothing here exercises it.
@gitcoder89431
gitcoder89431 merged commit 9ef485a into master Oct 17, 2026
1 check passed
@gitcoder89431
gitcoder89431 deleted the notch-multi-monitor-fix branch October 17, 2026 11:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant