diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs
index e7bf6c6740..a168e9044f 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Events.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs
@@ -2041,7 +2041,7 @@ namespace BizHawk.Client.EmuHawk
private void NDSSettingsMenuItem_Click(object sender, EventArgs e)
{
GenericCoreConfig.DoDialog(this, "NDS Settings", false, true);
- FrameBufferResized();
+ MaybeFrameBufferResized();
}
private void NDSSyncSettingsMenuItem_Click(object sender, EventArgs e)
diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index a2e2207701..924736e83f 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -810,6 +810,8 @@ namespace BizHawk.Client.EmuHawk
private InputManager InputManager => Global.InputManager;
private IVideoProvider _currentVideoProvider = NullVideo.Instance;
+ int _currentVideoProvider_last_width = -1;
+ int _currentVideoProvider_last_height = -1;
private ISoundProvider _currentSoundProvider = new NullSound(44100 / 60); // Reasonable default until we have a core instance
@@ -1084,8 +1086,26 @@ namespace BizHawk.Client.EmuHawk
AddOnScreenMessage($"{fi.Name} saved.");
}
+ ///
+ /// This is a separate function because sometimes we may knowingly want to force the layout to recalculate
+ /// When youre not sure, use this
+ ///
+ public void MaybeFrameBufferResized()
+ {
+ if (_currentVideoProvider_last_width == _currentVideoProvider.BufferWidth
+ && _currentVideoProvider_last_height == _currentVideoProvider.BufferHeight)
+ return;
+ FrameBufferResized();
+ }
+
+ ///
+ /// Forces the window layout to recalculate
+ ///
public void FrameBufferResized()
{
+ _currentVideoProvider_last_width = _currentVideoProvider.BufferWidth;
+ _currentVideoProvider_last_height = _currentVideoProvider.BufferHeight;
+
// run this entire thing exactly twice, since the first resize may adjust the menu stacking
for (int i = 0; i < 2; i++)
{