When explorer.exe restarts it destroys the taskbar, which destroys our embedded child window outright (IsWindow returns false) and leaves the UI thread parked in GetMessage with no window to recreate in place. The tray icon and widget vanish until the app is manually relaunched (see issue #34).
A dedicated watchdog thread (independent of the now-dead message loop) polls the Shell_TrayWnd handle and, when it changes, relaunches the widget as a fresh process that re-embeds into the new taskbar. The relaunched child is flagged via an environment variable so it waits on the single-instance mutex until the previous instance exits, and a throttle backs off if explorer is crash-looping.
- Add Brazilian Portuguese (pt-BR) localization
- Thanks to @caduaraxa for the contribution in PR #29
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The PR added the translation file only; register it in the
localization module (enum, codes, native name, string lookups,
pt locale detection) and add the context menu entry and command
handler. Also trim trailing whitespace and align field order
with the other language files.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The PR added IDM_LANG_RUSSIAN to the context menu but not to the
WM_COMMAND handler, so selecting it did nothing. Also reorder
second_suffix to match the Strings field order used by the other
language files.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix: pause usage polling on auth errors
- Show the same auth warning state for expired, invalid, or missing credentials
- Replace the widget auth text with a warning symbol and updated the toast notification
- Stop usage polling and countdown timers while auth is required
- Reuse the configured poll interval to watch credential file metadata instead of polling the API
- Auto-recover when credentials change, while still supporting manual refresh and restart flows
Updated translations
- Add `show_widget` field to Strings struct and all 6 language files
- Replace hardcoded "Show Widget" in window.rs with strings.show_widget
- Translate session_window ("5시간") and weekly_window ("7일") for Korean
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Korean language support with full UI translations including
menu items, update messages, and time format suffixes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Added a native system tray icon that shows current 5-hour usage as a percentage badge.
- Added tray icon tooltip support showing both 5h and 7d countdown/usage values.
- Added tray icon interactions: left-click toggles the taskbar widget, right-click opens the context menu.
- Anchored widget to the bottom of the taskbar
- Added embedded app icon loading so tray fallback uses the app's own icon.
- Updated countdown timer logic to stop cases where 61m is shown
- Updated README.md
- Added a native system tray icon with a live usage badge for the current 5-hour window.
- Left-clicking the tray icon now toggles the taskbar widget on and off.
- Right-click tray menu support now mirrors the widget menu, including refresh, startup, position reset, language, updates, and exit.
- The app now remembers whether the taskbar widget was hidden or visible between launches.
- Improved Windows app identity by using the proper app name and embedded icon metadata in shell surfaces.
- Refined tray icon styling and usage-state colouring for clearer at-a-glance monitoring.
wsl.exe -l -q can hang indefinitely on some systems (e.g. WSL
installed but not fully configured), which blocks the poll thread
forever and prevents any usage data from loading.
Adds a run_with_timeout helper (5s deadline) and uses it for both
list_wsl_distros and read_wsl_credentials. The refresh paths
already had timeouts — these two were missed.