diff options
-rw-r--r-- | src/gui/widgets/qmenu.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 6e8c61c..77b6b21 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -1823,6 +1823,8 @@ void QMenu::popup(const QPoint &p, QAction *atAction) Q_D(QMenu); #ifndef Q_OS_SYMBIAN if (d->scroll) { // reset scroll state from last popup + if (d->scroll->scrollOffset) + d->itemsDirty = 1; // sizeHint will be incorrect if there is previous scroll d->scroll->scrollOffset = 0; d->scroll->scrollFlags = QMenuPrivate::QMenuScroller::ScrollNone; } @@ -1922,6 +1924,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction) d->mousePopupPos = mouse; const bool snapToMouse = (QRect(p.x() - 3, p.y() - 3, 6, 6).contains(mouse)); + const QSize menuSize(sizeHint()); if (adjustToDesktop) { // handle popup falling "off screen" if (isRightToLeft()) { @@ -1955,7 +1958,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction) if (pos.y() < screen.top() + desktopFrame) pos.setY(screen.top() + desktopFrame); - if (pos.y() + size.height() - 1 > screen.bottom() - desktopFrame) { + if (pos.y() + menuSize.height() - 1 > screen.bottom() - desktopFrame) { if (d->scroll) { d->scroll->scrollFlags |= uint(QMenuPrivate::QMenuScroller::ScrollDown); int y = qMax(screen.y(),pos.y()); @@ -1967,7 +1970,6 @@ void QMenu::popup(const QPoint &p, QAction *atAction) } } const int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, 0, this); - const QSize menuSize(sizeHint()); QMenu *caused = qobject_cast<QMenu*>(d_func()->causedPopup.widget); if (caused && caused->geometry().width() + menuSize.width() + subMenuOffset < screen.width()) { QRect parentActionRect(caused->d_func()->actionRect(caused->d_func()->currentAction)); |