emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master a2768c2f74: Ignore irrelevant button events on Haiku scroll bars


From: Po Lu
Subject: master a2768c2f74: Ignore irrelevant button events on Haiku scroll bars
Date: Sat, 26 Feb 2022 07:27:45 -0500 (EST)

branch: master
commit a2768c2f745eb4203a006ad86d6cccd160c7a3c8
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    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 fe91986e8c..12990b3378 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]