From ac92eba3f600a81f9b44e3a1e29f65ead2086b91 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 19 Oct 2017 09:41:52 +0200 Subject: AxServerBase::create(): Improve handling of window creation failures Output error messages and return nullptr accordingly. Change-Id: I228a625d2f5b716c4068c7117987571a96990dc4 Reviewed-by: Andy Shaw (cherry picked from commit 687ed28dc2e17dac9ddcca20a83b717e3f7cd3f3) --- src/activeqt/control/qaxserverbase.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/activeqt/control/qaxserverbase.cpp b/src/activeqt/control/qaxserverbase.cpp index e3d1b2e..5aa5a71 100644 --- a/src/activeqt/control/qaxserverbase.cpp +++ b/src/activeqt/control/qaxserverbase.cpp @@ -1597,14 +1597,24 @@ HWND QAxServerBase::create(HWND hWndParent, RECT& rcPos) atom = RegisterClass(&wcTemp); } LeaveCriticalSection(&createWindowSection); - if (!atom && GetLastError() != ERROR_CLASS_ALREADY_EXISTS) - return 0; + if (!atom) { + const DWORD errorCode = GetLastError(); + if (errorCode != ERROR_CLASS_ALREADY_EXISTS) { + qErrnoWarning(int(errorCode), "%s: RegisterClass() failed", __FUNCTION__); + return Q_NULLPTR; + } + } Q_ASSERT(!m_hWnd); HWND hWnd = ::CreateWindow(reinterpret_cast(cn.utf16()), 0, WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, rcPos.left, rcPos.top, rcPos.right - rcPos.left, rcPos.bottom - rcPos.top, hWndParent, 0, hInst, this); + // m_hWnd is assigned in reponse to WM_CREATE + if (!hWnd) { + qErrnoWarning("%s: CreateWindow() failed", __FUNCTION__); + return Q_NULLPTR; + } Q_ASSERT(m_hWnd == hWnd); @@ -3780,7 +3790,10 @@ HRESULT QAxServerBase::internalActivate() if (!::IsChild(m_hWnd, ::GetFocus()) && qt.widget->focusPolicy() != Qt::NoFocus) ::SetFocus(m_hWnd); } else { - create(hwndParent, rcPos); + if (!create(hwndParent, rcPos)) { + qWarning("%s: Window creation failed.", __FUNCTION__); + return E_FAIL; + } } } -- cgit v1.2.3