Skip to content

Commit 75e9ad0

Browse files
committed
Hack in fix for #3087 (hotkeys triggering accidentally in Virtual Pad)
1 parent c005612 commit 75e9ad0

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualPad.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public partial class VirtualPad : UserControl
4545

4646
private readonly PadSchema _schema;
4747
private readonly InputManager _inputManager;
48+
private readonly EventHandler _setLastFocusedNud;
4849
private bool _readOnly;
4950

5051
public void UpdateValues()
@@ -70,7 +71,7 @@ public bool ReadOnly
7071
}
7172
}
7273

73-
public VirtualPad(PadSchema schema, InputManager inputManager)
74+
public VirtualPad(PadSchema schema, InputManager inputManager, EventHandler setLastFocusedNUD)
7475
{
7576
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
7677
SetStyle(ControlStyles.UserPaint, true);
@@ -79,6 +80,7 @@ public VirtualPad(PadSchema schema, InputManager inputManager)
7980
Dock = DockStyle.Top | DockStyle.Left;
8081
_schema = schema;
8182
_inputManager = inputManager;
83+
_setLastFocusedNud = setLastFocusedNUD;
8284
}
8385

8486
private void VirtualPadControl_Load(object sender, EventArgs e)
@@ -131,6 +133,7 @@ static VirtualPadButton GenVirtualPadButton(InputManager inputManager, ButtonSch
131133
},
132134
AnalogSchema analog => new VirtualPadAnalogStick(
133135
_inputManager,
136+
_setLastFocusedNud,
134137
analog.Name,
135138
analog.SecondaryName,
136139
analog.Spec,
@@ -142,6 +145,7 @@ static VirtualPadButton GenVirtualPadButton(InputManager inputManager, ButtonSch
142145
},
143146
TargetedPairSchema targetedPair => new VirtualPadTargetScreen(
144147
_inputManager.StickyXorAdapter,
148+
_setLastFocusedNud,
145149
targetedPair.Name,
146150
targetedPair.SecondaryName,
147151
targetedPair.MaxX,

src/BizHawk.Client.EmuHawk/tools/VirtualPads/VirtualpadsTool.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public partial class VirtualpadTool : ToolFormBase, IToolFormAutoConfig
2222

2323
private bool _readOnly;
2424

25-
public override bool BlocksInputWhenFocused { get; } = false;
25+
private Control _lastFocusedNUD = null;
26+
27+
public override bool BlocksInputWhenFocused => _lastFocusedNUD?.Focused == true;
2628

2729
private List<VirtualPad> Pads =>
2830
ControllerPanel.Controls
@@ -112,7 +114,9 @@ private void CreatePads()
112114
}
113115
}
114116

115-
ControllerPanel.Controls.AddRange(padSchemata.Select(s => (Control) new VirtualPad(s, InputManager)).Reverse().ToArray());
117+
void SetLastFocusedNUD(object sender, EventArgs args)
118+
=> _lastFocusedNUD = (Control) sender;
119+
ControllerPanel.Controls.AddRange(padSchemata.Select(s => (Control) new VirtualPad(s, InputManager, SetLastFocusedNUD)).Reverse().ToArray());
116120
}
117121

118122
public void ScrollToPadSchema(string padSchemaName)

src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadAnalogStick.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public partial class VirtualPadAnalogStick : UserControl, IVirtualPadControl
2626

2727
public VirtualPadAnalogStick(
2828
InputManager inputManager,
29+
EventHandler setLastFocusedNUD,
2930
string name,
3031
string secondaryName,
3132
AxisSpec rangeX,
@@ -78,9 +79,15 @@ public VirtualPadAnalogStick(
7879
manualR.Maximum = Math.Max(RectToPolarHelper(RangeX.Max, RangeY.Max).R, RectToPolarHelper(RangeX.Min, RangeY.Min).R);
7980

8081
ManualX.ValueChanged += ManualXY_ValueChanged;
82+
ManualX.GotFocus += setLastFocusedNUD;
8183
ManualY.ValueChanged += ManualXY_ValueChanged;
84+
ManualY.GotFocus += setLastFocusedNUD;
8285
manualR.ValueChanged += PolarNumeric_Changed;
86+
manualR.GotFocus += setLastFocusedNUD;
8387
manualTheta.ValueChanged += PolarNumeric_Changed;
88+
manualTheta.GotFocus += setLastFocusedNUD;
89+
MaxXNumeric.GotFocus += setLastFocusedNUD;
90+
MaxYNumeric.GotFocus += setLastFocusedNUD;
8491

8592
AnalogStick.Init(
8693
_inputManager.StickyXorAdapter,

src/BizHawk.Client.EmuHawk/tools/VirtualPads/controls/VirtualPadTargetScreen.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public partial class VirtualPadTargetScreen : UserControl, IVirtualPadControl
2323

2424
public VirtualPadTargetScreen(
2525
StickyXorAdapter stickyXorAdapter,
26+
EventHandler setLastFocusedNud,
2627
string nameX,
2728
string nameY,
2829
int maxX,
@@ -35,6 +36,9 @@ public VirtualPadTargetScreen(
3536
MaxY = maxY;
3637

3738
InitializeComponent();
39+
40+
XNumeric.GotFocus += setLastFocusedNud;
41+
YNumeric.GotFocus += setLastFocusedNud;
3842
}
3943

4044
private void VirtualPadTargetScreen_Load(object sender, EventArgs e)

0 commit comments

Comments
 (0)