Module: wine Branch: refs/heads/master Commit: ef7419394972a2fa3d516de77cc4731725880b8e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ef7419394972a2fa3d516de7...
Author: Alexandre Julliard julliard@winehq.org Date: Wed May 10 12:55:36 2006 +0200
user: Add a WIN_ISUNICODE flag instead of relying on the winproc type.
Also fix the initial value for the server is_unicode flag.
---
dlls/user/class.c | 1 + dlls/user/win.c | 15 +++++++++------ include/win.h | 3 ++- 3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/dlls/user/class.c b/dlls/user/class.c index 1f36562..f823b2f 100644 --- a/dlls/user/class.c +++ b/dlls/user/class.c @@ -532,6 +532,7 @@ void CLASS_AddWindow( CLASS *class, WND } win->class = class; win->clsStyle = class->style; + if (WINPROC_GetProcType( win->winproc ) == WIN_PROC_32W) win->flags |= WIN_ISUNICODE; }
diff --git a/dlls/user/win.c b/dlls/user/win.c index 4732fc6..acff599 100644 --- a/dlls/user/win.c +++ b/dlls/user/win.c @@ -122,6 +122,7 @@ static WND *create_window_handle( HWND p win->parent = full_parent; win->owner = full_owner; win->dwMagic = WND_MAGIC; + win->flags = 0; win->cbWndExtra = extra_bytes; memset( win->wExtra, 0, extra_bytes ); CLASS_AddWindow( class, win, type ); @@ -988,13 +989,13 @@ static HWND WIN_CreateWindowEx( CREATEST wndPtr->dwExStyle = cs->dwExStyle; wndPtr->wIDmenu = 0; wndPtr->helpContext = 0; - wndPtr->flags = (type == WIN_PROC_16) ? 0 : WIN_ISWIN32; wndPtr->pVScroll = NULL; wndPtr->pHScroll = NULL; wndPtr->userdata = 0; wndPtr->hIcon = 0; wndPtr->hIconSmall = 0; wndPtr->hSysMenu = 0; + if (type != WIN_PROC_16) wndPtr->flags |= WIN_ISWIN32;
if (wndPtr->dwStyle & WS_SYSMENU) SetSystemMenu( hwnd, 0 );
@@ -1032,7 +1033,7 @@ static HWND WIN_CreateWindowEx( CREATEST req->style = wndPtr->dwStyle; req->ex_style = wndPtr->dwExStyle; req->instance = (void *)wndPtr->hInstance; - req->is_unicode = (type == WIN_PROC_32W); + req->is_unicode = (wndPtr->flags & WIN_ISUNICODE) != 0; req->extra_offset = -1; wine_server_call( req ); } @@ -1683,7 +1684,7 @@ BOOL WINAPI IsWindowUnicode( HWND hwnd )
if (wndPtr != WND_OTHER_PROCESS) { - retvalue = (WINPROC_GetProcType( wndPtr->winproc ) == WIN_PROC_32W); + retvalue = (wndPtr->flags & WIN_ISUNICODE) != 0; WIN_ReleasePtr( wndPtr ); } else @@ -1990,10 +1991,12 @@ static LONG_PTR WIN_SetWindowLong( HWND } case GWLP_WNDPROC: { - WINDOWPROCTYPE old_type = WINPROC_GetProcType( wndPtr->winproc ); + UINT old_flags = wndPtr->flags; retval = (ULONG_PTR)WINPROC_GetProc( wndPtr->winproc, type ); wndPtr->winproc = WINPROC_AllocProc( (WNDPROC)newval, type ); - if (old_type == type) + if (WINPROC_GetProcType( wndPtr->winproc ) == WIN_PROC_32W) wndPtr->flags |= WIN_ISUNICODE; + else wndPtr->flags &= ~WIN_ISUNICODE; + if (!((old_flags ^ wndPtr->flags) & WIN_ISUNICODE)) { WIN_ReleasePtr( wndPtr ); return retval; @@ -2059,7 +2062,7 @@ static LONG_PTR WIN_SetWindowLong( HWND break; case GWLP_WNDPROC: req->flags = SET_WIN_UNICODE; - req->is_unicode = (type == WIN_PROC_32W); + req->is_unicode = (wndPtr->flags & WIN_ISUNICODE) != 0; break; case GWLP_USERDATA: req->flags = SET_WIN_USERDATA; diff --git a/include/win.h b/include/win.h index 437aecf..f5affc3 100644 --- a/include/win.h +++ b/include/win.h @@ -68,7 +68,8 @@ #define WIN_NCACTIVATED 0x0004 #define WIN_ISMDICLIENT 0x0008 /* Window is an MDIClient */ #define WIN_ISDIALOG 0x0010 /* Window is a dialog */ #define WIN_ISWIN32 0x0020 /* Understands Win32 messages */ -#define WIN_NEEDS_SHOW_OWNEDPOPUP 0x0040 /* WM_SHOWWINDOW:SC_SHOW must be sent in the next ShowOwnedPopup call */ +#define WIN_ISUNICODE 0x0040 /* Window is Unicode */ +#define WIN_NEEDS_SHOW_OWNEDPOPUP 0x0080 /* WM_SHOWWINDOW:SC_SHOW must be sent in the next ShowOwnedPopup call */
/* Window functions */ extern WND *WIN_GetPtr( HWND hwnd );