* 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
This commit is contained in:
parent
a5210ab17d
commit
93d0415885
|
@ -352,6 +352,11 @@ EventDispatcher::_AddListener(EventTarget& target, int32 token,
|
||||||
{
|
{
|
||||||
BAutolock _(this);
|
BAutolock _(this);
|
||||||
|
|
||||||
|
if (temporary && fLastButtons == 0) {
|
||||||
|
// only allow to add temporary listeners in case a buttons is pressed
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!fTargets.HasItem(&target))
|
if (!fTargets.HasItem(&target))
|
||||||
fTargets.AddItem(&target);
|
fTargets.AddItem(&target);
|
||||||
|
|
||||||
|
@ -746,7 +751,7 @@ EventDispatcher::_EventLoop()
|
||||||
fNextLatestMouseMoved) == B_SKIP_MESSAGE) {
|
fNextLatestMouseMoved) == B_SKIP_MESSAGE) {
|
||||||
// this is a work-around if the wrong B_MOUSE_UP
|
// this is a work-around if the wrong B_MOUSE_UP
|
||||||
// event is filtered out
|
// event is filtered out
|
||||||
if (event->what == B_MOUSE_UP) {
|
if (event->what == B_MOUSE_UP && event->FindInt32("buttons") == 0) {
|
||||||
fSuspendFocus = false;
|
fSuspendFocus = false;
|
||||||
_RemoveTemporaryListeners();
|
_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;
|
fSuspendFocus = false;
|
||||||
_RemoveTemporaryListeners();
|
_RemoveTemporaryListeners();
|
||||||
if (fDraggingMessage)
|
if (fDraggingMessage)
|
||||||
|
|
Loading…
Reference in New Issue