[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master fe7c0798e8: Fix auto-lower when the mouse moves onto a scrollbar on Haiku,
Po Lu <=