From X512 <danger_mail@xxxxxxx>:
X512 has uploaded this change for review. (
https://review.haiku-os.org/c/haiku/+/2310 ;)
Change subject: Interface Kit: fix menu resizing when scrolling is enabled
......................................................................
Interface Kit: fix menu resizing when scrolling is enabled
BMenuWindow::Attach/DetachScrollers can be called when scrollers are already
attached/detached and it should handle this case properly.
Call BMenuWindow::DetachScrollers when scrolling is not needed anymore.
Fixes #8513.
Change-Id: I1f70b63d75106cf33ab1f72d34e221a54b45a75e
---
M src/kits/interface/Menu.cpp
M src/kits/interface/MenuWindow.cpp
2 files changed, 28 insertions(+), 7 deletions(-)
git pull ssh://git.haiku-os.org:22/haiku refs/changes/10/2310/1
diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp
index 079918b..e2c02f7 100644
--- a/src/kits/interface/Menu.cpp
+++ b/src/kits/interface/Menu.cpp
@@ -2931,6 +2931,9 @@
if (fItems.CountItems() > 0) {
if (!scroll) {
+ if (fLayout == B_ITEMS_IN_COLUMN)
+ window->DetachScrollers();
+
window->ResizeTo(Bounds().Width(), Bounds().Height());
} else {
BScreen screen(window);
diff --git a/src/kits/interface/MenuWindow.cpp
b/src/kits/interface/MenuWindow.cpp
index e8e5eeb..56cb493 100644
--- a/src/kits/interface/MenuWindow.cpp
+++ b/src/kits/interface/MenuWindow.cpp
@@ -76,7 +76,8 @@
BMenuScroller::BMenuScroller(BRect frame)
:
- BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS),
+ BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS
+ | B_FULL_UPDATE_ON_RESIZE),
fEnabled(false)
{
SetViewUIColor(B_MENU_BACKGROUND_COLOR);
@@ -298,6 +299,17 @@
fMenu->MakeFocus(true);
BRect frame = Bounds();
+ float newLimit = fMenu->Bounds().Height()
+ - (frame.Height() - 2 * kScrollerHeight);
+
+ // Check that scrollers are already attached.
+ if (fUpperScroller == NULL)
+ fValue = 0;
+ else {
+ if (fValue > newLimit)
+ _ScrollBy(newLimit - fValue);
+ }
+ fLimit = newLimit;
if (fUpperScroller == NULL) {
fUpperScroller = new UpperScroller(
@@ -312,14 +324,15 @@
AddChild(fLowerScroller);
}
- fUpperScroller->SetEnabled(false);
- fLowerScroller->SetEnabled(true);
+ fUpperScroller->ResizeTo(frame.right, kScrollerHeight - 1);
+ fLowerScroller->ResizeTo(frame.right, kScrollerHeight - 1);
- fMenuFrame->ResizeBy(0, -2 * kScrollerHeight);
- fMenuFrame->MoveBy(0, kScrollerHeight);
+ fUpperScroller->SetEnabled(fValue > 0);
+ fLowerScroller->SetEnabled(fValue < fLimit);
- fValue = 0;
- fLimit = fMenu->Bounds().Height() - (frame.Height() - 2 *
kScrollerHeight);
+ fMenuFrame->ResizeTo(frame.Width(), frame.Height() - 2 *
kScrollerHeight);
+ fMenuFrame->MoveTo(0, kScrollerHeight);
+
}
@@ -342,6 +355,11 @@
delete fUpperScroller;
fUpperScroller = NULL;
}
+
+ BRect frame = Bounds();
+
+ fMenuFrame->ResizeTo(frame.Width(), frame.Height());
+ fMenuFrame->MoveTo(0, 0);
}
--
To view, visit https://review.haiku-os.org/c/haiku/+/2310
To unsubscribe, or for help writing mail filters, visit
https://review.haiku-os.org/settings
Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I1f70b63d75106cf33ab1f72d34e221a54b45a75e
Gerrit-Change-Number: 2310
Gerrit-PatchSet: 1
Gerrit-Owner: X512 <danger_mail@xxxxxxx>
Gerrit-MessageType: newchange