[Scummvm-git-logs] scummvm master -> 2b22b9c581f5777ec4ae9aa1372a98a4682fe1b2

sev- noreply at scummvm.org
Sat Oct 28 19:01:24 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:
2b22b9c581 GUI: Further fixes to keymapper code


Commit: 2b22b9c581f5777ec4ae9aa1372a98a4682fe1b2
    https://github.com/scummvm/scummvm/commit/2b22b9c581f5777ec4ae9aa1372a98a4682fe1b2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-10-28T21:01:18+02:00

Commit Message:
GUI: Further fixes to keymapper code

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


diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index 18d23b630a0..3f5959352e5 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -203,33 +203,46 @@ Common::Keymap *GuiManager::getKeymap() const {
 	act->allowKbdRepeats();
 	guiMap->addAction(act);
 
-
+	act = new Action("END", _("Go to end of line"));
 #ifdef MACOSX
-	act = new Action("MAC_END", _("Go to end of line"));
 	act->setCustomEngineActionEvent(kActionEnd);
 	act->addDefaultInputMapping("C+e");
-	guiMap->addAction(act);
-#endif
-
-	act = new Action("END", _("Go to end of line"));
+#else
 	act->setKeyEvent(KEYCODE_END);
 	act->addDefaultInputMapping("END");
+#endif
 	guiMap->addAction(act);
 
-
+	act = new Action("SHIFT_END", _("Select to end of line"));
 #ifdef MACOSX
-	act = new Action("MAC_HOME", _("Go to start of line"));
-	act->setCustomEngineActionEvent(kActionHome);
-	act->addDefaultInputMapping("C+a");
+	act->setCustomEngineActionEvent(kActionShiftEnd);
+	act->addDefaultInputMapping("C+S+e");
+#else
+	act->setKeyEvent(KeyState(KEYCODE_END, (uint16)KEYCODE_END, KBD_SHIFT));
+	act->addDefaultInputMapping("S+END");
+#endif
 	guiMap->addAction(act);
+
+	act = new Action("SHIFT_HOME", _("Select to start of line"));
+#ifdef MACOSX
+	act->setCustomEngineActionEvent(kActionShiftHome);
+	act->addDefaultInputMapping("C+S+a");
+#else
+	act->setKeyEvent(KeyState(KEYCODE_HOME, (uint16)KEYCODE_HOME, KBD_SHIFT));
+	act->addDefaultInputMapping("S+HOME");
 #endif
+	guiMap->addAction(act);
 
 	act = new Action("HOME", _("Go to start of line"));
+#ifdef MACOSX
+	act->setCustomEngineActionEvent(kActionHome);
+	act->addDefaultInputMapping("C+a");
+#else
 	act->setKeyEvent(KEYCODE_HOME);
 	act->addDefaultInputMapping("HOME");
+#endif
 	guiMap->addAction(act);
 
-
 #ifdef MACOSX
 	act = new Action(kStandardActionCut, _("Cut"));
 	act->setCustomEngineActionEvent(kActionCut);
diff --git a/gui/gui-manager.h b/gui/gui-manager.h
index 6ea98e604bc..cf30f449f25 100644
--- a/gui/gui-manager.h
+++ b/gui/gui-manager.h
@@ -47,14 +47,10 @@ namespace Common {
 namespace GUI {
 
 enum {
-	kActionEnter,
-	kActionEscape,
-	kActionBackspace,
-	kActionDelete,
 	kActionEnd,
-	kActionLeft,
-	kActionRight,
+	kActionShiftEnd,
 	kActionHome,
+	kActionShiftHome,
 	kActionCopy,
 	kActionCut,
 	kActionPaste,
diff --git a/gui/widgets/editable.cpp b/gui/widgets/editable.cpp
index 9b6511f3e04..e15649d012d 100644
--- a/gui/widgets/editable.cpp
+++ b/gui/widgets/editable.cpp
@@ -297,12 +297,7 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
 
 	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();
+		moveCaretToEnd(state.hasFlags(Common::KBD_SHIFT));
 		forcecaret = true;
 		dirty = true;
 		break;
@@ -347,12 +342,7 @@ bool EditableWidget::handleKeyDown(Common::KeyState state) {
 
 	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();
+		moveCaretToStart(state.hasFlags(Common::KBD_SHIFT));
 		forcecaret = true;
 		dirty = true;
 		break;
@@ -398,6 +388,33 @@ void EditableWidget::defaultKeyDownHandler(Common::KeyState &state, bool &dirty,
 	}
 }
 
+void EditableWidget::moveCaretToStart(bool shiftPressed) {
+	if (shiftPressed) {
+		if (_selCaretPos < 0)
+			_selCaretPos = _caretPos;
+
+		setSelectionOffset(0 - _selCaretPos);
+	} else {
+		clearSelection();
+	}
+	// Move caret to start
+	setCaretPos(caretVisualPos(0));
+}
+
+void EditableWidget::moveCaretToEnd(bool shiftPressed) {
+	if (_shiftPressed) {
+		if (_selCaretPos < 0)
+			_selCaretPos = _caretPos;
+
+		setSelectionOffset(_editString.size() - _selCaretPos);
+	} else {
+		clearSelection();
+	}
+
+	// Move caret to end
+	setCaretPos(caretVisualPos(_editString.size()));
+}
+
 void EditableWidget::handleOtherEvent(const Common::Event &evt) {
 	bool dirty = false;
 	bool forcecaret = false;
@@ -413,22 +430,22 @@ void EditableWidget::handleOtherEvent(const Common::Event &evt) {
 	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 		switch (evt.customType) {
 		case kActionHome:
-			// Move caret to start
-			setCaretPos(caretVisualPos(0));
-			if (_shiftPressed)
-				setSelectionOffset(0 - _selCaretPos);
-			else
-				clearSelection();
+			moveCaretToStart(false);
+			forcecaret = true;
+			dirty = true;
+			break;
+		case kActionShiftHome:
+			moveCaretToStart(true);
 			forcecaret = true;
 			dirty = true;
 			break;
 		case kActionEnd:
-			// Move caret to end
-			setCaretPos(caretVisualPos(_editString.size()));
-			if (_shiftPressed)
-				setSelectionOffset(_editString.size() - _selCaretPos);
-			else
-				clearSelection();
+			moveCaretToEnd(false);
+			forcecaret = true;
+			dirty = true;
+			break;
+		case kActionShiftEnd:
+			moveCaretToEnd(true);
 			forcecaret = true;
 			dirty = true;
 			break;
diff --git a/gui/widgets/editable.h b/gui/widgets/editable.h
index 575eb5fd497..acf16493229 100644
--- a/gui/widgets/editable.h
+++ b/gui/widgets/editable.h
@@ -85,6 +85,8 @@ public:
 	void handleOtherEvent(const Common::Event& evt) override;
 	void reflowLayout() override;
 
+	void moveCaretToStart(bool shiftPressed);
+	void moveCaretToEnd(bool shiftPressed);
 	bool setCaretPos(int newPos);
 	void setSelectionOffset(int newOffset);
 




More information about the Scummvm-git-logs mailing list