The input_server now removes all B_INPUT_METHOD_EVENTS when the target view is

not input method aware.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19147 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2006-10-29 19:12:29 +00:00
parent 2d6123a6ea
commit 158893b903

View File

@ -1518,7 +1518,7 @@ 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
@ -1526,11 +1526,13 @@ InputServer::_MethodizeEvents(EventList& events)
events.AddList(&fMethodQueue);
fMethodQueue.MakeEmpty();
}
int32 newCount = events.CountItems();
if (!fInputMethodAware) {
// special handling for non-input-method-aware views
int32 newCount = events.CountItems();
// we may add new events in this loop that don't need to be checked again
for (int32 i = 0; i < newCount; i++) {
BMessage* event = events.ItemAt(i);
@ -1539,6 +1541,8 @@ InputServer::_MethodizeEvents(EventList& events)
SERIAL_PRINT(("IME received\n"));
bool removeEvent = true;
int32 opcode;
if (event->FindInt32("be:opcode", &opcode) == B_OK) {
bool inlineOnly;
@ -1553,6 +1557,7 @@ InputServer::_MethodizeEvents(EventList& events)
&& event->FindMessage("be:translated", &translated) == B_OK) {
// translate event for the non-aware view
*event = translated;
removeEvent = false;
}
} else {
if (fInputMethodWindow == NULL
@ -1563,12 +1568,6 @@ InputServer::_MethodizeEvents(EventList& events)
EventList newEvents;
fInputMethodWindow->HandleInputMethodEvent(event, newEvents);
// replace event with new events (but don't scan them again
// for input method messages)
events.RemoveItemAt(i--);
delete event;
newCount--;
if (!newEvents.IsEmpty()) {
events.AddList(&newEvents);
opcode = B_INPUT_METHOD_STOPPED;
@ -1581,6 +1580,13 @@ InputServer::_MethodizeEvents(EventList& events)
}
}
}
if (removeEvent) {
// the inline/bottom window has eaten the event
events.RemoveItemAt(i--);
delete event;
newCount--;
}
}
}