From a2768c2f745eb4203a006ad86d6cccd160c7a3c8 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 26 Feb 2022 12:25:51 +0000 Subject: [PATCH] Ignore irrelevant button events on Haiku scroll bars * src/haiku_support.cc (MouseDown): Ignore if there are too many buttons pressed. --- src/haiku_support.cc | 60 ++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/src/haiku_support.cc b/src/haiku_support.cc index fe91986e8c4..12990b3378d 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -1684,33 +1684,51 @@ public: struct haiku_scroll_bar_drag_event rq; struct haiku_scroll_bar_part_event part; BRegion r; + BLooper *looper; + BMessage *message; + int32 buttons; - r = ButtonRegionFor (HAIKU_SCROLL_BAR_UP_BUTTON); + looper = Looper (); - if (r.Contains (pt)) + if (!looper) + GetMouse (&pt, (uint32 *) &buttons, false); + else { - part.scroll_bar = this; - part.window = Window (); - part.part = HAIKU_SCROLL_BAR_UP_BUTTON; - dragging = 1; - current_part = HAIKU_SCROLL_BAR_UP_BUTTON; - - haiku_write (SCROLL_BAR_PART_EVENT, &part); - goto out; - } + message = looper->CurrentMessage (); - r = ButtonRegionFor (HAIKU_SCROLL_BAR_DOWN_BUTTON); + if (!message || message->FindInt32 ("buttons", &buttons) != B_OK) + GetMouse (&pt, (uint32 *) &buttons, false); + } - if (r.Contains (pt)) + if (buttons == B_PRIMARY_MOUSE_BUTTON) { - part.scroll_bar = this; - part.window = Window (); - part.part = HAIKU_SCROLL_BAR_DOWN_BUTTON; - dragging = 1; - current_part = HAIKU_SCROLL_BAR_DOWN_BUTTON; - - haiku_write (SCROLL_BAR_PART_EVENT, &part); - goto out; + r = ButtonRegionFor (HAIKU_SCROLL_BAR_UP_BUTTON); + + if (r.Contains (pt)) + { + part.scroll_bar = this; + part.window = Window (); + part.part = HAIKU_SCROLL_BAR_UP_BUTTON; + dragging = 1; + current_part = HAIKU_SCROLL_BAR_UP_BUTTON; + + haiku_write (SCROLL_BAR_PART_EVENT, &part); + goto out; + } + + r = ButtonRegionFor (HAIKU_SCROLL_BAR_DOWN_BUTTON); + + if (r.Contains (pt)) + { + part.scroll_bar = this; + part.window = Window (); + part.part = HAIKU_SCROLL_BAR_DOWN_BUTTON; + dragging = 1; + current_part = HAIKU_SCROLL_BAR_DOWN_BUTTON; + + haiku_write (SCROLL_BAR_PART_EVENT, &part); + goto out; + } } rq.dragging_p = 1; -- 2.39.5