[Scummvm-git-logs] scummvm master -> 611fd6cd5ffe384b39fce8ea313d8e373249c71a

sev- noreply at scummvm.org
Sat Oct 28 16:39:58 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
611fd6cd5f GUI: FIX conflicting mappings between EditableWidget and GUI elements


Commit: 611fd6cd5ffe384b39fce8ea313d8e373249c71a
    https://github.com/scummvm/scummvm/commit/611fd6cd5ffe384b39fce8ea313d8e373249c71a
Author: polyesterswing (kurianjojo2004 at gmail.com)
Date: 2023-10-28T18:39:55+02:00

Commit Message:
GUI: FIX conflicting mappings between EditableWidget and GUI elements

EditableWidget took over keyboard events targeted towards Debugger and
List. This commit fixes it by reverting some part of the code to its
original state.

Fixes issues caused by PR #5366

Changed paths:
    gui/gui-manager.cpp
    gui/widgets/editable.cpp


diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index 765048b237f..18d23b630a0 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -191,64 +191,45 @@ Common::Keymap *GuiManager::getKeymap() const {
 	act->allowKbdRepeats();
 	guiMap->addAction(act);
 
-	act = new Action("ENTER", _("New Line"));
-	act->setCustomEngineActionEvent(kActionEnter);
-	act->addDefaultInputMapping("RETURN");
-	act->addDefaultInputMapping("KP_ENTER");
-	act->allowKbdRepeats();
-	guiMap->addAction(act);
-
-	act = new Action("ESC", _("Close Dialog"));
-	act->setCustomEngineActionEvent(kActionEscape);
-	act->addDefaultInputMapping("ESCAPE");
-	guiMap->addAction(act);
-
 	act = new Action("BACKSPACE", _("Backspace"));
-	act->setCustomEngineActionEvent(kActionBackspace);
+	act->setKeyEvent(KEYCODE_BACKSPACE);
 	act->addDefaultInputMapping("BACKSPACE");
 	act->allowKbdRepeats();
 	guiMap->addAction(act);
 
 	act = new Action("DEL", _("Delete Character"));
-	act->setCustomEngineActionEvent(kActionDelete);
+	act->setKeyEvent(KEYCODE_DELETE);
 	act->addDefaultInputMapping("DELETE");
 	act->allowKbdRepeats();
 	guiMap->addAction(act);
 
-	act = new Action("END", _("Go to end of line"));
-	act->setCustomEngineActionEvent(kActionEnd);
 
 #ifdef MACOSX
+	act = new Action("MAC_END", _("Go to end of line"));
+	act->setCustomEngineActionEvent(kActionEnd);
 	act->addDefaultInputMapping("C+e");
+	guiMap->addAction(act);
 #endif
 
-	act->addDefaultInputMapping("DOWN");
+	act = new Action("END", _("Go to end of line"));
+	act->setKeyEvent(KEYCODE_END);
 	act->addDefaultInputMapping("END");
 	guiMap->addAction(act);
 
-	act = new Action("CHAR_LEFT", _("Move cursor left"));
-	act->setCustomEngineActionEvent(kActionLeft);
-	act->addDefaultInputMapping("LEFT");
-	act->allowKbdRepeats();
-	guiMap->addAction(act);
-
-	act = new Action("CHAR_RIGHT", _("Move cursor right"));
-	act->setCustomEngineActionEvent(kActionRight);
-	act->addDefaultInputMapping("RIGHT");
-	act->allowKbdRepeats();
-	guiMap->addAction(act);
-
-	act = new Action("HOME", _("Go to start of line"));
-	act->setCustomEngineActionEvent(kActionHome);
 
 #ifdef MACOSX
+	act = new Action("MAC_HOME", _("Go to start of line"));
+	act->setCustomEngineActionEvent(kActionHome);
 	act->addDefaultInputMapping("C+a");
+	guiMap->addAction(act);
 #endif
 
-	act->addDefaultInputMapping("UP");
+	act = new Action("HOME", _("Go to start of line"));
+	act->setKeyEvent(KEYCODE_HOME);
 	act->addDefaultInputMapping("HOME");
 	guiMap->addAction(act);
 
+
 #ifdef MACOSX
 	act = new Action(kStandardActionCut, _("Cut"));
 	act->setCustomEngineActionEvent(kActionCut);
diff --git a/gui/widgets/editable.cpp b/gui/widgets/editable.cpp
index 0ab17c83dd6..9b6511f3e04 100644
--- a/gui/widgets/editable.cpp
+++ b/gui/widgets/editable.cpp
@@ -209,6 +209,7 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
 	bool handled = true;
 	bool dirty = false;
 	bool forcecaret = false;
+	int deleteIndex;
 
 	if (!isEnabled())
 		return false;
@@ -241,7 +242,124 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
 		state.keycode = remap[state.keycode - Common::KEYCODE_KP0];
 	}
 
