diff --git a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs index e68298a1dd..ba3906212b 100644 --- a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs +++ b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs @@ -45,6 +45,7 @@ namespace BizHawk.Client.EmuHawk private readonly PadSchema _schema; private readonly InputManager _inputManager; + private readonly EventHandler _setLastFocusedNud; private bool _readOnly; public void UpdateValues() @@ -70,7 +71,7 @@ namespace BizHawk.Client.EmuHawk } } - public VirtualPad(PadSchema schema, InputManager inputManager) + public VirtualPad(PadSchema schema, InputManager inputManager, EventHandler setLastFocusedNUD) { SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.UserPaint, true); @@ -79,6 +80,7 @@ namespace BizHawk.Client.EmuHawk Dock = DockStyle.Top | DockStyle.Left; _schema = schema; _inputManager = inputManager; + _setLastFocusedNud = setLastFocusedNUD; } private void VirtualPadControl_Load(object sender, EventArgs e) @@ -131,6 +133,7 @@ namespace BizHawk.Client.EmuHawk }, AnalogSchema analog => new VirtualPadAnalogStick( _inputManager, + _setLastFocusedNud, analog.Name, analog.SecondaryName, analog.Spec, @@ -142,6 +145,7 @@ namespace BizHawk.Client.EmuHawk }, TargetedPairSchema targetedPair => new VirtualPadTargetScreen( _inputManager.StickyXorAdapter, + _setLastFocusedNud, targetedPair.Name, targetedPair.SecondaryName, targetedPair.MaxX, diff --git a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs index 57cfe122ec..b06bd0c443 100644 --- a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs +++ b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs @@ -22,7 +22,9 @@ namespace BizHawk.Client.EmuHawk private bool _readOnly; - public override bool BlocksInputWhenFocused { get; } = false; + private Control _lastFocusedNUD = null; + + public override bool BlocksInputWhenFocused => _lastFocusedNUD?.Focused == true; private List Pads => ControllerPanel.Controls @@ -112,7 +114,9 @@ namespace BizHawk.Client.EmuHawk } } - ControllerPanel.Controls.AddRange(padSchemata.Select(s => (Control) new VirtualPad(s, InputManager)).Reverse().ToArray()); + void SetLastFocusedNUD(object sender, EventArgs args) + => _lastFocusedNUD = (Control) sender; + ControllerPanel.Controls.AddRange(padSchemata.Select(s => (Control) new VirtualPad(s, InputManager, SetLastFocusedNUD)).Reverse().ToArray()); } public void ScrollToPadSchema(string padSchemaName) diff --git a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs index fc00427e25..500969efa1 100644 --- a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs +++ b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs @@ -26,6 +26,7 @@ namespace BizHawk.Client.EmuHawk public VirtualPadAnalogStick( InputManager inputManager, + EventHandler setLastFocusedNUD, string name, string secondaryName, AxisSpec rangeX, @@ -78,9 +79,15 @@ namespace BizHawk.Client.EmuHawk manualR.Maximum = Math.Max(RectToPolarHelper(RangeX.Max, RangeY.Max).R, RectToPolarHelper(RangeX.Min, RangeY.Min).R); ManualX.ValueChanged += ManualXY_ValueChanged; + ManualX.GotFocus += setLastFocusedNUD; ManualY.ValueChanged += ManualXY_ValueChanged; + ManualY.GotFocus += setLastFocusedNUD; manualR.ValueChanged += PolarNumeric_Changed; + manualR.GotFocus += setLastFocusedNUD; manualTheta.ValueChanged += PolarNumeric_Changed; + manualTheta.GotFocus += setLastFocusedNUD; + MaxXNumeric.GotFocus += setLastFocusedNUD; + MaxYNumeric.GotFocus += setLastFocusedNUD; AnalogStick.Init( _inputManager.StickyXorAdapter, diff --git a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs index 3d0e2b0635..588cdb3279 100644 --- a/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs +++ b/src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs @@ -23,6 +23,7 @@ namespace BizHawk.Client.EmuHawk public VirtualPadTargetScreen( StickyXorAdapter stickyXorAdapter, + EventHandler setLastFocusedNud, string nameX, string nameY, int maxX, @@ -35,6 +36,9 @@ namespace BizHawk.Client.EmuHawk MaxY = maxY; InitializeComponent(); + + XNumeric.GotFocus += setLastFocusedNud; + YNumeric.GotFocus += setLastFocusedNud; } private void VirtualPadTargetScreen_Load(object sender, EventArgs e)