Browse Source

Filtering out repeated keys for physical down press on MS-Windows.

David Piuva 3 years ago
parent
commit
5ef64b360c
1 changed files with 7 additions and 3 deletions
  1. 7 3
      Source/windowManagers/Win32Window.cpp

+ 7 - 3
Source/windowManagers/Win32Window.cpp

@@ -414,10 +414,14 @@ static LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam,
 		{
 		{
 			char character = wParam; // System specific key-code
 			char character = wParam; // System specific key-code
 			dsr::DsrKey dsrKey = getDsrKey(wParam); // Portable key-code
 			dsr::DsrKey dsrKey = getDsrKey(wParam); // Portable key-code
+			bool previouslyPressed = lParam & (1 << 30);
 			if (message == WM_KEYDOWN) {
 			if (message == WM_KEYDOWN) {
-				// Physical key down
-				parent->queueInputEvent(new dsr::KeyboardEvent(dsr::KeyboardEventType::KeyDown, character, dsrKey));
-				// First press typing
+				// If not repeated
+				if (!previouslyPressed) {
+					// Physical key down
+					parent->queueInputEvent(new dsr::KeyboardEvent(dsr::KeyboardEventType::KeyDown, character, dsrKey));
+				}
+				// Press typing with repeat
 				parent->queueInputEvent(new dsr::KeyboardEvent(dsr::KeyboardEventType::KeyType, character, dsrKey));
 				parent->queueInputEvent(new dsr::KeyboardEvent(dsr::KeyboardEventType::KeyType, character, dsrKey));
 			} else { // message == WM_KEYUP
 			} else { // message == WM_KEYUP
 				// Physical key up
 				// Physical key up