]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix auto-lower when the mouse moves onto a scrollbar on Haiku
authorPo Lu <luangruo@yahoo.com>
Thu, 24 Feb 2022 03:35:25 +0000 (03:35 +0000)
committerPo Lu <luangruo@yahoo.com>
Thu, 24 Feb 2022 03:35:25 +0000 (03:35 +0000)
* src/haiku_support.cc (MouseMoved):
(BView_inside_scroll_bar): New functions.
* src/haiku_support.h: Update prototypes.
* src/haikuterm.c (haiku_read_socket): Don't auto-lower if the
pointer left the view for a scroll bar.

src/haiku_support.cc
src/haiku_support.h
src/haikuterm.c

index 4f6a96568cb6fedb78c8a6acf8d350487f69185a..9aeb03c4c90ecff3025ff719ec3969206bd808fc 100644 (file)
@@ -1607,6 +1607,30 @@ public:
     haiku_write (SCROLL_BAR_DRAG_EVENT, &rq);
     BScrollBar::MouseUp (pt);
   }
+
+  void
+  MouseMoved (BPoint point, uint32 transit, const BMessage *msg)
+  {
+    struct haiku_menu_bar_left_event rq;
+    BPoint conv;
+
+    if (transit == B_EXITED_VIEW)
+      {
+       conv = ConvertToParent (point);
+
+       rq.x = std::lrint (conv.x);
+       rq.y = std::lrint (conv.y);
+       rq.window = this->Window ();
+
+       if (movement_locker.Lock ())
+         {
+           haiku_write (MENU_BAR_LEFT, &rq);
+           movement_locker.Unlock ();
+         }
+      }
+
+    BScrollBar::MouseMoved (point, transit, msg);
+  }
 };
 
 class EmacsTitleMenuItem : public BMenuItem
@@ -2266,6 +2290,23 @@ BView_forget_scroll_bar (void *view, int x, int y, int width, int height)
     }
 }
 
+bool
+BView_inside_scroll_bar (void *view, int x, int y)
+{
+  EmacsView *vw = (EmacsView *) view;
+  bool val;
+
+  if (vw->LockLooper ())
+    {
+      val = vw->sb_region.Contains (BPoint (x, y));
+      vw->UnlockLooper ();
+    }
+  else
+    val = false;
+
+  return val;
+}
+
 void
 BView_get_mouse (void *view, int *x, int *y)
 {
index ef433514fe78392478699421a7abf1d5d33f9cd7..1deb867c5f7f91ed82de772b2219fc6ec79fca4c 100644 (file)
@@ -666,6 +666,9 @@ extern "C"
   extern void
   BView_forget_scroll_bar (void *view, int x, int y, int width, int height);
 
+  extern bool
+  BView_inside_scroll_bar (void *view, int x, int y);
+
   extern void
   BView_get_mouse (void *view, int *x, int *y);
 
index c184501a2073a8ec2854b514bb8c47eb6b0cb24f..83330b5f638b3f00e79dd333b86539d73ac46cec 100644 (file)
@@ -2799,7 +2799,10 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
                    need_flush = 1;
                  }
 
-               if (f->auto_lower && !popup_activated_p)
+               if (f->auto_lower && !popup_activated_p
+                   /* Don't do this if the mouse entered a scroll bar.  */
+                   && !BView_inside_scroll_bar (FRAME_HAIKU_VIEW (f),
+                                                b->x, b->y))
                  {
                    /* If we're leaving towards the menu bar, don't
                       auto-lower here, and wait for a exit