diff options
author | Janne Anttila <janne.anttila@digia.com> | 2009-11-26 12:50:37 (GMT) |
---|---|---|
committer | Janne Anttila <janne.anttila@digia.com> | 2009-11-26 12:51:18 (GMT) |
commit | 4160adc44a512a97d333227cfdde0648fb4132a9 (patch) | |
tree | f1383534ca0a716bbedf520691b99325891edba1 /src | |
parent | b56dcd0f2093c35b1d638eebe38d113e8d59ea0c (diff) | |
download | Qt-4160adc44a512a97d333227cfdde0648fb4132a9.zip Qt-4160adc44a512a97d333227cfdde0648fb4132a9.tar.gz Qt-4160adc44a512a97d333227cfdde0648fb4132a9.tar.bz2 |
Fixed context menu placement partially outside screen bug in Symbian.
In style demo example when spinbox was long tapped, the context menu
was placed partially outside screen. The preconditions for bug were:
1. Tap position is near screen right edge
2. Minimum space width requested by context menu is > sreen width
The new (simplified) logic is as follows:
1. If menus right edge in requested position is outside screen right
edge, the menu is moved to left enough to fit on screen. i.e.
if (tap position + menu width > screen right )
x = screen right - menu width
2. As a result of above statement the x position might go outside left
boundary of screen. This is fixed by next statements
if( x < screen left )
x = screen left
Task-number: QTBUG-6164
Reviewed-by: Alessandro Portale
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/widgets/qmenu.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index 761a060..2e27226 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -229,7 +229,7 @@ void QMenuPrivate::updateActionRects() const Q_Q(const QMenu); if (!itemsDirty) return; - + q->ensurePolished(); //let's reinitialize the buffer @@ -292,7 +292,7 @@ void QMenuPrivate::updateActionRects() const if (!action->isVisible() || (collapsibleSeparators && previousWasSeparator && action->isSeparator())) continue; // we continue, this action will get an empty QRect - + previousWasSeparator = action->isSeparator(); //let the style modify the above size.. @@ -1139,7 +1139,7 @@ void QMenuPrivate::_q_actionTriggered() //we check the parent hierarchy QList< QPointer<QWidget> > list; for(QWidget *widget = q->parentWidget(); widget; ) { - if (qobject_cast<QMenu*>(widget) + if (qobject_cast<QMenu*>(widget) #ifndef QT_NO_MENUBAR || qobject_cast<QMenuBar*>(widget) #endif @@ -1306,7 +1306,7 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) the addAction(), addActions() and insertAction() functions. An action is represented vertically and rendered by QStyle. In addition, actions can have a text label, an optional icon drawn on the very left side, - and shortcut key sequence such as "Ctrl+X". + and shortcut key sequence such as "Ctrl+X". The existing actions held by a menu can be found with actions(). @@ -1906,9 +1906,9 @@ void QMenu::popup(const QPoint &p, QAction *atAction) pos.setX(qMax(p.x()-size.width(), screen.right()-desktopFrame-size.width()+1)); } else { if (pos.x()+size.width()-1 > screen.right()-desktopFrame) - pos.setX(qMin(p.x()+size.width(), screen.right()-desktopFrame-size.width()+1)); + pos.setX(screen.right()-desktopFrame-size.width()+1); if (pos.x() < screen.left()+desktopFrame) - pos.setX(qMax(p.x(), screen.left() + desktopFrame)); + pos.setX(screen.left() + desktopFrame); } if (pos.y() + size.height() - 1 > screen.bottom() - desktopFrame) { if(snapToMouse) |