Files
Dashward/extension
hzhang 5b871b8ecb fix(extension): WindowGuard skips desktop-icons-ng; harden warden ordering
P2 went onto the VM and the dashboard workspace appeared, but switching
to it auto-bounced back to the previous workspace. Diagnostic build
showed every `window-added` on dashboard was firing for a window with
title `@!0,0;BDHF`, wm_class=gjs, type=NORMAL, sticky=false. That's the
desktop-icons-ng (ding) extension's per-monitor desktop window: it runs
as a separate gjs process, so it masquerades as a generic NORMAL window
and the original DESKTOP/DOCK/SPLASHSCREEN filter missed it. WindowGuard
was un-sticking it on every workspace switch, which caused mutter to
flip the active workspace away from dashboard.

WindowGuard.shouldSkip now also returns true for `is_skip_taskbar()`
windows. That's the load-bearing check for ding, and a sensible general
rule: skip-taskbar windows are owner-managed (PiP, helper utilities,
backgrounded ding desktops) and shouldn't be dragged around by us.
The DESKTOP/DOCK/SPLASHSCREEN check stays for extensions that do label
themselves correctly.

While re-deploying, also harden the WorkspaceWarden enable() ordering.
The original sequence relied on mutter not reacting to the
`dynamic-workspaces=false` flip before our `append_new_workspace` call
landed -- but with default gsettings (num-workspaces=4), a faster
reaction would expand the count to 4 and leave us with ghost workspaces.
Reorder to: write num-workspaces=current first, then flip dynamic, then
append, then update num-workspaces. The race is now closed regardless of
mutter timing.

Verified on ubuntu2504-test VM: dashboard workspace switchable,
ding silently ignored, real-window bounces still log on Super+Shift+End.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 00:06:49 +01:00
..
2026-05-22 23:00:02 +01:00
2026-05-22 23:00:02 +01:00
2026-05-22 23:00:02 +01:00