emacs-diffs
[Top][All Lists]
Advanced

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

master fe7c0798e8: Fix auto-lower when the mouse moves onto a scrollbar


From: Po Lu
Subject: master fe7c0798e8: Fix auto-lower when the mouse moves onto a scrollbar on Haiku
Date: Wed, 23 Feb 2022 22:36:14 -0500 (EST)

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

    Fix auto-lower when the mouse moves onto a scrollbar on Haiku
    
    * 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 | 41 +++++++++++++++++++++++++++++++++++++++++
 src/haiku_support.h  |  3 +++
 src/haikuterm.c      |  5 ++++-
 3 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index 4f6a96568c..9aeb03c4c9 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -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)
 {
diff --git a/src/haiku_support.h b/src/haiku_support.h
index ef433514fe..1deb867c5f 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -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);
 
diff --git a/src/haikuterm.c b/src/haikuterm.c
index c184501a20..83330b5f63 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -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



reply via email to

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