aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorFilippos Karapetis2010-08-21 10:46:35 +0000
committerFilippos Karapetis2010-08-21 10:46:35 +0000
commitdcd6c9eaf0129fe804f50534aed7dc6eafdaf2bd (patch)
tree48157f2d3be1b7c612bf997e87df10a43b988271 /engines
parent107c39910da802c10498501139b545e71cd94daf (diff)
downloadscummvm-rg350-dcd6c9eaf0129fe804f50534aed7dc6eafdaf2bd.tar.gz
scummvm-rg350-dcd6c9eaf0129fe804f50534aed7dc6eafdaf2bd.tar.bz2
scummvm-rg350-dcd6c9eaf0129fe804f50534aed7dc6eafdaf2bd.zip
SCI: Fixed bug #3048911 - "Keyboard discrepancies in all SCI games" by handling synthetic (keyboard repeat) events and adding support for Control-C
svn-id: r52252
Diffstat (limited to 'engines')
-rw-r--r--engines/sci/event.cpp2
-rw-r--r--engines/sci/graphics/controls.cpp10
2 files changed, 10 insertions, 2 deletions
diff --git a/engines/sci/event.cpp b/engines/sci/event.cpp
index 5923e501cf..3234ab68ff 100644
--- a/engines/sci/event.cpp
+++ b/engines/sci/event.cpp
@@ -149,7 +149,7 @@ SciEvent EventManager::getScummVMEvent() {
found = em->pollEvent(ev);
}
- if (found && !ev.synthetic && ev.type != Common::EVENT_MOUSEMOVE) {
+ if (found && ev.type != Common::EVENT_MOUSEMOVE) {
int modifiers = em->getModifierState();
// We add the modifier key status to buckybits
diff --git a/engines/sci/graphics/controls.cpp b/engines/sci/graphics/controls.cpp
index 5891413be8..6cdf2e4e9d 100644
--- a/engines/sci/graphics/controls.cpp
+++ b/engines/sci/graphics/controls.cpp
@@ -150,7 +150,7 @@ void GfxControls::kernelTexteditChange(reg_t controlObject, reg_t eventObject) {
uint16 maxChars = readSelectorValue(_segMan, controlObject, SELECTOR(max));
reg_t textReference = readSelector(_segMan, controlObject, SELECTOR(text));
Common::String text;
- uint16 textSize, eventType, eventKey = 0;
+ uint16 textSize, eventType, eventKey = 0, modifiers = 0;
bool textChanged = false;
bool textAddChar = false;
Common::Rect rect;
@@ -169,6 +169,7 @@ void GfxControls::kernelTexteditChange(reg_t controlObject, reg_t eventObject) {
break;
case SCI_EVENT_KEYBOARD:
eventKey = readSelectorValue(_segMan, eventObject, SELECTOR(message));
+ modifiers = readSelectorValue(_segMan, eventObject, SELECTOR(modifiers));
switch (eventKey) {
case SCI_KEY_BACKSPACE:
if (cursorPos > 0) {
@@ -196,6 +197,13 @@ void GfxControls::kernelTexteditChange(reg_t controlObject, reg_t eventObject) {
cursorPos++; textChanged = true;
}
break;
+ case 3: // a bit odd, but this is what is returned when Control - C is pressed
+ if (modifiers & SCI_KEYMOD_CTRL) {
+ // Control-C erases the whole line
+ cursorPos = 0; text.clear();
+ textChanged = true;
+ }
+ break;
default:
if (eventKey > 31 && eventKey < 256 && textSize < maxChars) {
// insert pressed character