Module: wine Branch: master Commit: 77ab4354025cd5477c4f91a299deff5ff70bf8d1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=77ab4354025cd5477c4f91a299...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Dec 18 12:41:59 2009 +0100
user32: Make WINPROC_AllocProc take a unicode flag for consistency with the other winproc functions.
---
dlls/user32/class.c | 7 +++---- dlls/user32/controls.h | 2 +- dlls/user32/message.c | 4 ++-- dlls/user32/msg16.c | 5 +---- dlls/user32/user_private.h | 2 +- dlls/user32/win.c | 6 ++---- dlls/user32/winproc.c | 34 ++++++++++++++++------------------ 7 files changed, 26 insertions(+), 34 deletions(-)
diff --git a/dlls/user32/class.c b/dlls/user32/class.c index 040f3c1..f7e0f25 100644 --- a/dlls/user32/class.c +++ b/dlls/user32/class.c @@ -551,7 +551,7 @@ ATOM WINAPI RegisterClassExA( const WNDCLASSEXA* wc ) classPtr->hIconSm = wc->hIconSm; classPtr->hCursor = wc->hCursor; classPtr->hbrBackground = wc->hbrBackground; - classPtr->winproc = WINPROC_AllocProc( wc->lpfnWndProc, NULL ); + classPtr->winproc = WINPROC_AllocProc( wc->lpfnWndProc, FALSE ); CLASS_SetMenuNameA( classPtr, wc->lpszMenuName ); release_class_ptr( classPtr ); return atom; @@ -589,7 +589,7 @@ ATOM WINAPI RegisterClassExW( const WNDCLASSEXW* wc ) classPtr->hIconSm = wc->hIconSm; classPtr->hCursor = wc->hCursor; classPtr->hbrBackground = wc->hbrBackground; - classPtr->winproc = WINPROC_AllocProc( NULL, wc->lpfnWndProc ); + classPtr->winproc = WINPROC_AllocProc( wc->lpfnWndProc, TRUE ); CLASS_SetMenuNameW( classPtr, wc->lpszMenuName ); release_class_ptr( classPtr ); return atom; @@ -903,8 +903,7 @@ static ULONG_PTR CLASS_SetClassLong( HWND hwnd, INT offset, LONG_PTR newval, break; case GCLP_WNDPROC: retval = (ULONG_PTR)WINPROC_GetProc( class->winproc, unicode ); - class->winproc = WINPROC_AllocProc( unicode ? NULL : (WNDPROC)newval, - unicode ? (WNDPROC)newval : NULL ); + class->winproc = WINPROC_AllocProc( (WNDPROC)newval, unicode ); break; case GCLP_HBRBACKGROUND: retval = (ULONG_PTR)class->hbrBackground; diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h index f9a17e8..3bde456 100644 --- a/dlls/user32/controls.h +++ b/dlls/user32/controls.h @@ -110,7 +110,7 @@ struct wow_handlers32 LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*static_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); HWND (*create_window)(CREATESTRUCTW*,LPCWSTR,HINSTANCE,UINT); - WNDPROC (*alloc_winproc)(WNDPROC,WNDPROC); + WNDPROC (*alloc_winproc)(WNDPROC,BOOL); };
extern struct wow_handlers16 wow_handlers DECLSPEC_HIDDEN; diff --git a/dlls/user32/message.c b/dlls/user32/message.c index ffe7f76..d6fd5af 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -3589,7 +3589,7 @@ UINT_PTR WINAPI SetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc ) UINT_PTR ret; WNDPROC winproc = 0;
- if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, NULL ); + if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, FALSE );
SERVER_START_REQ( set_win_timer ) { @@ -3620,7 +3620,7 @@ UINT_PTR WINAPI SetSystemTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC UINT_PTR ret; WNDPROC winproc = 0;
- if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, NULL ); + if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, FALSE );
SERVER_START_REQ( set_win_timer ) { diff --git a/dlls/user32/msg16.c b/dlls/user32/msg16.c index 0e57988..c3365e8 100644 --- a/dlls/user32/msg16.c +++ b/dlls/user32/msg16.c @@ -231,10 +231,7 @@ done: */ WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) { - WNDPROC winproc; - - if (unicode) winproc = wow_handlers32.alloc_winproc( NULL, proc ); - else winproc = wow_handlers32.alloc_winproc( proc, NULL ); + WNDPROC winproc = wow_handlers32.alloc_winproc( proc, unicode );
if ((ULONG_PTR)winproc >> 16 != WINPROC_HANDLE) return (WNDPROC16)winproc; return alloc_win16_thunk( winproc ); diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index e5db691..fc92f25 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -239,7 +239,7 @@ typedef LRESULT (*winproc_callback16_t)( HWND16 hwnd, UINT16 msg, WPARAM16 wp, L extern WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN; extern WNDPROC WINPROC_AllocProc16( WNDPROC16 func ) DECLSPEC_HIDDEN; extern WNDPROC WINPROC_GetProc( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN; -extern WNDPROC WINPROC_AllocProc( WNDPROC funcA, WNDPROC funcW ) DECLSPEC_HIDDEN; +extern WNDPROC WINPROC_AllocProc( WNDPROC func, BOOL unicode ) DECLSPEC_HIDDEN; extern BOOL WINPROC_IsUnicode( WNDPROC proc, BOOL def_val ) DECLSPEC_HIDDEN;
extern LRESULT WINPROC_CallProcAtoW( winproc_callback_t callback, HWND hwnd, UINT msg, diff --git a/dlls/user32/win.c b/dlls/user32/win.c index 9712beb..7834501 100644 --- a/dlls/user32/win.c +++ b/dlls/user32/win.c @@ -2099,8 +2099,7 @@ LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, UINT size, LONG_PTR newval, B WNDPROC proc; UINT old_flags = wndPtr->flags; retval = WIN_GetWindowLong( hwnd, offset, size, unicode ); - if (unicode) proc = WINPROC_AllocProc( NULL, (WNDPROC)newval ); - else proc = WINPROC_AllocProc( (WNDPROC)newval, NULL ); + proc = WINPROC_AllocProc( (WNDPROC)newval, unicode ); if (proc) wndPtr->winproc = proc; if (WINPROC_IsUnicode( proc, unicode )) wndPtr->flags |= WIN_ISUNICODE; else wndPtr->flags &= ~WIN_ISUNICODE; @@ -2122,8 +2121,7 @@ LONG_PTR WIN_SetWindowLong( HWND hwnd, INT offset, UINT size, LONG_PTR newval, B { WNDPROC *ptr = (WNDPROC *)((char *)wndPtr->wExtra + DWLP_DLGPROC); retval = (ULONG_PTR)WINPROC_GetProc( *ptr, unicode ); - if (unicode) *ptr = WINPROC_AllocProc( NULL, (WNDPROC)newval ); - else *ptr = WINPROC_AllocProc( (WNDPROC)newval, NULL ); + *ptr = WINPROC_AllocProc( (WNDPROC)newval, unicode ); WIN_ReleasePtr( wndPtr ); return retval; } diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 7bdb91d..36f8279 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -104,21 +104,20 @@ static inline void free_buffer( void *static_buffer, void *buffer )
/* find an existing winproc for a given function and type */ /* FIXME: probably should do something more clever than a linear search */ -static inline WINDOWPROC *find_winproc( WNDPROC funcA, WNDPROC funcW ) +static inline WINDOWPROC *find_winproc( WNDPROC func, BOOL unicode ) { unsigned int i;
for (i = 0; i < NB_BUILTIN_AW_WINPROCS; i++) { /* match either proc, some apps confuse A and W */ - if (funcA && winproc_array[i].procA != funcA && winproc_array[i].procW != funcA) continue; - if (funcW && winproc_array[i].procA != funcW && winproc_array[i].procW != funcW) continue; + if (winproc_array[i].procA != func && winproc_array[i].procW != func) continue; return &winproc_array[i]; } for (i = NB_BUILTIN_AW_WINPROCS; i < winproc_used; i++) { - if (funcA && winproc_array[i].procA != funcA) continue; - if (funcW && winproc_array[i].procW != funcW) continue; + if (!unicode && winproc_array[i].procA != func) continue; + if (unicode && winproc_array[i].procW != func) continue; return &winproc_array[i]; } return NULL; @@ -142,32 +141,31 @@ static inline WNDPROC proc_to_handle( WINDOWPROC *proc ) }
/* allocate and initialize a new winproc */ -static inline WINDOWPROC *alloc_winproc( WNDPROC funcA, WNDPROC funcW ) +static inline WINDOWPROC *alloc_winproc( WNDPROC func, BOOL unicode ) { WINDOWPROC *proc;
/* check if the function is already a win proc */ - if (funcA && (proc = handle_to_proc( funcA ))) return proc; - if (funcW && (proc = handle_to_proc( funcW ))) return proc; - if (!funcA && !funcW) return NULL; + if (!func) return NULL; + if ((proc = handle_to_proc( func ))) return proc;
EnterCriticalSection( &winproc_cs );
/* check if we already have a winproc for that function */ - if (!(proc = find_winproc( funcA, funcW ))) + if (!(proc = find_winproc( func, unicode ))) { if (winproc_used < MAX_WINPROCS) { proc = &winproc_array[winproc_used++]; - proc->procA = funcA; - proc->procW = funcW; + if (unicode) proc->procW = func; + else proc->procA = func; TRACE( "allocated %p for %c %p (%d/%d used)\n", - proc_to_handle(proc), funcA ? 'A' : 'W', funcA ? funcA : funcW, + proc_to_handle(proc), unicode ? 'W' : 'A', func, winproc_used, MAX_WINPROCS ); } - else FIXME( "too many winprocs, cannot allocate one for %p/%p\n", funcA, funcW ); + else FIXME( "too many winprocs, cannot allocate one for %p\n", func ); } - else TRACE( "reusing %p for %p/%p\n", proc_to_handle(proc), funcA, funcW ); + else TRACE( "reusing %p for %p\n", proc_to_handle(proc), func );
LeaveCriticalSection( &winproc_cs ); return proc; @@ -304,12 +302,12 @@ WNDPROC WINPROC_GetProc( WNDPROC proc, BOOL unicode ) * lot of windows, it will usually only have a limited number of window procedures, so the * array won't grow too large, and this way we avoid the need to track allocations per window. */ -WNDPROC WINPROC_AllocProc( WNDPROC funcA, WNDPROC funcW ) +WNDPROC WINPROC_AllocProc( WNDPROC func, BOOL unicode ) { WINDOWPROC *proc;
- if (!(proc = alloc_winproc( funcA, funcW ))) return NULL; - if (proc == WINPROC_PROC16) return funcA ? funcA : funcW; + if (!(proc = alloc_winproc( func, unicode ))) return NULL; + if (proc == WINPROC_PROC16) return func; return proc_to_handle( proc ); }