Fix QMenu position on a multi-display system
Ensure that the point QPushButtonPrivate::adjustedMenuPosition() returns is on the same screen with the button Task-number: QTBUG-57689 Change-Id: If611d41fff4c72ae16369fd95bc5159f398894e9 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
parent
00ad7bd5a4
commit
6af07c57f6
@ -607,20 +607,22 @@ QPoint QPushButtonPrivate::adjustedMenuPosition()
|
|||||||
QPoint globalPos = q->mapToGlobal(rect.topLeft());
|
QPoint globalPos = q->mapToGlobal(rect.topLeft());
|
||||||
int x = globalPos.x();
|
int x = globalPos.x();
|
||||||
int y = globalPos.y();
|
int y = globalPos.y();
|
||||||
|
const QRect availableGeometry = QApplication::desktop()->availableGeometry(q);
|
||||||
if (horizontal) {
|
if (horizontal) {
|
||||||
if (globalPos.y() + rect.height() + menuSize.height() <= QApplication::desktop()->availableGeometry(q).height()) {
|
if (globalPos.y() + rect.height() + menuSize.height() <= availableGeometry.bottom()) {
|
||||||
y += rect.height();
|
y += rect.height();
|
||||||
} else {
|
} else if (globalPos.y() - menuSize.height() >= availableGeometry.y()) {
|
||||||
y -= menuSize.height();
|
y -= menuSize.height();
|
||||||
}
|
}
|
||||||
if (q->layoutDirection() == Qt::RightToLeft)
|
if (q->layoutDirection() == Qt::RightToLeft)
|
||||||
x += rect.width() - menuSize.width();
|
x += rect.width() - menuSize.width();
|
||||||
} else {
|
} else {
|
||||||
if (globalPos.x() + rect.width() + menu->sizeHint().width() <= QApplication::desktop()->availableGeometry(q).width())
|
if (globalPos.x() + rect.width() + menu->sizeHint().width() <= availableGeometry.right()) {
|
||||||
x += rect.width();
|
x += rect.width();
|
||||||
else
|
} else if (globalPos.x() - menuSize.width() >= availableGeometry.x()) {
|
||||||
x -= menuSize.width();
|
x -= menuSize.width();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return QPoint(x,y);
|
return QPoint(x,y);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user