UI: Fixed pause in background logic when pause in menu is enabled
This commit is contained in:
parent
a3d7538299
commit
ebbdf3726f
5 changed files with 23 additions and 9 deletions
|
@ -22,7 +22,6 @@ enum EmulationFlags : uint64_t
|
|||
DisableDynamicSampleRate = 0x80,
|
||||
|
||||
PauseOnMovieEnd = 0x0100,
|
||||
PauseWhenInBackground = 0x0200,
|
||||
AllowBackgroundInput = 0x0400,
|
||||
ReduceSoundInBackground = 0x0800,
|
||||
MuteSoundInBackground = 0x1000,
|
||||
|
@ -757,7 +756,7 @@ public:
|
|||
|
||||
bool NeedsPause()
|
||||
{
|
||||
return (CheckFlag(EmulationFlags::Paused) || (CheckFlag(EmulationFlags::InBackground) && CheckFlag(EmulationFlags::PauseWhenInBackground) && !GameClient::Connected())) && !CheckFlag(EmulationFlags::DebuggerWindowEnabled);
|
||||
return CheckFlag(EmulationFlags::Paused) && !CheckFlag(EmulationFlags::DebuggerWindowEnabled);
|
||||
}
|
||||
|
||||
bool InputEnabled()
|
||||
|
|
|
@ -187,7 +187,6 @@ namespace Mesen.GUI.Config
|
|||
InteropEmu.SetFlag(EmulationFlags.FdsAutoInsertDisk, preferenceInfo.FdsAutoInsertDisk);
|
||||
InteropEmu.SetFlag(EmulationFlags.PauseOnMovieEnd, preferenceInfo.PauseOnMovieEnd);
|
||||
InteropEmu.SetFlag(EmulationFlags.AllowBackgroundInput, preferenceInfo.AllowBackgroundInput);
|
||||
InteropEmu.SetFlag(EmulationFlags.PauseWhenInBackground, preferenceInfo.PauseWhenInBackground || preferenceInfo.PauseWhenInMenusAndConfig || preferenceInfo.PauseWhenInDebuggingTools);
|
||||
InteropEmu.SetFlag(EmulationFlags.UseHighResolutionTimer, !preferenceInfo.DisableHighResolutionTimer);
|
||||
InteropEmu.SetFlag(EmulationFlags.AllowMismatchingSaveStates, preferenceInfo.AllowMismatchingSaveStates);
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace Mesen.GUI.Forms
|
|||
private bool _iconSet = false;
|
||||
protected int _inMenu = 0;
|
||||
private static Timer _tmrUpdateBackground;
|
||||
private static bool _needResume = false;
|
||||
|
||||
static BaseForm()
|
||||
{
|
||||
|
@ -38,6 +39,11 @@ namespace Mesen.GUI.Forms
|
|||
|
||||
protected virtual bool IsConfigForm { get { return false; } }
|
||||
|
||||
public static void StopBackgroundTimer()
|
||||
{
|
||||
_tmrUpdateBackground.Stop();
|
||||
}
|
||||
|
||||
private static void tmrUpdateBackground_Tick(object sender, EventArgs e)
|
||||
{
|
||||
Form focusedForm = null;
|
||||
|
@ -48,14 +54,24 @@ namespace Mesen.GUI.Forms
|
|||
}
|
||||
}
|
||||
|
||||
bool inBackground = focusedForm == null;
|
||||
bool needPause = focusedForm == null && ConfigManager.Config.PreferenceInfo.PauseWhenInBackground;
|
||||
if(focusedForm != null) {
|
||||
inBackground |= ConfigManager.Config.PreferenceInfo.PauseWhenInMenusAndConfig && focusedForm is BaseForm && (((BaseForm)focusedForm)._inMenu > 0 || ((BaseForm)focusedForm).IsConfigForm);
|
||||
inBackground |= ConfigManager.Config.PreferenceInfo.PauseWhenInMenusAndConfig && !(focusedForm is BaseInputForm) && !focusedForm.GetType().FullName.Contains("Debugger");
|
||||
inBackground |= ConfigManager.Config.PreferenceInfo.PauseWhenInDebuggingTools && focusedForm.GetType().FullName.Contains("Debugger");
|
||||
needPause |= ConfigManager.Config.PreferenceInfo.PauseWhenInMenusAndConfig && focusedForm is BaseForm && (((BaseForm)focusedForm)._inMenu > 0 || ((BaseForm)focusedForm).IsConfigForm);
|
||||
needPause |= ConfigManager.Config.PreferenceInfo.PauseWhenInMenusAndConfig && !(focusedForm is BaseInputForm) && !focusedForm.GetType().FullName.Contains("Debugger");
|
||||
needPause |= ConfigManager.Config.PreferenceInfo.PauseWhenInDebuggingTools && focusedForm.GetType().FullName.Contains("Debugger");
|
||||
}
|
||||
|
||||
InteropEmu.SetFlag(EmulationFlags.InBackground, inBackground);
|
||||
if(needPause) {
|
||||
if(!InteropEmu.IsPaused(InteropEmu.ConsoleId.Master)) {
|
||||
_needResume = true;
|
||||
InteropEmu.Pause(InteropEmu.ConsoleId.Master);
|
||||
}
|
||||
} else if(_needResume) {
|
||||
InteropEmu.Resume(InteropEmu.ConsoleId.Master);
|
||||
_needResume = false;
|
||||
}
|
||||
|
||||
InteropEmu.SetFlag(EmulationFlags.InBackground, focusedForm == null);
|
||||
}
|
||||
|
||||
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||
|
|
|
@ -275,6 +275,7 @@ namespace Mesen.GUI.Forms
|
|||
}
|
||||
|
||||
_shuttingDown = true;
|
||||
BaseForm.StopBackgroundTimer();
|
||||
_logWindow?.Close();
|
||||
_historyViewerWindow?.Close();
|
||||
_cheatListWindow?.Close();
|
||||
|
|
|
@ -1525,7 +1525,6 @@ namespace Mesen.GUI
|
|||
DisableDynamicSampleRate = 0x80,
|
||||
|
||||
PauseOnMovieEnd = 0x0100,
|
||||
PauseWhenInBackground = 0x0200,
|
||||
AllowBackgroundInput = 0x0400,
|
||||
ReduceSoundInBackground = 0x0800,
|
||||
MuteSoundInBackground = 0x1000,
|
||||
|
|
Loading…
Add table
Reference in a new issue