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:
@@ -1518,7 +1518,7 @@ InputServer::_MethodizeEvents(EventList& events)
|
|||||||
for (int32 i = 0; i < count;) {
|
for (int32 i = 0; i < count;) {
|
||||||
_FilterEvent(fActiveMethod, events, i, count);
|
_FilterEvent(fActiveMethod, events, i, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
// move the method events into the event queue - they are not
|
// move the method events into the event queue - they are not
|
||||||
// "methodized" either
|
// "methodized" either
|
||||||
@@ -1526,11 +1526,13 @@ InputServer::_MethodizeEvents(EventList& events)
|
|||||||
events.AddList(&fMethodQueue);
|
events.AddList(&fMethodQueue);
|
||||||
fMethodQueue.MakeEmpty();
|
fMethodQueue.MakeEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32 newCount = events.CountItems();
|
|
||||||
|
|
||||||
if (!fInputMethodAware) {
|
if (!fInputMethodAware) {
|
||||||
// special handling for non-input-method-aware views
|
// 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++) {
|
for (int32 i = 0; i < newCount; i++) {
|
||||||
BMessage* event = events.ItemAt(i);
|
BMessage* event = events.ItemAt(i);
|
||||||
|
|
||||||
@@ -1539,6 +1541,8 @@ InputServer::_MethodizeEvents(EventList& events)
|
|||||||
|
|
||||||
SERIAL_PRINT(("IME received\n"));
|
SERIAL_PRINT(("IME received\n"));
|
||||||
|
|
||||||
|
bool removeEvent = true;
|
||||||
|
|
||||||
int32 opcode;
|
int32 opcode;
|
||||||
if (event->FindInt32("be:opcode", &opcode) == B_OK) {
|
if (event->FindInt32("be:opcode", &opcode) == B_OK) {
|
||||||
bool inlineOnly;
|
bool inlineOnly;
|
||||||
@@ -1553,6 +1557,7 @@ InputServer::_MethodizeEvents(EventList& events)
|
|||||||
&& event->FindMessage("be:translated", &translated) == B_OK) {
|
&& event->FindMessage("be:translated", &translated) == B_OK) {
|
||||||
// translate event for the non-aware view
|
// translate event for the non-aware view
|
||||||
*event = translated;
|
*event = translated;
|
||||||
|
removeEvent = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (fInputMethodWindow == NULL
|
if (fInputMethodWindow == NULL
|
||||||
@@ -1563,12 +1568,6 @@ InputServer::_MethodizeEvents(EventList& events)
|
|||||||
EventList newEvents;
|
EventList newEvents;
|
||||||
fInputMethodWindow->HandleInputMethodEvent(event, 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()) {
|
if (!newEvents.IsEmpty()) {
|
||||||
events.AddList(&newEvents);
|
events.AddList(&newEvents);
|
||||||
opcode = B_INPUT_METHOD_STOPPED;
|
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--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user