diff --git a/Windows/Debugger/CtrlDisAsmView.h b/Windows/Debugger/CtrlDisAsmView.h index 63b5443c31..9d58de1935 100644 --- a/Windows/Debugger/CtrlDisAsmView.h +++ b/Windows/Debugger/CtrlDisAsmView.h @@ -120,6 +120,8 @@ public: void gotoAddr(unsigned int addr) { + if (positionLocked_ != 0) + return; u32 windowEnd = manager.getNthNextAddress(windowStart,visibleRows); u32 newAddress = manager.getStartAddress(addr); @@ -170,6 +172,15 @@ public: updateStatusBarText(); } + void LockPosition() { + positionLocked_++; + } + void UnlockPosition() { + positionLocked_--; + _assert_(positionLocked_ >= 0); + } + private: bool redrawScheduled_ = false; + int positionLocked_ = 0; }; diff --git a/Windows/Debugger/Debugger_Disasm.cpp b/Windows/Debugger/Debugger_Disasm.cpp index 35b9f15dfb..7b776c5099 100644 --- a/Windows/Debugger/Debugger_Disasm.cpp +++ b/Windows/Debugger/Debugger_Disasm.cpp @@ -412,7 +412,9 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) case ID_DEBUG_ADDBREAKPOINT: { + CtrlDisAsmView *view = DisAsmView(); keepStatusBarText = true; + view->LockPosition(); bool isRunning = Core_IsActive(); if (isRunning) { @@ -425,6 +427,7 @@ BOOL CDisasm::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) if (isRunning) Core_EnableStepping(false); + view->UnlockPosition(); keepStatusBarText = false; } break;