Fix unnecessary Center PC calls in the CodeWindow

This not only fixes a regression where toggling a breakpoint using the CodeWindow would cause a Center PC, but it also removes several redundant JumpToAddress(PC) calls.
This commit is contained in:
aldelaro5 2016-10-22 17:20:06 -04:00
parent 2536e37ec5
commit 63546b4f2e
3 changed files with 21 additions and 18 deletions

View File

@ -159,7 +159,8 @@ void CCodeWindow::OnHostMessage(wxCommandEvent& event)
break;
case IDM_UPDATE_DISASM_DIALOG:
Repopulate();
codeview->Center(PC);
Repopulate(false);
if (HasPanel<CRegisterWindow>())
GetPanel<CRegisterWindow>()->NotifyUpdate();
if (HasPanel<CWatchWindow>())
@ -205,12 +206,14 @@ void CCodeWindow::OnCodeStep(wxCommandEvent& event)
case IDM_SKIP:
PC += 4;
Repopulate();
codeview->Center(PC);
Repopulate(false);
break;
case IDM_SETPC:
PC = codeview->GetSelection();
Repopulate();
codeview->Center(PC);
Repopulate(false);
break;
case IDM_GOTOPC:
@ -383,11 +386,8 @@ void CCodeWindow::StepOut()
PowerPC::SetMode(old_mode);
CPU::PauseAndLock(false, false);
JumpToAddress(PC);
{
wxCommandEvent ev(wxEVT_HOST_COMMAND, IDM_UPDATE_DISASM_DIALOG);
GetEventHandler()->ProcessEvent(ev);
}
wxCommandEvent ev(wxEVT_HOST_COMMAND, IDM_UPDATE_DISASM_DIALOG);
GetEventHandler()->ProcessEvent(ev);
// Update all toolbars in the aui manager
Parent->UpdateGUI();
@ -605,12 +605,13 @@ void CCodeWindow::PopulateToolbar(wxToolBar* toolBar)
}
// Update GUI
void CCodeWindow::Repopulate()
void CCodeWindow::Repopulate(bool refresh_codeview)
{
if (!codeview)
return;
codeview->Center(PC);
if (refresh_codeview)
codeview->Refresh();
UpdateCallstack();
UpdateButtonStates();

View File

@ -95,7 +95,7 @@ public:
bool JITNoBlockLinking();
bool JumpToAddress(u32 address);
void Repopulate();
void Repopulate(bool refresh_codeview = true);
void NotifyMapLoaded();
void PopulateToolbar(wxToolBar* toolBar);
void UpdateButtonStates();

View File

@ -523,13 +523,15 @@ void CFrame::OnPlay(wxCommandEvent& WXUNUSED(event))
// Core is initialized and emulator is running
if (UseDebugger)
{
CPU::EnableStepping(!CPU::IsStepping());
wxThread::Sleep(20);
g_pCodeWindow->JumpToAddress(PC);
g_pCodeWindow->Repopulate();
// Update toolbar with Play/Pause status
UpdateGUI();
bool was_stopped = CPU::IsStepping();
CPU::EnableStepping(!was_stopped);
// When the CPU stops it generates a IDM_UPDATE_DISASM_DIALOG which automatically refreshes
// the UI, the UI only needs to be refreshed manually when unpausing.
if (was_stopped)
{
g_pCodeWindow->Repopulate();
UpdateGUI();
}
}
else
{