[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