Debugger: Correct delayed symbol listbox updates.

With the dialogs no longer created on start, this message wasn't coming
through.
This commit is contained in:
Unknown W. Brackets 2021-12-31 09:10:40 -08:00
parent 244b0a86f6
commit 85b7b221be
5 changed files with 33 additions and 23 deletions

View File

@ -134,6 +134,8 @@ void CMemoryDlg::searchBoxRedraw(std::vector<u32> results) {
void CMemoryDlg::NotifyMapLoaded() {
if (m_hDlg && g_symbolMap)
g_symbolMap->FillSymbolListBox(symListHdl, ST_DATA);
else
mapLoadPending_ = true;
Update();
}
@ -219,6 +221,10 @@ BOOL CMemoryDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
}
case WM_DEB_UPDATE:
if (mapLoadPending_ && m_hDlg && g_symbolMap) {
g_symbolMap->FillSymbolListBox(symListHdl, ST_DATA);
mapLoadPending_ = false;
}
Update();
return TRUE;

View File

@ -39,6 +39,9 @@ public:
void NotifySearchCompleted();
void Size(void);
private:
bool mapLoadPending_ = false;
};

View File

@ -134,6 +134,9 @@ namespace MainWindow
static bool hasFocus = true;
static bool g_isFullscreen = false;
static bool disasmMapLoadPending = false;
static bool memoryMapLoadPending = false;
// gross hack
bool noFocusPause = false; // TOGGLE_PAUSE state to override pause on lost focus
bool trapMouse = true; // Handles some special cases(alt+tab, win menu) when game is running and mouse is confined
@ -538,6 +541,9 @@ namespace MainWindow
disasmWindow = new CDisasm(MainWindow::GetHInstance(), MainWindow::GetHWND(), currentDebugMIPS);
DialogManager::AddDlg(disasmWindow);
}
if (disasmMapLoadPending)
disasmWindow->NotifyMapLoaded();
disasmMapLoadPending = false;
}
void CreateGeDebuggerWindow() {
@ -554,6 +560,9 @@ namespace MainWindow
memoryWindow = new CMemoryDlg(MainWindow::GetHInstance(), MainWindow::GetHWND(), currentDebugMIPS);
DialogManager::AddDlg(memoryWindow);
}
if (memoryMapLoadPending)
memoryWindow->NotifyMapLoaded();
memoryMapLoadPending = false;
}
void CreateVFPUWindow() {
@ -563,6 +572,15 @@ namespace MainWindow
}
}
void NotifyDebuggerMapLoaded() {
disasmMapLoadPending = disasmWindow == nullptr;
memoryMapLoadPending = memoryWindow == nullptr;
if (!disasmMapLoadPending)
disasmWindow->NotifyMapLoaded();
if (!memoryMapLoadPending)
memoryWindow->NotifyMapLoaded();
}
void DestroyDebugWindows() {
DialogManager::RemoveDlg(disasmWindow);
if (disasmWindow)
@ -947,10 +965,7 @@ namespace MainWindow
break;
case WM_USER + 1:
if (disasmWindow)
disasmWindow->NotifyMapLoaded();
if (memoryWindow)
memoryWindow->NotifyMapLoaded();
NotifyDebuggerMapLoaded();
if (disasmWindow)
disasmWindow->UpdateDialog();
break;

View File

@ -65,6 +65,7 @@ namespace MainWindow
void CreateGeDebuggerWindow();
void CreateMemoryWindow();
void CreateVFPUWindow();
void NotifyDebuggerMapLoaded();
void DestroyDebugWindows();
void UpdateMenus(bool isMenuSelect = false);
void UpdateCommands();

View File

@ -854,12 +854,7 @@ namespace MainWindow {
case ID_DEBUG_LOADMAPFILE:
if (W32Util::BrowseForFileName(true, hWnd, L"Load .ppmap", 0, L"Maps\0*.ppmap\0All files\0*.*\0\0", L"ppmap", fn)) {
g_symbolMap->LoadSymbolMap(Path(fn));
if (disasmWindow)
disasmWindow->NotifyMapLoaded();
if (memoryWindow)
memoryWindow->NotifyMapLoaded();
NotifyDebuggerMapLoaded();
}
break;
@ -871,12 +866,7 @@ namespace MainWindow {
case ID_DEBUG_LOADSYMFILE:
if (W32Util::BrowseForFileName(true, hWnd, L"Load .sym", 0, L"Symbols\0*.sym\0All files\0*.*\0\0", L"sym", fn)) {
g_symbolMap->LoadNocashSym(Path(fn));
if (disasmWindow)
disasmWindow->NotifyMapLoaded();
if (memoryWindow)
memoryWindow->NotifyMapLoaded();
NotifyDebuggerMapLoaded();
}
break;
@ -887,12 +877,7 @@ namespace MainWindow {
case ID_DEBUG_RESETSYMBOLTABLE:
g_symbolMap->Clear();
if (disasmWindow)
disasmWindow->NotifyMapLoaded();
if (memoryWindow)
memoryWindow->NotifyMapLoaded();
NotifyDebuggerMapLoaded();
break;
case ID_DEBUG_DISASSEMBLY: