diff --git a/src/common/PKeyboardHandler.cxx b/src/common/PKeyboardHandler.cxx index aefccb0f6..5fb59da65 100644 --- a/src/common/PKeyboardHandler.cxx +++ b/src/common/PKeyboardHandler.cxx @@ -365,7 +365,7 @@ bool PhysicalKeyboardHandler::addMapping(Event::Type event, EventMode mode, myKeyMap.erase(EventMode::kKeypadMode, key, mod); myKeyMap.erase(EventMode::kCompuMateMode, key, mod); } - else if(evMode != EventMode::kMenuMode) + else if(evMode != EventMode::kMenuMode && evMode != EventMode::kEditMode) { // erase identical mapping for kCommonMode myKeyMap.erase(EventMode::kCommonMode, key, mod); diff --git a/src/gui/EditableWidget.cxx b/src/gui/EditableWidget.cxx index 810d3f1d3..f6518bead 100644 --- a/src/gui/EditableWidget.cxx +++ b/src/gui/EditableWidget.cxx @@ -81,6 +81,7 @@ void EditableWidget::setEditable(bool editable, bool hiliteBG) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void EditableWidget::lostFocusWidget() { + myUndoHandler->reset(); _selectSize = 0; } @@ -90,8 +91,8 @@ bool EditableWidget::tryInsertChar(char c, int pos) if(_filter(tolower(c))) { killSelectedText(); - _editString.insert(pos, 1, c); myUndoHandler->doChar(); // aggregate single chars + _editString.insert(pos, 1, c); return true; } return false; @@ -106,7 +107,6 @@ bool EditableWidget::handleText(char text) if(tryInsertChar(text, _caretPos)) { _caretPos++; - //_selectSize = 0; sendCommand(EditableWidget::kChangedCmd, 0, _id); setDirty(); return true; @@ -192,6 +192,13 @@ bool EditableWidget::handleKeyDown(StellaKey key, StellaMod mod) _selectSize = -int(_editString.size()); break; + case Event::Backspace: + handled = killSelectedText(); + if(!handled) + handled = killChar(-1); + if(handled) sendCommand(EditableWidget::kChangedCmd, key, _id); + break; + case Event::Delete: handled = killSelectedText(); if(!handled) @@ -219,13 +226,6 @@ bool EditableWidget::handleKeyDown(StellaKey key, StellaMod mod) if(handled) sendCommand(EditableWidget::kChangedCmd, key, _id); break; - case Event::Backspace: - handled = killSelectedText(); - if(!handled) - handled = killChar(-1); - if(handled) sendCommand(EditableWidget::kChangedCmd, key, _id); - break; - case Event::Cut: handled = cutSelectedText(); if(handled)