From 93d0415885252965d56606173eb72cb86da98058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Fri, 11 Aug 2006 14:24:42 +0000 Subject: [PATCH] * If a BView::SetMouseEventMask() arrived in the app_server after the mouse buttons have already been released again, the temporary listener was still added. This fixes bug #727. * No longer removes temporary listeners if there are mouse buttons left pressed; ie. if you press two buttons at once, the listeners are now only removed after you've released them both. This is not only more logical, it's also how BeOS behaves :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18483 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/EventDispatcher.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/servers/app/EventDispatcher.cpp b/src/servers/app/EventDispatcher.cpp index fb93f0b85d..7e64142486 100644 --- a/src/servers/app/EventDispatcher.cpp +++ b/src/servers/app/EventDispatcher.cpp @@ -352,6 +352,11 @@ EventDispatcher::_AddListener(EventTarget& target, int32 token, { BAutolock _(this); + if (temporary && fLastButtons == 0) { + // only allow to add temporary listeners in case a buttons is pressed + return false; + } + if (!fTargets.HasItem(&target)) fTargets.AddItem(&target); @@ -746,7 +751,7 @@ EventDispatcher::_EventLoop() fNextLatestMouseMoved) == B_SKIP_MESSAGE) { // this is a work-around if the wrong B_MOUSE_UP // event is filtered out - if (event->what == B_MOUSE_UP) { + if (event->what == B_MOUSE_UP && event->FindInt32("buttons") == 0) { fSuspendFocus = false; _RemoveTemporaryListeners(); } @@ -874,7 +879,8 @@ EventDispatcher::_EventLoop() } } - if (event->what == B_MOUSE_UP) { + if (event->what == B_MOUSE_UP && fLastButtons == 0) { + // no buttons are pressed anymore fSuspendFocus = false; _RemoveTemporaryListeners(); if (fDraggingMessage)