diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 83688d4bf..7ae82361a 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -137,6 +137,12 @@ void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) Event::Type event = instance().eventHandler().eventForKey(EventMode::kEmulationMode, key, mod); switch (event) { + case Event::ExitMode: + // make consistent, exit debugger on key UP + if(!repeated) + myExitPressed = true; + return; + // events which can be handled 1:1 case Event::ToggleP0Collision: case Event::ToggleP0Bit: @@ -173,12 +179,14 @@ void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) case Event::ConsoleRightDiffA: case Event::ConsoleRightDiffB: case Event::ConsoleRightDiffToggle: - instance().eventHandler().handleEvent(event); + if(!repeated) + instance().eventHandler().handleEvent(event); return; // events which need special handling in debugger case Event::TakeSnapshot: - instance().debugger().parser().run("savesnap"); + if(!repeated) + instance().debugger().parser().run("savesnap"); return; case Event::Rewind1Menu: @@ -212,6 +220,18 @@ void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod, bool repeated) Dialog::handleKeyDown(key, mod); } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::handleKeyUp(StellaKey key, StellaMod mod) +{ + if(myExitPressed + && Event::ExitMode == instance().eventHandler().eventForKey(EventMode::kEmulationMode, key, mod)) + { + myExitPressed = false; + instance().debugger().parser().run("run"); + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::handleCommand(CommandSender* sender, int cmd, int data, int id) diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index 83f8252fb..bd3ad4603 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -80,6 +80,7 @@ class DebuggerDialog : public Dialog void setPosition() override { positionAt(0); } void loadConfig() override; void handleKeyDown(StellaKey key, StellaMod mod, bool repeated) override; + void handleKeyUp(StellaKey key, StellaMod mod) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void doStep(); @@ -141,7 +142,7 @@ class DebuggerDialog : public Dialog unique_ptr myLFont; // used for labels unique_ptr myNFont; // used for normal text Widget* myFocusedWidget{nullptr}; - + bool myExitPressed{false}; private: // Following constructors and assignment operators not supported diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index f9a25433c..4a0349394 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -2187,15 +2187,6 @@ bool EventHandler::changeStateByEvent(Event::Type type) handled = false; break; - case Event::ExitMode: - // special handling for ESC key in debugger - if(myState != EventHandlerState::DEBUGGER) - { - handled = false; - break; - } - [[fallthrough]]; - case Event::DebuggerMode: #ifdef DEBUGGER_SUPPORT if(myState == EventHandlerState::EMULATION || myState == EventHandlerState::PAUSE