From 6806451db38e2b656e4dc959900070a409f8ca7f Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 3 Feb 2010 12:18:30 +0100 Subject: [PATCH] user: Add icon handle mapping in the Get/SetClassWord/Long functions. --- dlls/user.exe16/window.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/dlls/user.exe16/window.c b/dlls/user.exe16/window.c index b617c4df07e..e81d9ace3ae 100644 --- a/dlls/user.exe16/window.c +++ b/dlls/user.exe16/window.c @@ -747,6 +747,16 @@ void WINAPI ValidateRgn16( HWND16 hwnd, HRGN16 hrgn ) */ WORD WINAPI GetClassWord16( HWND16 hwnd, INT16 offset ) { + HICON icon; + + switch (offset) + { + case GCLP_HCURSOR: + case GCLP_HICON: + case GCLP_HICONSM: + icon = (HICON)GetClassLongPtrW( WIN_Handle32(hwnd), offset ); + return get_icon_16( icon ); + } return GetClassWord( WIN_Handle32(hwnd), offset ); } @@ -756,6 +766,16 @@ WORD WINAPI GetClassWord16( HWND16 hwnd, INT16 offset ) */ WORD WINAPI SetClassWord16( HWND16 hwnd, INT16 offset, WORD newval ) { + HICON icon; + + switch (offset) + { + case GCLP_HCURSOR: + case GCLP_HICON: + case GCLP_HICONSM: + icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd), offset, (ULONG_PTR)get_icon_32(newval) ); + return get_icon_16( icon ); + } return SetClassWord( WIN_Handle32(hwnd), offset, newval ); } @@ -773,6 +793,10 @@ LONG WINAPI GetClassLong16( HWND16 hwnd16, INT16 offset ) return (LONG_PTR)WINPROC_GetProc16( (WNDPROC)ret, FALSE ); case GCLP_MENUNAME: return MapLS( (void *)ret ); /* leak */ + case GCLP_HCURSOR: + case GCLP_HICON: + case GCLP_HICONSM: + return get_icon_16( (HICON)ret ); default: return ret; } @@ -784,8 +808,15 @@ LONG WINAPI GetClassLong16( HWND16 hwnd16, INT16 offset ) */ LONG WINAPI SetClassLong16( HWND16 hwnd16, INT16 offset, LONG newval ) { + HICON icon; + switch( offset ) { + case GCLP_HCURSOR: + case GCLP_HICON: + case GCLP_HICONSM: + icon = (HICON)SetClassLongPtrW( WIN_Handle32(hwnd16), offset, (ULONG_PTR)get_icon_32(newval) ); + return get_icon_16( icon ); case GCLP_WNDPROC: { WNDPROC new_proc = WINPROC_AllocProc16( (WNDPROC16)newval );