Tray menu renders empty after extended uptime: icon failures are swallowed silently
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 52/100
Research direction
Start with src/OpenClaw.Tray.WinUI/Windows/TrayMenuWindow.xaml.cs:571 and Helpers/FluentIconCatalog.cs:118, then inspect WindowManager's cached window fields and popup lifecycle. Reproduce on the shipped 2026.9.4.0 binary using EnumWindows and GetGuiResources before and after restart. Done means the icon failure is diagnosable, the empty tray menu and PopupWindowSiteBridge accumulation are addressed or precisely explained, and the UI validation is reported.
Written by the indexing model from the issue text.
Description
Summary
After roughly 90 minutes of continuous uptime, right-clicking the tray icon opens the menu window but it renders empty: no icons, no menu rows. The UI thread is still pumping (Responding=True), so this is not a hang.
Restarting the process restores it immediately.
Evidence: before/after restart
| Metric | Fresh process | After ~90 min |
|---|---|---|
Orphaned Microsoft.UI.Content.PopupWindowSiteBridge windows |
0 | 3 (parked at -32000,-32000) |
| GDI objects | 64 | 211 (+1.6/min) |
| USER objects | 67 | 93 |
| Working set | 228 MB | 416 MB |
PopupWindowSiteBridge is the host window WinUI 3 creates for Popup/Flyout. These three survive after the tray menu closes and are never destroyed. Extrapolating the rate, GDI objects reach ~700 after about 7 hours.
Root cause
Icon construction failures are silently swallowed. src/OpenClaw.Tray.WinUI/Windows/TrayMenuWindow.xaml.cs:571:
var iconElement = ResolveIcon(icon);
if (iconElement != null) // line 572
{
...
Grid.SetColumn(iconElement, 0);
grid.Children.Add(iconElement);
}
When null, nothing is added, nothing is thrown, nothing is logged. The row renders with an empty icon column.
Icons all funnel through src/OpenClaw.Tray.WinUI/Helpers/FluentIconCatalog.cs:118:
public static FontFamily SymbolThemeFontFamily =>
(FontFamily)Application.Current.Resources["SymbolThemeFontFamily"];
59 call sites across the tray menu, chat, settings and nav all depend on this one property. It indexes the resource dictionary directly with no null check, no try/catch, and no fallback.
Supporting observation: OpenClaw.Tray.WinUI.pri contains the key name SymbolThemeFontFamily (next to BrandMark / TitleText / NavBackButton) but not the literal Segoe Fluent Icons. The font mapping is expected to be injected by the WinUI runtime during Application.Start, which is exactly where the native popup/GDI accumulation happens.
The same resource failure is visible in the log, repeating on every run:
[WARN] LocalizationHelper: Resource lookup failed for 'Chat_Composer_Slash_Loading' (language='<default>'): NamedResource not found
Suggested direction
- Add a fallback to
SymbolThemeFontFamily: on lookup failure, fall back tonew FontFamily("Segoe Fluent Icons"), or resolve tonulland letBuildreturn an icon without an explicitFontFamilyso the default font fallback applies. - Icon construction failure should not be silent. At minimum log one WARN on first failure so this is diagnosable.
- Track down the popup resource leak.
PopupWindowSiteBridgewindows are not destroyed when a Flyout closes, andWindowManagerholds_chatWindow/_hubWindow/_trayMenuWindowas cached singletons with no invalidation strategy. Give them a resource-health check.
Impact
Long-running users see an empty menu with no error surfaced, which is very hard to self-diagnose. A restart clears it.
Required proof pools
UI(tray UX)
Validation
Report, not a code change. Window enumeration via EnumWindows plus GetGuiResources on the shipped 2026.9.4.0 binary, before and after restart.
- Dominant language
- C#
- Stars
- 2.1k
- Forks
- 315
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 127
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from openclaw/openclaw-windows-node
-
clawsweeper:source-repro impact:ux-release-blocker issue-rating: 🦞 diamond lobster P0
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
openclaw/openclaw-windows-node#1723 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:security issue-rating: 🦞 diamond lobster P2
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
openclaw/openclaw-windows-node#1516 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
clawsweeper:needs-info clawsweeper:needs-maintainer-review clawsweeper:no-new-fix-pr impact:ux-friction issue-rating: 🦐 gold shrimp P1 stale
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
openclaw/openclaw-windows-node#1145 · 5 comments · 1 reaction ·
Maintainers usually reply within 1 day
-
clawsweeper:needs-security-review clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:security issue-rating: 🦞 diamond lobster P1
Difficulty 3/5 1-2 days Newbie friendliness 35/100
openclaw/openclaw-windows-node#1736 · 1 comment · 1 reaction ·
Maintainers usually reply within 1 day
-
clawsweeper:needs-live-repro clawsweeper:needs-maintainer-review clawsweeper:no-new-fix-pr impact:ux-release-blocker issue-rating: 🐚 platinum hermit P0
Difficulty 4/5 3-5 days Newbie friendliness 32/100
openclaw/openclaw-windows-node#1725 · 4 comments · 1 reaction ·
Maintainers usually reply within 1 day
All issues in openclaw/openclaw-windows-node
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
good first issue help wanted ready-for-human
Difficulty 2/5 Half a day Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
ready-for-agent size:S status:todo
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
elsa-workflows/elsa-foundation#2830 ·
Maintainers usually reply within 1 day
-
Review - Maintainer WG-Maintainers-Build
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
PowerShell/PowerShell#28220 · 1 comment ·
Maintainers usually reply within 1 day
-
area: docs eco: dotnet good first issue help wanted lane: free-agent roadmap size: XS type: docs
Difficulty 2/5 Under an hour Newbie friendliness 72/100
arminazimi/evergreen#377 ·
Maintainers usually reply within 1 day