fix(waybar): carry tray-menu counter-rules in the bar stylesheet itself
Some checks failed
Check / eval (push) Has been cancelled

The e8658fe cure (USER-priority gtk.css counter-rules) verified in a
plain GTK app but not in the real Waybar-hosted nm-applet menu: Waybar
adds its provider at GTK_STYLE_PROVIDER_PRIORITY_USER as well
(src/client.cpp), and in practice its rules win the tie against
~/.config/gtk-3.0/gtk.css on GTK 3.24 — reproduced by injecting the
bar stylesheet above USER priority: arrow, checkmark and separator all
vanish, matching the live menu exactly.

The only placement that wins at ANY provider priority is inside the
same stylesheet: after each '*' reset, restore the CSS-sized menu
nodes (menuitem arrow 16px, check/radio 14px, separator 1px line) and
give menus a text face instead of the bar's glyph font. Applied to
boreal + executive-slate waybar.css and waybar.nix generatedStyle;
stylix.nix comment corrected (its rules now cover ordinary GTK apps
only).

Ground truth checked over D-Bus first: nm-applet exports per-network
Wi-Fi icons as dbusmenu icon-data, and with gtk-menu-images=1 the
connected network's icon already renders in the live menu — the
remaining loss was arrows/checks/separators, all CSS-box nodes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-12 08:15:08 +01:00
parent 0416eafd71
commit 8eb672bada
4 changed files with 61 additions and 19 deletions

View File

@@ -382,17 +382,28 @@ let
${colorDefs}
/* NB: this `*` reset reaches the SNI tray menus Waybar hosts too
(its stylesheet applies process-wide) the menu-side damage
(collapsed arrows/checks) is undone by USER-priority counter-rules
in stylix.nix, which outrank any waybar.css. Do NOT scope this to
window#waybar: the id's specificity would beat the class rules
below (pills, workspaces) and wreck the bar. */
(its stylesheet applies process-wide, at a priority user gtk.css
cannot out-rank). The menu block right below undoes the damage
keep the two in sync. Do NOT scope `*` to window#waybar instead:
the id's specificity would beat the class rules below and wreck
the bar. Whole-swap theme waybar.css files carry the same pair. */
* {
font-family: "${t.fonts.ui}", "${t.fonts.mono}";
font-size: ${toString t.fonts.size}pt;
min-height: 0;
}
/* Tray menus: undo the `*` reset same stylesheet, higher
specificity. Arrows/checks/separators are CSS-sized nodes;
min-height 0 makes them invisible. */
menu menuitem arrow { min-width: 16px; min-height: 16px; }
menu check, menu radio { min-width: 14px; min-height: 14px; }
menu separator {
min-height: 1px;
margin: 5px 0;
background: alpha(@text, 0.15);
}
window#waybar {
background: alpha(@base, 0.85);
color: @text;