Fix QWindowPrivate::globalPosition() for foreign windows

Use mapToGlobal(QPoint(0, 0)) when encountering a foreign window in
the parent hierarchy as it is not clear whether it is a native
top level or child. In the latter case, using the position is not
sufficient.

Task-number: QTBUG-43252
Change-Id: I5eebb1f0dbc6a0abbd968c5d383d3eded75c11a5
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
This commit is contained in:
Friedemann Kleint 2016-06-30 14:56:34 +02:00
parent 710ff392d9
commit fa2aef5eb8

View File

@ -125,8 +125,14 @@ public:
QPoint globalPosition() const {
Q_Q(const QWindow);
QPoint offset = q->position();
for (const QWindow *p = q->parent(); p; p = p->parent())
offset += p->position();
for (const QWindow *p = q->parent(); p; p = p->parent()) {
if (p->type() != Qt::ForeignWindow) {
offset += p->position();
} else { // QTBUG-43252, mapToGlobal() for foreign children.
offset += p->mapToGlobal(QPoint(0, 0));
break;
}
}
return offset;
}