From 36077365d1937b14e83635aff89fce55602cb9e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 11 Feb 2006 15:11:28 +0000 Subject: [PATCH] also copy modifiers and state in SanitizeEvents as we need them there change MethodizeEvents to actually handle the method queue git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16347 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/input/InputServer.cpp | 40 ++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/servers/input/InputServer.cpp b/src/servers/input/InputServer.cpp index 0f400eca13..04f476a77a 100644 --- a/src/servers/input/InputServer.cpp +++ b/src/servers/input/InputServer.cpp @@ -1445,6 +1445,25 @@ InputServer::_SanitizeEvents(EventList& events) } case B_KEY_DOWN: case B_UNMAPPED_KEY_DOWN: + // update or add modifiers + uint32 modifiers; + if (event->FindInt32("modifiers", (int32*)&modifiers) == B_OK) + fKeyInfo.modifiers = modifiers; + else + event->AddInt32("modifiers", fKeyInfo.modifiers); + + // update or add key states + const uint8 *data; + ssize_t size; + if (event->FindData("states", B_UINT8_TYPE, + (const void**)&data, &size) == B_OK) { + PRINT(("updated keyinfo\n")); + if (size == sizeof(fKeyInfo.key_states)) + memcpy(fKeyInfo.key_states, data, size); + } else { + event->AddData("states", B_UINT8_TYPE, fKeyInfo.key_states, + sizeof(fKeyInfo.key_states)); + } if (fActiveMethod == NULL) break; @@ -1492,10 +1511,20 @@ InputServer::_MethodizeEvents(EventList& events) for (int32 i = 0; i < count;) { _FilterEvent(fActiveMethod, events, i, count); } + + { + // move the method events into the event queue - they are not + // "methodized" either + BAutolock _(fEventQueueLock); + events.AddList(&fMethodQueue); + fMethodQueue.MakeEmpty(); + } + + int32 newCount = events.CountItems(); if (!fInputMethodAware) { // special handling for non-input-method-aware views - for (int32 i = 0; i < count; i++) { + for (int32 i = count; i < newCount; i++) { BMessage* event = events.ItemAt(i); if (event->what != B_INPUT_METHOD_EVENT) @@ -1530,18 +1559,12 @@ InputServer::_MethodizeEvents(EventList& events) events.AddList(&newEvents, i); i += newEvents.CountItems() - 1; - count = events.CountItems(); + newCount = events.CountItems(); } } } } - // move the method events into the event queue - they are not - // "methodized" either - BAutolock _(fEventQueueLock); - events.AddList(&fMethodQueue); - fMethodQueue.MakeEmpty(); - return events.CountItems() > 0; } @@ -1678,7 +1701,6 @@ InputServer::_DispatchEvent(BMessage* event) sizeof(fKeyInfo.key_states)); } - PRINT(("keyinfo %ld %ld\n", size, (ssize_t)sizeof(fKeyInfo.key_states))); break; }