Menu ▾ ▴

#181 Windows: inline quick reply and Open button on toasts

closed
nobody
2026-08-28
2026-07-22
Anonymous
No

Originally created by: kristofferR

The Windows half of [#86] (Ref [#86]), completing the trilogy with Linux [#167] and macOS [#173] (Ref [#167], Ref [#173]). Depends on the Windows toast module issue (grouping/clear-on-read) landing first; reuses the platform-neutral reply machinery from [#167]/#173 (on_notification_reply, REPLY_IN_FLIGHT serialization, pending-ack map, carrier:reply-result, page-side quick-reply.ts) — whichever lands first ships it.

Design

  • Eligibility (trusted side, same rule as [#173]): !hide_notification_preview && validated_thread_path(...).is_some(). Eligible → toast XML gains <input id="reply" type="text" placeHolderContent="Message…"/>, <action content="Reply" arguments="action=reply&id=<hex>" hint-inputId="reply" activationType="background"/>, <action content="Open" arguments="action=open&id=<hex>" activationType="foreground"/>. Ineligible → no actions at all (no blind reply on redacted banners). Sync alerts never.
  • Activation: the Activated handler branches on parsed launch args. reply → cast to IToastActivatedEventArgs2, UserInput().Lookup("reply") → string, trim + cap ~2000 chars (empty → plain click), hand to the shared on_notification_reply — which evals __carrierQuickReply without raising the window, waits ≤20 s for the ack, and on failure does show_main + __carrierOpenThread + one fixed "Reply not sent — opening the conversation" toast. A successful reply ack also calls clear_thread_group (same symmetry as [#174]).
  • Implementation checkpoint: confirm activationType="background" still fires the in-process Activated event for a shortcut-registered (non-COM) AUMID on Win10 and Win11; if not, fall back to foreground and accept the app coming forward on reply — document which won.

Testing. Unit: eligibility matrix, reply-text sanitation, activation-args parsing (shared with the module issue). Manual: reply from the banner and from Action Center with the window hidden to tray (message sends, window stays hidden); hide-preview on → no input field; failure path preserves text in the composer; two threads replied in quick succession route independently; reply to a toast after the banner timed out.

Part of [#187].

Related

Tickets: #167
Tickets: #173
Tickets: #174
Tickets: #187
Tickets: #233
Tickets: #86

Discussion

  • Anonymous

    Anonymous - 2026-08-28

    Originally posted by: kristofferR

    Implemented in PR [#233] and manually verified on Windows 11 during PR [#247]. Reply and Open actions work from Action Center, successful replies clear the conversation group, and the failure path opens the conversation safely. Closing as complete.

     

    Related

    Tickets: #233
    Tickets: #247

  • Anonymous

    Anonymous - 2026-08-28

    Ticket changed by: kristofferR

    • status: open --> closed
     

Log in to post a comment.