Skip to content

v0.1.3: hide-to-tray + tray toggle + context menu fix#6

Merged
recklessop merged 4 commits into
mainfrom
claude/pensive-easley-4abcbe
May 8, 2026
Merged

v0.1.3: hide-to-tray + tray toggle + context menu fix#6
recklessop merged 4 commits into
mainfrom
claude/pensive-easley-4abcbe

Conversation

@recklessop
Copy link
Copy Markdown
Owner

v0.1.3 changes

  • Right-click context menu on the endpoint grid — Edit / Copy URL / Toggle enabled / Delete are wired through PlacementTarget.Tag so they actually fire (the old RelativeSource AncestorType=Window bindings silently failed because ContextMenu lives in its own popup visual tree).
  • Hide-to-tray on close — the X button (and Alt+F4) now hide the window to the tray and keep the GUI process alive instead of quitting. Tray double-click reopens; Tray → Exit / File → Exit truly quit.
  • File → Minimize to tray toggle — checkable menu item, default on. Persisted per-user to %APPDATA%\WebhookServer\gui.json. Untick to make X actually close and minimize behave like a normal Windows minimize.
  • Wiki sync hardening — sync script no longer treats git's stderr informational lines (CRLF nags, "remote: Processed N references") as fatal. End-to-end Gitea sync verified.

Generated with Claude Code

recklessop and others added 4 commits May 8, 2026 11:26
The minimize-to-tray behavior already worked, but clicking the X button
killed the GUI process and took the tray with it. That made "tray when
the GUI window is closed" a UX dead end - the only way to get the tray
was to leave the window minimized.

Now:
  - X button / Alt+F4 -> hide window, tray stays alive
  - Tray double-click -> reopens window
  - File -> Exit (or tray's Exit menu) -> truly quits the process

Wired by adding a RealExitRequested event on MainViewModel that the
window subscribes to (so File -> Exit sets the ExitForReal flag before
calling Shutdown), and a parallel onExit callback on TrayIcon for the
tray menu's Exit item. The Closing handler checks ExitForReal: if
false (X / Alt+F4) it cancels the close and hides; if true, it disposes
the tray and lets the close proceed.

Auto-start at login is still TBD - if you want the tray to be there
without manually launching the GUI after a reboot, that's a separate
Task Scheduler entry. Skipping for now.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a checkable MenuItem so the user can opt out of the hide-to-tray
behavior. Persisted per-user to %APPDATA%\WebhookServer\gui.json so the
choice survives restarts.

When ticked (default): X / Alt+F4 / minimize hide to tray, GUI process
keeps running, tray icon persists.

When unticked: X actually closes the app, minimize is a regular
Windows minimize.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The ContextMenu lived in its own popup visual tree, so the menu items'
RelativeSource={RelativeSource AncestorType=Window} couldn't find the
Window and the bindings silently failed - none of Edit / Copy URL /
Toggle / Delete actually fired their commands.

Standard WPF workaround: park MainViewModel on each DataGridRow's Tag
(still in the Window's visual tree, so the row Setter binding resolves)
and reach it from the menu items via PlacementTarget.Tag. The toggle
command parameter likewise comes from PlacementTarget.DataContext (the
EndpointConfig the row represents).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@recklessop recklessop merged commit 0b7c20a into main May 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant