1
0
Fork 0

GUI: do not close the mainwindow before the debugger has finished

This commit is contained in:
Mr. eXoDia 2014-06-20 22:02:22 +02:00
parent d128ead3b5
commit 71ac393668
4 changed files with 33 additions and 1 deletions

View File

@ -132,7 +132,6 @@ BRIDGE_IMPEXP const char* BridgeStart()
if(!_dbg_dbginit || !_gui_guiinit)
return "\"_dbg_dbginit\" || \"_gui_guiinit\" was not loaded yet, call BridgeInit!";
_gui_guiinit(0, 0); //remove arguments
_dbg_dbgexitsignal(); //send exit signal to debugger
return 0;
}
@ -360,6 +359,11 @@ BRIDGE_IMPEXP const char* DbgInit()
return _dbg_dbginit();
}
BRIDGE_IMPEXP void DbgExit()
{
_dbg_dbgexitsignal(); //send exit signal to debugger
}
BRIDGE_IMPEXP BPXTYPE DbgGetBpxTypeAt(duint addr)
{
return _dbg_bpgettypeat(addr);

View File

@ -473,6 +473,7 @@ struct FUNCTION_LOOP_INFO
//Debugger functions
BRIDGE_IMPEXP const char* DbgInit();
BRIDGE_IMPEXP void DbgExit();
BRIDGE_IMPEXP bool DbgMemRead(duint va, unsigned char* dest, duint size);
BRIDGE_IMPEXP bool DbgMemWrite(duint va, const unsigned char* src, duint size);
BRIDGE_IMPEXP duint DbgMemGetPageSize(duint base);

View File

@ -153,6 +153,30 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
//setup menu api
initMenuApi();
bClose=false;
}
DWORD WINAPI MainWindow::closeThread(void* ptr)
{
static bool closing=false;
if(closing)
return 0;
closing=true;
DbgExit();
MainWindow* mainWindow=(MainWindow*)ptr;
mainWindow->bClose=true;
mainWindow->close();
return 0;
}
void MainWindow::closeEvent(QCloseEvent* event)
{
CloseHandle(CreateThread(0, 0, closeThread, this, 0, 0));
if(bClose)
event->accept();
else
event->ignore();
}
MainWindow::~MainWindow()

View File

@ -34,7 +34,10 @@ class MainWindow : public QMainWindow
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
static DWORD WINAPI closeThread(void* ptr);
void closeEvent(QCloseEvent* event);
void setTab(QWidget* widget);
bool bClose;
public slots:
void executeCommand();