.../qt/6.4.2/qtbase/src/widgets/widgets/qmenu.cpp | 27 ++++++++-------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/3rdparty/qt/6.4.2/qtbase/src/widgets/widgets/qmenu.cpp b/3rdparty/qt/6.4.2/qtbase/src/widgets/widgets/qmenu.cpp index ac474c9ba..8fdc782fa 100644 --- a/3rdparty/qt/6.4.2/qtbase/src/widgets/widgets/qmenu.cpp +++ b/3rdparty/qt/6.4.2/qtbase/src/widgets/widgets/qmenu.cpp @@ -1165,15 +1165,6 @@ void QMenuPrivate::scrollMenu(QAction *action, QMenuScroller::ScrollLocation loc const int newHeight = geom.height()-(newOffset-scroll->scrollOffset); if (newHeight > geom.height()) geom.setHeight(newHeight); - } else if (scroll->scrollFlags & newScrollFlags & QMenuScroller::ScrollDown) { - int newTop = geom.top() + (newOffset-scroll->scrollOffset); - if (newTop < desktopFrame+screen.top()) - newTop = desktopFrame+screen.top(); - if (newTop < geom.top()) { - geom.setTop(newTop); - newOffset = 0; - newScrollFlags &= ~QMenuScroller::ScrollUp; - } } if (geom.bottom() > screen.bottom() - desktopFrame) geom.setBottom(screen.bottom() - desktopFrame); @@ -2404,15 +2395,21 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po | QMenuPrivate::QMenuScroller::ScrollUp; scroll->scrollOffset = newY; newY = desktopFrame; + itemsDirty = 1; } pos.setY(newY); - if (scroll && scroll->scrollFlags != QMenuPrivate::QMenuScroller::ScrollNone - && !q->style()->styleHint(QStyle::SH_Menu_FillScreenWithScroll, nullptr, q)) { + if (scroll) { int below_height = above_height + scroll->scrollOffset; for (int i2 = i; i2 < actionRects.size(); i2++) below_height += actionRects.at(i2).height(); - size.setHeight(below_height); + if (scroll->scrollFlags & QMenuPrivate::QMenuScroller::ScrollUp) + size.setHeight(below_height); + else if (newY + below_height > screen.height()) { + scroll->scrollFlags = scroll->scrollFlags + | QMenuPrivate::QMenuScroller::ScrollDown; + size.setHeight(screen.height() - newY - desktopFrame - 1); + } } break; } else { @@ -2457,11 +2454,7 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po if (pos.y() < screen.top() + desktopFrame) pos.setY(screen.top() + desktopFrame); if (pos.y() + menuSizeHint.height() - 1 > screen.bottom() - desktopFrame) { - if (scroll) { - scroll->scrollFlags |= uint(QMenuPrivate::QMenuScroller::ScrollDown); - int y = qMax(screen.y(),pos.y()); - size.setHeight(screen.bottom() - (desktopFrame * 2) - y); - } else { + if (!scroll) { // Too big for screen, bias to see bottom of menu (for some reason) pos.setY(screen.bottom() - size.height() + 1); }