[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