QNX: Fixed window positioning

Child windows have to keep their relative position when the parent is
moved.

Change-Id: I7d24d67578c9aaa332136d18ad9b478b120e4696
Reviewed-by: Roger Maclean <rmaclean@qnx.com>
Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
This commit is contained in:
Bernd Weimer 2014-01-15 11:09:33 +01:00 committed by The Qt Project
parent 8a9bd001c9
commit 9d4d18a3a8
2 changed files with 4 additions and 36 deletions

View File

@ -130,7 +130,7 @@ void QQnxWindow::setGeometry(const QRect &rect)
if (screen()->rootWindow() == this) //If this is the root window, it has to be shown fullscreen
newGeometry = screen()->geometry();
const QRect oldGeometry = setGeometryHelper(newGeometry);
setGeometryHelper(newGeometry);
// Send a geometry change event to Qt (triggers resizeEvent() in QWindow/QWidget).
@ -140,23 +140,15 @@ void QQnxWindow::setGeometry(const QRect &rect)
QWindowSystemInterface::handleGeometryChange(window(), newGeometry);
QWindowSystemInterface::handleExposeEvent(window(), newGeometry);
QWindowSystemInterface::setSynchronousWindowsSystemEvents(false);
// Now move all children.
if (!oldGeometry.isEmpty()) {
const QPoint offset = newGeometry.topLeft() - oldGeometry.topLeft();
Q_FOREACH (QQnxWindow *childWindow, m_childWindows)
childWindow->setOffset(offset);
}
}
QRect QQnxWindow::setGeometryHelper(const QRect &rect)
void QQnxWindow::setGeometryHelper(const QRect &rect)
{
qWindowDebug() << Q_FUNC_INFO << "window =" << window()
<< ", (" << rect.x() << "," << rect.y()
<< "," << rect.width() << "," << rect.height() << ")";
// Call base class method
QRect oldGeometry = QPlatformWindow::geometry();
QPlatformWindow::setGeometry(rect);
// Set window geometry equal to widget geometry
@ -181,30 +173,7 @@ QRect QQnxWindow::setGeometryHelper(const QRect &rect)
if (result != 0)
qFatal("QQnxWindow: failed to set window source size, errno=%d", errno);
return oldGeometry;
}
void QQnxWindow::setOffset(const QPoint &offset)
{
qWindowDebug() << Q_FUNC_INFO << "window =" << window();
// Move self and then children.
QRect newGeometry = geometry();
newGeometry.translate(offset);
// Call the base class
QPlatformWindow::setGeometry(newGeometry);
int val[2];
errno = 0;
val[0] = newGeometry.x();
val[1] = newGeometry.y();
int result = screen_set_window_property_iv(m_window, SCREEN_PROPERTY_POSITION, val);
if (result != 0)
qFatal("QQnxWindow: failed to set window position, errno=%d", errno);
Q_FOREACH (QQnxWindow *childWindow, m_childWindows)
childWindow->setOffset(offset);
screen_flush_context(m_screenContext, 0);
}
void QQnxWindow::setVisible(bool visible)

View File

@ -125,9 +125,8 @@ protected:
private:
void createWindowGroup();
QRect setGeometryHelper(const QRect &rect);
void setGeometryHelper(const QRect &rect);
void removeFromParent();
void setOffset(const QPoint &setOffset);
void updateVisibility(bool parentVisible);
void updateZorder(int &topZorder);
void updateZorder(screen_window_t window, int &zOrder);