feat(webcam): app-default gate slice — per-scene offer, Add places default directly, identity survives removal
Chat's camera no longer greys Web Cam in Live (per-scene max, not app-wide); TASK 26 superseded by creator directive (app-level resource model). Add Webcam now places the existing app default without the picker; the picker runs only for the initial selection. Removing the last placement keeps the identity (_webcam never nulled) so Add stays offered. Startup pass adopts a solo camera as the app default, so a clean layout offers the layer in Live/Chat at once. Dynamic WebcamAddToolTip names the why (incl. the 'graduated to OBS' line). Good Dog: WebcamMenuGateTests rewritten (real app + temp DB + camera seams) — identity in Chat does not gray Live; Add in Live places same wc-1 no picker; scene-with-placement stays gray; identity survives both removals (DB row 1). WebcamStartupResourceTests single-lock fact asserts CanAddWebcam after adoption. Docs same commit (ai.md supersession, TASKS.md, HANDOFF.md). 304/304, 0 warnings.
This commit is contained in:
@@ -217,9 +217,9 @@ public partial class MainViewModel
|
||||
|
||||
// Removes an element from the active scene. For a webcam config this drops the
|
||||
// scene's usage and releases one camera reference (CameraManager stops the
|
||||
// session when the last using scene lets go). When the last config anywhere is
|
||||
// removed, the webcam identity is cleared too — re-adding opens the picker
|
||||
// again instead of silently resurrecting the old camera.
|
||||
// session when the last using scene lets go). The webcam identity survives —
|
||||
// it's the app-level default, so removing a scene's placement re-enables Add
|
||||
// for the same camera instead of dropping it.
|
||||
private void RemoveElement(SceneElement? element)
|
||||
{
|
||||
var scene = StagedScene;
|
||||
@@ -235,13 +235,11 @@ public partial class MainViewModel
|
||||
_webView2Manager?.Unregister(webSource.Id);
|
||||
_sceneGraph.RemoveElement(scene, element);
|
||||
|
||||
if (element is WebcamSceneConfig && _webcam != null
|
||||
&& !Scenes.Any(s => s.Elements.OfType<WebcamSceneConfig>().Any()))
|
||||
if (element is WebcamSceneConfig)
|
||||
{
|
||||
_webcam = null;
|
||||
OnPropertyChanged(nameof(CanChangeWebcam));
|
||||
OnPropertyChanged(nameof(CanAddWebcam));
|
||||
OnPropertyChanged(nameof(CanShowWebcamInStagedScene));
|
||||
OnPropertyChanged(nameof(WebcamAddToolTip));
|
||||
}
|
||||
|
||||
OnPropertyChanged(nameof(ShowEmptySceneHint));
|
||||
|
||||
Reference in New Issue
Block a user