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:
parent
be1e6d17b9
commit
b091ec9a22
@ -166,7 +166,14 @@ Qt::WindowState QPlatformWindow::setWindowState(Qt::WindowState)
|
||||
/*!
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user