-	defaultKeyDownHandler(state, dirty, forcecaret, handled);
+	switch (state.keycode) {
+	case Common::KEYCODE_RETURN:
+	case Common::KEYCODE_KP_ENTER:
+		// confirm edit and exit editmode
+		endEditMode();
+		dirty = true;
+		break;
+
+	case Common::KEYCODE_ESCAPE:
+		abortEditMode();
+		dirty = true;
+		break;
+
+	case Common::KEYCODE_BACKSPACE:
+		deleteIndex = caretLogicalPos();
+		if (deleteIndex > 0 && _selOffset == 0) {
+			deleteIndex--;
+			_editString.deleteChar(deleteIndex);
+			setCaretPos(caretVisualPos(deleteIndex));
+			_selCaretPos = -1;
+			dirty = true;
+
+			sendCommand(_cmd, 0);
+		} else if (deleteIndex >= 0 && _selOffset != 0) {
+			int selBegin = _selCaretPos;
+			int selEnd = _selCaretPos + _selOffset;
+			if (selBegin > selEnd)
+				SWAP(selBegin, selEnd);
+			_editString.erase(selBegin, selEnd - selBegin);
+			setCaretPos(caretVisualPos(selBegin));
+			_selCaretPos = -1;
+			_selOffset = 0;
+			dirty = true;
+
+			sendCommand(_cmd, 0);
+		}
+		forcecaret = true;
+		break;
+
+	case Common::KEYCODE_DELETE:
+		deleteIndex = caretLogicalPos();
+		if (deleteIndex < (int)_editString.size()) {
+			_editString.deleteChar(deleteIndex);
+			setCaretPos(caretVisualPos(deleteIndex));
+			_selCaretPos = -1;
+			_selOffset = 0;
+			dirty = true;
+
+			sendCommand(_cmd, 0);
+		}
+		forcecaret = true;
+		break;
+
+	case Common::KEYCODE_DOWN:
+	case Common::KEYCODE_END:
+		// Move caret to end
+		setCaretPos(caretVisualPos(_editString.size()));
+		if (state.hasFlags(Common::KBD_SHIFT))
+			setSelectionOffset(_editString.size() - _selCaretPos);
+		else
+			clearSelection();
+		forcecaret = true;
+		dirty = true;
+		break;
+
+	case Common::KEYCODE_LEFT:
+		if (state.hasFlags(Common::KBD_SHIFT)) {
+			if (_disableSelection)
+				break;
+			if (_selCaretPos < 0)
+				_selCaretPos = _caretPos;
+			if (_caretPos > 0)
+				_selOffset--;
+		} else {
+			clearSelection();
+		}
+		// Move caret one left (if possible)
+		if (_caretPos > 0) {
+			dirty = setCaretPos(_caretPos - 1);
+		}
+		forcecaret = true;
+		dirty = true;
+		break;
+
+	case Common::KEYCODE_RIGHT:
+		if (state.hasFlags(Common::KBD_SHIFT)) {
+			if (_disableSelection)
+				break;
+			if (_selCaretPos < 0)
+				_selCaretPos = _caretPos;
+			if (_selOffset + _selCaretPos < (int)_editString.size())
+				_selOffset++;
+		} else {
+			clearSelection();
+		}
+		// Move caret one right (if possible)
+		if (_caretPos < (int)_editString.size()) {
+			dirty = setCaretPos(_caretPos + 1);
+		}
+		forcecaret = true;
+		dirty = true;
+		break;
+
+	case Common::KEYCODE_UP:
+	case Common::KEYCODE_HOME:
+		// Move caret to start
+		setCaretPos(caretVisualPos(0));
+		if (state.hasFlags(Common::KBD_SHIFT))
+			setSelectionOffset(0 - _selCaretPos);
+		else
+			clearSelection();
+		forcecaret = true;
+		dirty = true;
+		break;
+
+	default:
+		defaultKeyDownHandler(state, dirty, forcecaret, handled);
+	}
 
 	if (dirty)
 		markAsDirty();
