Skip to content

dbar: animate hiding overlay bars on fullscreen in niri - #4000

Open
steven12138 wants to merge 3 commits into
duxlabs-dev:masterfrom
steven12138:feat/niri-fullscreen-bar-dux2
Open

steven12138 wants to merge 3 commits into
duxlabs-dev:masterfrom
steven12138:feat/niri-fullscreen-bar-dux2

Conversation

@steven12138

@steven12138 steven12138 commented Oct 29, 2026 •

Copy link
Copy Markdown

Summary

Add an opt-in Hide bar on fullscreen setting for overlay bars on niri. When the active window on an output enters fullscreen, DBar slides the top bar away with its existing auto-hide animation. It slides back on exit. The theme controls transition duration, including disabled animations, and the pointer can reveal the hidden bar from the screen edge.

The setting defaults to off and requires Use overlay layer. It does not enable global auto-hide or change the bar's layer. Fullscreen-only hiding keeps the configured exclusive zone, so it does not cause other windows to relayout on entry or exit. Existing global auto-hide still releases the zone as before. Frame-hosted bars, islands, and other compositors are unaffected.

This is the Dux 2.0 DBar port of #3335. It incorporates the earlier review fixes:

  • Clear IPC reveal state when effective auto-hide ends, so a previous bar toggleReveal does not prevent the next fullscreen hide.
  • Use effective auto-hide for edge-hover input even when global auto-hide is off.
  • Preserve the exclusive zone when fullscreen hiding is the only active hide policy.

Niri IPC and Wayland toplevels have no shared window ID. Matching uses exact app ID and title on the output, with keyboard focus as a disambiguator. If a match remains ambiguous, the bar stays visible.

Validation

  • node --test quickshell/tests/bar-ipc.test.mjs quickshell/tests/niri-workspace-state.test.mjs: passed after the review changes.
  • make test-qml: Qt 31 passed, lock 38 passed, logic passed before the review changes.
  • Patched dux-shell 2.0.0-3 built and installed locally before the review changes. A plain dms restart loaded the embedded patch. Fullscreen entry and exit were checked in a single-monitor niri session, and the user confirmed the behavior works.
  • git diff --check: passed.

The exclusive-zone behavior has not been measured live. Pointer-edge behavior and physical multi-monitor behavior have not been checked separately on Dux 2.0. make lint-qml could not run in the fresh worktree because Quickshell's VFS .qmlls.ini had not been generated.

@steven12138

Copy link
Copy Markdown
Author
2026-10-29.00-30-18-compressed.mp4

@bbedward

Copy link
Copy Markdown
Member

/claude review

@claude

claude Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Claude review

No issues found.
Checked: DBarBody fullscreenAutoHide binding (short-circuits before the niri/toplevel scan when the setting is off), the autoHide readonly binding and its bound handler, exclusive zone, reveal and IPC toggleReveal paths, NiriFullscreen.js matching, the NiriService workspace/active-window changes, the settings toggle, i18n and deprecated shims. Model: claude-opus-5-5.

@@ -0,0 +1,161 @@
import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dotn really want to add these new tests for this

Comment thread docs/fullscreen-bar.md Outdated
@@ -0,0 +1,34 @@
# Fullscreen bar auto-hide on niri

In Settings > Bar, enable **Use overlay layer**, then **Hide bar on fullscreen**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation like this shouldnt be here

@github-actions github-actions Bot added the ui Quickshell UI under quickshell/ label Oct 29, 2026

This branch has not been deployed

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

Labels

ui Quickshell UI under quickshell/

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants