Avoid using 0 as the default winId in QPlatformWindow.

When the platform plugin does not reimplement QPlatformWindow::winId()
to return a non-zero value, the default implementation provides a WId
of 0. This breaks various scenarios with QWidgets which, for example
in nativeParentWidget(), rely on internalWinId() being non-zero for
TLWs.

As a result, apps like collidingmice will crash with the 'minimal'
platform plugin when they try to do markDirtyOnScreen for the graphics
view's viewport widget because viewport()->nativeParentWidget()
unexpectedly returns null, even though it should return the
QGraphicsView.

The patch makes the default value WId(1) in order to to avoid this.

Change-Id: Iafef2e510e32b5610b8cef742313e9119ed64963
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
Laszlo Agocs 2011-10-14 17:11:06 +03:00 committed by Qt by Nokia
parent be1e6d17b9
commit b091ec9a22

View File

@ -166,7 +166,14 @@ Qt::WindowState QPlatformWindow::setWindowState(Qt::WindowState)
/*! /*!
Reimplement in subclasses to return a handle to the native window Reimplement in subclasses to return a handle to the native window
*/ */
WId QPlatformWindow::winId() const { return WId(0); } WId QPlatformWindow::winId() const
{
// Return anything but 0. Returning 0 would cause havoc with QWidgets on
// very basic platform plugins that do not reimplement this function,
// because the top-level widget's internalWinId() would always be 0 which
// would mean top-levels are never treated as native.
return WId(1);
}
/*! /*!
This function is called to enable native child window in QPA. It is common not to support this This function is called to enable native child window in QPA. It is common not to support this