From aad564340349c5ae1580e0863d36c29936f81615 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Mon, 15 Aug 2011 12:21:36 +0000 Subject: [PATCH] Keep repeating a pressed key if another key is released. Thanks jazztickets and robertmo Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3740 --- src/hardware/keyboard.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/hardware/keyboard.cpp b/src/hardware/keyboard.cpp index 93bcda0c..f68d2b09 100644 --- a/src/hardware/keyboard.cpp +++ b/src/hardware/keyboard.cpp @@ -347,15 +347,18 @@ void KEYBOARD_AddKey(KBD_KEYS keytype,bool pressed) { } /* Add the actual key in the keyboard queue */ if (pressed) { - if (keyb.repeat.key==keytype) keyb.repeat.wait=keyb.repeat.rate; - else keyb.repeat.wait=keyb.repeat.pause; - keyb.repeat.key=keytype; + if (keyb.repeat.key == keytype) keyb.repeat.wait = keyb.repeat.rate; + else keyb.repeat.wait = keyb.repeat.pause; + keyb.repeat.key = keytype; } else { - keyb.repeat.key=KBD_NONE; - keyb.repeat.wait=0; - ret+=128; + if (keyb.repeat.key == keytype) { + /* repeated key being released */ + keyb.repeat.key = KBD_NONE; + keyb.repeat.wait = 0; + } + ret += 128; } - if (extend) KEYBOARD_AddBuffer(0xe0); + if (extend) KEYBOARD_AddBuffer(0xe0); KEYBOARD_AddBuffer(ret); } @@ -381,7 +384,7 @@ void KEYBOARD_Init(Section* sec) { keyb.command=CMD_NONE; keyb.p60changed=false; keyb.repeat.key=KBD_NONE; - keyb.repeat.pause=500; + keyb.repeat.pause=200; keyb.repeat.rate=33; keyb.repeat.wait=0; KEYBOARD_ClrBuffer();