From 7d272afa36d103d79d974066634532056588b579 Mon Sep 17 00:00:00 2001 From: Reece Dunn Date: Tue, 28 Oct 2008 07:54:43 +0000 Subject: [PATCH] uxtheme: SetWindowTheme should return E_HANDLE when the HWND it is passed is invalid. --- dlls/uxtheme/system.c | 18 ++++++++++++++---- dlls/uxtheme/tests/system.c | 11 ++++------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c index 3630a6d..527b3ee 100644 --- a/dlls/uxtheme/system.c +++ b/dlls/uxtheme/system.c @@ -691,11 +691,21 @@ HRESULT WINAPI SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName, HRESULT hr; TRACE("(%p,%s,%s)\n", hwnd, debugstr_w(pszSubAppName), debugstr_w(pszSubIdList)); + + if(!IsWindow(hwnd)) + { + hr = E_HANDLE; + goto error; + } + hr = UXTHEME_SetWindowProperty(hwnd, atSubAppName, pszSubAppName); - if(SUCCEEDED(hr)) - hr = UXTHEME_SetWindowProperty(hwnd, atSubIdList, pszSubIdList); - if(SUCCEEDED(hr)) - UXTHEME_broadcast_msg (hwnd, WM_THEMECHANGED); + if(FAILED(hr)) goto error; + + hr = UXTHEME_SetWindowProperty(hwnd, atSubIdList, pszSubIdList); + if(FAILED(hr)) goto error; + + UXTHEME_broadcast_msg (hwnd, WM_THEMECHANGED); +error: return hr; } diff --git a/dlls/uxtheme/tests/system.c b/dlls/uxtheme/tests/system.c index df20885..268c4da 100644 --- a/dlls/uxtheme/tests/system.c +++ b/dlls/uxtheme/tests/system.c @@ -151,13 +151,10 @@ static void test_SetWindowTheme(void) SetLastError(0xdeadbeef); hRes = pSetWindowTheme(NULL, NULL, NULL); - todo_wine - { - ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes); - ok( GetLastError() == 0xdeadbeef, - "Expected 0xdeadbeef, got 0x%08x\n", - GetLastError()); - } + ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes); + ok( GetLastError() == 0xdeadbeef, + "Expected 0xdeadbeef, got 0x%08x\n", + GetLastError()); /* Only do the bare minimum to get a valid hwnd */ hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL); -- 1.5.6.3