diff --git a/src/servers/app/EventDispatcher.cpp b/src/servers/app/EventDispatcher.cpp index 1d96b3a67c..fdcaa1e4b0 100644 --- a/src/servers/app/EventDispatcher.cpp +++ b/src/servers/app/EventDispatcher.cpp @@ -231,6 +231,9 @@ EventDispatcher::_AddListener(const BMessenger& messenger, int32 token, if (events == 0) return false; + ETRACE(("events: add listener: token %ld, events = %ld, options = %ld, %s\n", + token, events, options, temporary ? "temporary" : "permanent")); + // we need a new target target = new (std::nothrow) event_target; @@ -277,6 +280,9 @@ EventDispatcher::_RemoveTemporaryListeners() if (target->events == 0) { // this is only a temporary target fListeners.RemoveItemAt(i); + + ETRACE(("events: remove temp. listener: token %ld, events = %ld, options = %ld\n", + target->token, target->temporary_events, target->temporary_options)); if ((target->temporary_events & B_POINTER_EVENTS) != 0 && fHasFocus && fFocus == target->messenger) { @@ -285,6 +291,9 @@ EventDispatcher::_RemoveTemporaryListeners() } delete target; + } else { + target->temporary_events = 0; + target->temporary_options = 0; } } } @@ -310,6 +319,7 @@ void EventDispatcher::RemoveListener(const BMessenger& messenger, int32 token) { BAutolock _(this); + ETRACE(("events: remove listener token %ld\n", token)); int32 index; event_target* target = _FindListener(messenger, token, &index); @@ -552,8 +562,10 @@ EventDispatcher::_EventLoop() // supposed to fall through default: - if (fHasFocus && !fSuspendFocus) + if (fHasFocus && !fSuspendFocus) { + addedTokens |= _AddTokens(event, fFocusTokens); _SendMessage(fFocus, event, kStandardImportance); + } break; } diff --git a/src/servers/app/EventStream.cpp b/src/servers/app/EventStream.cpp index e93e0e7a33..1fa4b1e1bc 100644 --- a/src/servers/app/EventStream.cpp +++ b/src/servers/app/EventStream.cpp @@ -15,6 +15,7 @@ #include #include +#include EventStream::EventStream() @@ -226,8 +227,9 @@ InputServerStream::_MessageFromPort(BMessage** _message, bigtime_t timeout) delete[] buffer; if (status != B_OK) { - printf("Unflatten event failed: port message code was: %ld - %c%c%c%c\n", - code, (int8)(code >> 24), (int8)(code >> 16), (int8)(code >> 8), (int8)code); + printf("Unflatten event failed: %s, port message code was: %ld - %c%c%c%c\n", + strerror(status), code, (int8)(code >> 24), (int8)(code >> 16), + (int8)(code >> 8), (int8)code); delete message; return status; } diff --git a/src/servers/app/EventStream.h b/src/servers/app/EventStream.h index 734301074d..5e3a8f552f 100644 --- a/src/servers/app/EventStream.h +++ b/src/servers/app/EventStream.h @@ -11,6 +11,8 @@ #include #include +#include + struct shared_cursor;