feat(backdrop): Capture Window… in-app window pin (TASK 38, Good Dog ONE test)
Click-to-pin an open window as the full-bleed Live backdrop, via the existing
window:<hwnd> capture path (same render layer as game/desktop). Session-scoped:
window:/picker: keys heal to auto on reload (HWND-recycle hazard); pin wins
while the window enumerates, then auto-fallbacks (game → desktop → static); a
dead window's capture session heals to auto, no dead ends.
Fix: ScreenCaptureSourceFactory.Resolve hex-parsed "window:0x<Hwnd>" WITHOUT
stripping the 0x prefix — NumberStyles.HexNumber rejects it, so every pin
resolved null ("No capture target for this key") and the heal silently rolled
back. Same flaw in IsAliveWindowPin (pin-wins guard was dead). Both fixed.
Commit also carries an out-of-scope prerequisite: PillRadioTests.cs:105 had a
committed stray token ("...PrimaryStartButtonLabel soil;", CS1003) blocking the
whole test-project compile — token removed.
Plus the previous session's uncommitted pricing docs (one-time $29/$49) that
share TASKS.md/ai.md/HANDOFF.md.
This commit is contained in:
@@ -193,6 +193,14 @@ public partial class MainViewModel : ViewModelBase
|
||||
ChangeCaptureCommand = new RelayCommand(_ => _ = ChangeBackgroundCaptureAsync());
|
||||
RefreshCaptureCommand = new RelayCommand(_ => RefreshBackgroundAutoCapture());
|
||||
SetBackgroundDisplayCommand = new RelayCommand(display => SetBackgroundCapture(display as DisplayInfo));
|
||||
_windowEnumerator = WindowEnumeratorOverride ?? new Win32WindowEnumerator();
|
||||
RefreshWindowsCommand = new RelayCommand(_ => RefreshOpenWindows());
|
||||
CaptureWindowCommand = new RelayCommand(window =>
|
||||
{
|
||||
if (window is not WindowInfo info) return;
|
||||
_ = RedesignateBackgroundAsync(info.CaptureKey);
|
||||
});
|
||||
RefreshOpenWindows();
|
||||
ToggleShowDesktopCommand = new RelayCommand(_ => ToggleBackgroundShowDesktop());
|
||||
BrowseBackgroundCommand = new RelayCommand(_ => BrowseBackground());
|
||||
ToggleMicMuteCommand = new RelayCommand(_ => ToggleMicMute());
|
||||
@@ -285,8 +293,7 @@ public partial class MainViewModel : ViewModelBase
|
||||
_screenCaptureFactory.Resolve,
|
||||
System.Windows.Application.Current?.Dispatcher);
|
||||
_screenCaptureManager.PreviewBitmapChanged += OnScreenPreviewBitmapChanged;
|
||||
_screenCaptureManager.CaptureFailed += (key, message) =>
|
||||
AppLog.Write($"ScreenCaptureManager: capture '{key}' failed: {message}");
|
||||
_screenCaptureManager.CaptureFailed += OnScreenCaptureFailed;
|
||||
|
||||
_mediaManager = new MediaVideoSourceManager(
|
||||
path => new MediaVideoSource(
|
||||
|
||||
Reference in New Issue
Block a user