mirror of
https://review.haiku-os.org/haiku
synced 2025-02-22 21:48:35 +01:00
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:
parent
2d6123a6ea
commit
158893b903
@ -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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user