@@ -283,7 +401,6 @@ void EditableWidget::defaultKeyDownHandler(Common::KeyState &state, bool &dirty,
 void EditableWidget::handleOtherEvent(const Common::Event &evt) {
 	bool dirty = false;
 	bool forcecaret = false;
-	int deleteIndex;
 
 	if (!isEnabled())
 		return;
@@ -295,135 +412,26 @@ void EditableWidget::handleOtherEvent(const Common::Event &evt) {
 	switch (evt.type) {
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		switch (evt.customType) {
-		case kActionEnter:
-			endEditMode();
-			dirty = true;
-			break;
-
-		case kActionEscape:
-			abortEditMode();
-			dirty = true;
-			break;
-
-		case kActionBackspace:
-			deleteIndex = caretLogicalPos();
-			if (deleteIndex > 0 && _selOffset == 0) {
-				deleteIndex--;
-				_editString.deleteChar(deleteIndex);
-				setCaretPos(caretVisualPos(deleteIndex));
-				_selCaretPos = -1;
-				dirty = true;
-
-				sendCommand(_cmd, 0);
-			} else if (deleteIndex >= 0 && _selOffset != 0) {
-				int selBegin = _selCaretPos;
-				int selEnd = _selCaretPos + _selOffset;
-				if (selBegin > selEnd)
-					SWAP(selBegin, selEnd);
-				_editString.erase(selBegin, selEnd - selBegin);
-				setCaretPos(caretVisualPos(selBegin));
-				_selCaretPos = -1;
-				_selOffset = 0;
-				dirty = true;
-
-				sendCommand(_cmd, 0);
-			}
-			forcecaret = true;
-			break;
-
-		case kActionDelete:
-			deleteIndex = caretLogicalPos();
-			if (deleteIndex >= 0 && _selOffset == 0) {
-				_editString.deleteChar(deleteIndex);
-				setCaretPos(caretVisualPos(deleteIndex));
-				_selCaretPos = -1;
-				dirty = true;
-
-				sendCommand(_cmd, 0);
-			} else if (deleteIndex >= 0 && _selOffset != 0) {
-				int selBegin = _selCaretPos;
-				int selEnd = _selCaretPos + _selOffset;
-				if (selBegin > selEnd)
-					SWAP(selBegin, selEnd);
-				_editString.erase(selBegin, selEnd - selBegin);
-				setCaretPos(caretVisualPos(selBegin));
-				_selCaretPos = -1;
-				_selOffset = 0;
-				dirty = true;
-			}
+		case kActionHome:
+			// Move caret to start
+			setCaretPos(caretVisualPos(0));
+			if (_shiftPressed)
+				setSelectionOffset(0 - _selCaretPos);
+			else
+				clearSelection();
 			forcecaret = true;
+			dirty = true;
 			break;
-
 		case kActionEnd:
-			if (_shiftPressed) {
-				if (_selCaretPos < 0)
-					_selCaretPos = _caretPos;
-
-				setSelectionOffset(_editString.size() - _selCaretPos);
-			} else {
-				clearSelection();
-			}
-
 			// Move caret to end
 			setCaretPos(caretVisualPos(_editString.size()));
-
-			forcecaret = true;
-			dirty = true;
-			break;
-
-		case kActionLeft:
-			if (_shiftPressed) {
-				if (_disableSelection)
-					break;
-				if (_selCaretPos < 0)
-					_selCaretPos = _caretPos;
-				if (_caretPos > 0)
-					_selOffset--;
-			} else {
-				clearSelection();
-			}
-			// Move caret one left (if possible)
-			if (_caretPos > 0) {
-				dirty = setCaretPos(_caretPos - 1);
-			}
-			forcecaret = true;
-			dirty = true;
-			break;
-
-		case kActionRight:
-			if (_shiftPressed) {
-				if (_disableSelection)
-					break;
-				if (_selCaretPos < 0)
-					_selCaretPos = _caretPos;
-				if (_selOffset + _selCaretPos < (int)_editString.size())
-					_selOffset++;
-			} else {
-				clearSelection();
-			}
-			// Move caret one right (if possible)
-			if (_caretPos < (int)_editString.size()) {
-				dirty = setCaretPos(_caretPos + 1);
-			}
-			forcecaret = true;
-			dirty = true;
-			break;
-
-		case kActionHome:
-			if (_shiftPressed) {
-				if (_selCaretPos < 0)
-					_selCaretPos = _caretPos;
-				setSelectionOffset(0 - _selCaretPos);
-			} else {
+			if (_shiftPressed)
+				setSelectionOffset(_editString.size() - _selCaretPos);
+			else
 				clearSelection();
-			}
-			// Move caret to start
-			setCaretPos(caretVisualPos(0));
-
 			forcecaret = true;
 			dirty = true;
 			break;
-
 		case kActionCut:
 			if (!getEditString().empty() && _selOffset != 0) {
 				int selBegin = _selCaretPos;




More information about the Scummvm-git-logs mailing list