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:
parent
2536e37ec5
commit
63546b4f2e
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue