Zhiyi Zhang : user32: Return FALSE for invalid handle in IsWindowEnabled() .
Alexandre Julliard
julliard at winehq.org
Tue Jul 17 15:52:37 CDT 2018
Module: wine
Branch: master
Commit: bfe6826a16f5997a8ee119b191874ad077c3d4e7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=bfe6826a16f5997a8ee119b191874ad077c3d4e7
Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date: Mon Jul 16 11:27:47 2018 +0800
user32: Return FALSE for invalid handle in IsWindowEnabled().
GetWindowLong() returns 0 if passed an invalid window handle,
causing IsWindowEnabled() to incorrectly report TRUE.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/win.c | 22 ++++++++++++++++++++++
dlls/user32/win.c | 8 ++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index d7f8843..94eff5e 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -10700,6 +10700,27 @@ static void test_destroy_quit(void)
CloseHandle( thread1 );
}
+static void test_IsWindowEnabled(void)
+{
+ BOOL ret;
+ HWND hwnd;
+
+ ret = IsWindowEnabled(NULL);
+ ok(!ret, "Expect IsWindowEnabled() return FALSE\n");
+
+ hwnd = GetDesktopWindow();
+ ret = IsWindowEnabled(hwnd);
+ ok(ret, "Expect IsWindowEnabled() return TRUE\n");
+
+ hwnd = create_tool_window(WS_CHILD | WS_VISIBLE, hwndMain);
+ ret = IsWindowEnabled(hwnd);
+ ok(ret, "Expect IsWindowEnabled() return TRUE\n");
+ EnableWindow(hwnd, FALSE);
+ ret = IsWindowEnabled(hwnd);
+ ok(!ret, "Expect IsWindowEnabled() return FALSE\n");
+ DestroyWindow(hwnd);
+}
+
START_TEST(win)
{
char **argv;
@@ -10856,6 +10877,7 @@ START_TEST(win)
test_hide_window();
test_minimize_window(hwndMain);
test_destroy_quit();
+ test_IsWindowEnabled();
/* add the tests above this line */
if (hhook) UnhookWindowsHookEx(hhook);
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 3535c1b..28bc1f6 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -2157,9 +2157,13 @@ BOOL WINAPI EnableWindow( HWND hwnd, BOOL enable )
*/
BOOL WINAPI IsWindowEnabled(HWND hWnd)
{
- return !(GetWindowLongW( hWnd, GWL_STYLE ) & WS_DISABLED);
-}
+ LONG ret;
+ SetLastError(NO_ERROR);
+ ret = GetWindowLongW( hWnd, GWL_STYLE );
+ if (!ret && GetLastError() != NO_ERROR) return FALSE;
+ return !(ret & WS_DISABLED);
+}
/***********************************************************************
* IsWindowUnicode (USER32.@)
More information about the wine-cvs
mailing list