[Scummvm-git-logs] scummvm master -> 91d8c46d8c575609fa16528fa18f3406291c2332
OMGPizzaGuy
48367439+OMGPizzaGuy at users.noreply.github.com
Wed Jan 27 23:34:52 UTC 2021
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:
91d8c46d8c ULTIMA8: Disable keymapper when text input is active.
Commit: 91d8c46d8c575609fa16528fa18f3406291c2332
https://github.com/scummvm/scummvm/commit/91d8c46d8c575609fa16528fa18f3406291c2332
Author: Matthew Jimenez (matthew.jimenez at outlook.com)
Date: 2021-01-27T17:34:38-06:00
Commit Message:
ULTIMA8: Disable keymapper when text input is active.
Fixes bug #12087
Changed paths:
engines/ultima/ultima8/meta_engine.cpp
engines/ultima/ultima8/meta_engine.h
engines/ultima/ultima8/ultima8.cpp
diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index 0d13c91429..cff32d3ded 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -211,6 +211,11 @@ Common::KeymapArray MetaEngine::initKeymaps(const Common::String &gameId, bool i
return keymapArray;
}
+void MetaEngine::setTextInputActive(bool isActive) {
+ Common::Keymapper *const mapper = g_engine->getEventManager()->getKeymapper();
+ mapper->setEnabled(!isActive);
+}
+
void MetaEngine::setGameMenuActive(bool isActive) {
Common::Keymapper *const mapper = g_engine->getEventManager()->getKeymapper();
mapper->cleanupGameKeymaps();
diff --git a/engines/ultima/ultima8/meta_engine.h b/engines/ultima/ultima8/meta_engine.h
index ad6b44d659..d98b22f9b2 100644
--- a/engines/ultima/ultima8/meta_engine.h
+++ b/engines/ultima/ultima8/meta_engine.h
@@ -76,6 +76,11 @@ public:
*/
static void releaseAction(KeybindingAction keyAction);
+ /**
+ * Enables/disables keymaps based on whether text input is active
+ */
+ static void setTextInputActive(bool isActive);
+
/**
* Enables/disables keymaps based on whether the in-game menu is active
*/
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index b6dd2582ba..b5e86738ef 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -698,11 +698,16 @@ void Ultima8Engine::enterTextMode(Gump *gump) {
_textModes.remove(gump->getObjId());
}
_textModes.push_front(gump->getObjId());
+
+ MetaEngine::setTextInputActive(true);
}
void Ultima8Engine::leaveTextMode(Gump *gump) {
if (!_textModes.empty())
_textModes.remove(gump->getObjId());
+
+ if (_textModes.empty())
+ MetaEngine::setTextInputActive(false);
}
void Ultima8Engine::handleEvent(const Common::Event &event) {
@@ -764,50 +769,50 @@ void Ultima8Engine::handleEvent(const Common::Event &event) {
// Text mode input. A few hacks here
Gump *gump = nullptr;
-
- if (!_textModes.empty()) {
- while (!_textModes.empty()) {
- gump = dynamic_cast<Gump *>(_objectManager->getObject(_textModes.front()));
- if (gump)
- break;
-
- _textModes.pop_front();
+ while (!_textModes.empty()) {
+ gump = dynamic_cast<Gump *>(_objectManager->getObject(_textModes.front()));
+ if (gump)
+ break;
+
+ _textModes.pop_front();
+ if (_textModes.empty()) {
+ MetaEngine::setTextInputActive(false);
}
+ }
- if (gump) {
- switch (event.type) {
- case Common::EVENT_KEYDOWN:
- // Paste from Clip-Board on Ctrl-V - Note this should be a flag of some sort
- if (event.kbd.keycode == Common::KEYCODE_v && (event.kbd.flags & Common::KBD_CTRL)) {
- if (!g_system->hasTextInClipboard())
- return;
-
- Common::String text = g_system->getTextFromClipboard();
-
- // Only read the first line of text
- while (!text.empty() && text.firstChar() >= ' ')
- gump->OnTextInput(text.firstChar());
-
+ if (gump) {
+ switch (event.type) {
+ case Common::EVENT_KEYDOWN:
+ // Paste from Clip-Board on Ctrl-V - Note this should be a flag of some sort
+ if (event.kbd.keycode == Common::KEYCODE_v && (event.kbd.flags & Common::KBD_CTRL)) {
+ if (!g_system->hasTextInClipboard())
return;
- }
- if (event.kbd.ascii >= ' ' &&
- event.kbd.ascii <= 255 &&
- !(event.kbd.ascii >= 0x7F && // control chars
- event.kbd.ascii <= 0x9F)) {
- gump->OnTextInput(event.kbd.ascii);
- }
+ Common::String text = g_system->getTextFromClipboard();
- gump->OnKeyDown(event.kbd.keycode, event.kbd.flags);
- return;
+ // Only read the first line of text
+ while (!text.empty() && text.firstChar() >= ' ')
+ gump->OnTextInput(text.firstChar());
- case Common::EVENT_KEYUP:
- gump->OnKeyUp(event.kbd.keycode);
return;
+ }
- default:
- break;
+ if (event.kbd.ascii >= ' ' &&
+ event.kbd.ascii <= 255 &&
+ !(event.kbd.ascii >= 0x7F && // control chars
+ event.kbd.ascii <= 0x9F)) {
+ gump->OnTextInput(event.kbd.ascii);
}
+
+ gump->OnKeyDown(event.kbd.keycode, event.kbd.flags);
+ return;
+
+ case Common::EVENT_KEYUP:
+ gump->OnKeyUp(event.kbd.keycode);
+ return;
+
+ default:
+ break;
}
}
}
@@ -1001,6 +1006,7 @@ void Ultima8Engine::resetEngine() {
_inverterGump = nullptr;
_textModes.clear();
+ MetaEngine::setTextInputActive(false);
// reset mouse cursor
_mouse->popAllCursors();
More information about the Scummvm-git-logs
mailing list