summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2017-10-19 09:41:52 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2017-10-20 07:26:28 +0000
commitac92eba3f600a81f9b44e3a1e29f65ead2086b91 (patch)
tree4a5aa17b310d153105e6cce702dd181a888c74c4
parent3d23871b0d5cef73d0f1a7a1635a27e5d36b84b9 (diff)
AxServerBase::create(): Improve handling of window creation failures
Output error messages and return nullptr accordingly. Change-Id: I228a625d2f5b716c4068c7117987571a96990dc4 Reviewed-by: Andy Shaw <andy.shaw@qt.io> (cherry picked from commit 687ed28dc2e17dac9ddcca20a83b717e3f7cd3f3)
-rw-r--r--src/activeqt/control/qaxserverbase.cpp19
1 files 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<const wchar_t *>(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;
+ }
}
}