gramps
7b940b6a5a
fix(alerts): AlertOverlayLayer marshals the chat-poller seam to the UI thread
...
Live test session proved the native alert box DID play (the alert ring was the
only source in the mix: micLevel/loopLevel 0.000 while peakMix went
0.375->0.733->0.891 after the sim injections) but the app crashed at
11:22:01.301 the moment a REAL message round-tripped through the poller:
System.ArgumentException: Must create DependencySource on same Thread as
the DependencyObject
at ...MS.Internal.Data.DataBindEngine.ProcessCrossThreadRequests()
OnMessageReceived ran RefreshAlertPreviews on the MTA poller thread and
stamped the WPF-bound VideoImageSource with a WriteableBitmap created there;
the binding engine's cross-thread re-bind killed the process. ChatOverlayLayer
already marshals this exact seam (Dispatcher.Invoke) - mirror it, guarded for
Application.Current null so the pure test seams still run inline.
Good Dog test:
AlertLayerVideoTests.OnMessageReceived_FromPollerThread_MarshalsPreviewWritesToTheUiThread
calls the seam from a raw MTA Thread while the RealApp loop runs, then asserts
on the UI thread that the preview bitmap's Dispatcher is the App's (red on the
old seam, green on the fix). WPF cross-thread rule recorded in MyMistakes.md.
Full suite 320/320, clean build 0 warnings, scope-check green.
2026-09-26 11:28:36 -07:00
..
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:28:36 -07:00
2026-09-24 08:27:00 -07:00
2026-08-06 14:35:34 -07:00
2026-09-17 08:03:58 -07:00
Screen backdrop (schema v5/v6) + five-scene catalog + webcam polish: live desktop/game capture as a permanent non-deletable bottom layer (Source.IsBackdrop), auto full-screen game detection (Win32FullScreenDetector) else primary display, GraphicsCapturePicker re-designation, refcounted shared ScreenCaptureManager, Live-only backdrop by policy (HasBackdrop + v5-v6 backfill + EnforceBackdropPolicy, checkbox gone), SceneCatalog (Starting/Live/BRB/Chat/Ending) with + button re-adding missing scenes, webcam mid-session transparent-container fix (GetPreviewBitmap propagation), Chat half-screen-area cap, 'Add Webcam' always opens the picker (SwapWebcamIdentityAsync, no silent resurrect), WindowsRuntimeMarshal frame-read + 5s-throttled errors, docs updated, tests (65 passing)
2026-08-07 14:15:50 -07:00
2026-09-23 16:45:56 -07:00
2026-08-20 18:02:41 -07:00
2026-09-04 12:16:20 -07:00
Screen backdrop (schema v5/v6) + five-scene catalog + webcam polish: live desktop/game capture as a permanent non-deletable bottom layer (Source.IsBackdrop), auto full-screen game detection (Win32FullScreenDetector) else primary display, GraphicsCapturePicker re-designation, refcounted shared ScreenCaptureManager, Live-only backdrop by policy (HasBackdrop + v5-v6 backfill + EnforceBackdropPolicy, checkbox gone), SceneCatalog (Starting/Live/BRB/Chat/Ending) with + button re-adding missing scenes, webcam mid-session transparent-container fix (GetPreviewBitmap propagation), Chat half-screen-area cap, 'Add Webcam' always opens the picker (SwapWebcamIdentityAsync, no silent resurrect), WindowsRuntimeMarshal frame-read + 5s-throttled errors, docs updated, tests (65 passing)
2026-08-07 14:15:50 -07:00
2026-08-31 18:57:29 -07:00
2026-08-31 19:45:48 -07:00
2026-08-31 19:45:48 -07:00
2026-09-14 18:40:20 -07:00
2026-08-26 06:48:14 -07:00
2026-08-26 06:48:14 -07:00
2026-08-06 14:35:34 -07:00
2026-08-12 07:21:15 -07:00
2026-08-31 18:57:29 -07:00
2026-08-20 18:02:41 -07:00
2026-08-31 19:52:10 -07:00
2026-08-07 17:44:16 -07:00
2026-09-26 11:15:17 -07:00
2026-08-23 12:25:04 -07:00
Screen backdrop (schema v5/v6) + five-scene catalog + webcam polish: live desktop/game capture as a permanent non-deletable bottom layer (Source.IsBackdrop), auto full-screen game detection (Win32FullScreenDetector) else primary display, GraphicsCapturePicker re-designation, refcounted shared ScreenCaptureManager, Live-only backdrop by policy (HasBackdrop + v5-v6 backfill + EnforceBackdropPolicy, checkbox gone), SceneCatalog (Starting/Live/BRB/Chat/Ending) with + button re-adding missing scenes, webcam mid-session transparent-container fix (GetPreviewBitmap propagation), Chat half-screen-area cap, 'Add Webcam' always opens the picker (SwapWebcamIdentityAsync, no silent resurrect), WindowsRuntimeMarshal frame-read + 5s-throttled errors, docs updated, tests (65 passing)
2026-08-07 14:15:50 -07:00
2026-09-22 07:00:47 -07:00
2026-08-31 09:10:17 -07:00
2026-08-31 09:10:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-26 11:15:17 -07:00
2026-09-22 08:07:54 -07:00
2026-08-25 17:25:25 -07:00
2026-08-06 14:35:34 -07:00
2026-09-15 19:25:39 -07:00
2026-08-31 19:52:10 -07:00
2026-08-31 19:22:02 -07:00
2026-08-07 17:44:16 -07:00
2026-09-14 18:40:20 -07:00
2026-08-23 12:25:04 -07:00
2026-08-21 08:18:52 -07:00
2026-08-31 18:57:29 -07:00
2026-08-29 09:02:55 -07:00
2026-08-31 17:53:34 -07:00
2026-09-14 18:40:20 -07:00
2026-08-22 18:10:59 -07:00
2026-09-22 07:00:47 -07:00
2026-08-22 18:10:59 -07:00
2026-08-16 17:48:37 -07:00
2026-09-24 08:27:00 -07:00
2026-08-22 18:10:59 -07:00
2026-09-08 12:07:54 -07:00
2026-09-14 16:14:00 -07:00
2026-09-14 16:14:00 -07:00
2026-08-20 18:02:41 -07:00
2026-09-22 07:00:47 -07:00
2026-08-07 17:44:16 -07:00
2026-08-22 18:10:59 -07:00
2026-09-24 08:27:00 -07:00
2026-09-25 08:12:05 -07:00
2026-09-23 16:45:56 -07:00