Browse Source

Filtering away auto-repeated key presses for non-printable keys.

David Piuva 4 years ago
parent
commit
f0540c75ec
1 changed files with 4 additions and 2 deletions
  1. 4 2
      Source/windowManagers/X11Window.cpp

+ 4 - 2
Source/windowManagers/X11Window.cpp

@@ -486,12 +486,14 @@ void X11Window::prefetchEvents() {
 				} else if (currentEvent.type == KeyPress || currentEvent.type == KeyRelease) {
 					// Key down/up
 					uint32_t character = getNativeCharacterCode(currentEvent);
-					dsr::DsrKey dsrKey = getDsrKey(XLookupKeysym(&currentEvent.xkey, 0));
+					KeySym nativeKey = XLookupKeysym(&currentEvent.xkey, 0);
+					dsr::DsrKey dsrKey = getDsrKey(nativeKey);
+					KeySym nextNativeKey = hasNextEvent ? XLookupKeysym(&nextEvent.xkey, 0) : 0;
 					// Distinguish between fake and physical repeats using time stamps
 					if (hasNextEvent
 					 && currentEvent.type == KeyRelease && nextEvent.type == KeyPress
 					 && currentEvent.xkey.time == nextEvent.xkey.time
-					 && character == getNativeCharacterCode(nextEvent)) {
+					 && nativeKey == nextNativeKey) {
 						// Repeated typing
 						this->queueInputEvent(new dsr::KeyboardEvent(dsr::KeyboardEventType::KeyType, character, dsrKey));
 						// Skip next event