refactor(input): own pointer and callback lifetime
Move camera pointer, framebuffer resize, and retained/devtools input edges behind focused reversible owners. Preserve input priority while making shutdown deactivate callbacks before live-session retirement and retry physical detach without stranding transport teardown.
This commit is contained in:
parent
d09e246d3a
commit
8b8afeefa3
42 changed files with 4029 additions and 461 deletions
|
|
@ -112,12 +112,34 @@ public sealed class DispatcherMovementInputSourceTests
|
|||
Assert.Throws<InvalidOperationException>(() => source.Bind(second));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UnbindRequiresExactDispatcherAndRestoresNeutralCapture()
|
||||
{
|
||||
var source = new DispatcherMovementInputSource();
|
||||
var (first, _, _) = CreateDispatcher();
|
||||
var (other, _, _) = CreateDispatcher();
|
||||
source.Bind(first);
|
||||
first.TrySetAutomationActionHeld(InputAction.MovementForward, held: true);
|
||||
|
||||
source.Unbind(other);
|
||||
Assert.True(source.Capture().Forward);
|
||||
source.Unbind(first);
|
||||
|
||||
Assert.False(source.IsAvailable);
|
||||
Assert.Equal(default, source.Capture());
|
||||
}
|
||||
|
||||
private static (InputDispatcher Dispatcher, FakeKeyboard Keyboard, FakeMouse Mouse)
|
||||
CreateDispatcher()
|
||||
{
|
||||
var keyboard = new FakeKeyboard();
|
||||
var mouse = new FakeMouse();
|
||||
return (new InputDispatcher(keyboard, mouse, new KeyBindings()), keyboard, mouse);
|
||||
var dispatcher = InputDispatcher.CreateDetached(
|
||||
keyboard,
|
||||
mouse,
|
||||
new KeyBindings());
|
||||
dispatcher.Attach();
|
||||
return (dispatcher, keyboard, mouse);
|
||||
}
|
||||
|
||||
private sealed class FakeKeyboard : IKeyboardSource
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue