diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-06-30 12:50:10 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-07-28 08:13:18 +0000 |
commit | f2ef587906062706e576e376e4c6481ab192f50d (patch) | |
tree | 48c2d3f623c6d681c9062137733cb93393bc0153 /src/plugins/platforms/windows | |
parent | 80c23042e4137dc21d92eab4db00e22f2446269b (diff) |
QWindow::fromWinId(): Return 0 when foreign window cannot be wrapped
Change window creation code in QWindow to not assert should
platform window creation fail for foreign windows.
Prototypically add check to the Windows QPA plugin.
[ChangeLog][Windows][Important Behavioral Changes] QWindow::fromWinId()
may return 0 when passing invalid window handles.
Task-number: QTBUG-41186
Change-Id: I936112607ec6e0838d36ac2a72aa88b869df5c23
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsintegration.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index 6142aac92e..debe6dd131 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -311,7 +311,12 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons } if (window->type() == Qt::ForeignWindow) { - QWindowsForeignWindow *result = new QWindowsForeignWindow(window, reinterpret_cast<HWND>(window->winId())); + const HWND hwnd = reinterpret_cast<HWND>(window->winId()); + if (!IsWindow(hwnd)) { + qWarning("Windows QPA: Invalid foreign window ID %p."); + return nullptr; + } + QWindowsForeignWindow *result = new QWindowsForeignWindow(window, hwnd); const QRect obtainedGeometry = result->geometry(); QScreen *screen = Q_NULLPTR; if (const QPlatformScreen *pScreen = result->screenForGeometry(obtainedGeometry)) |