Piotr Caban : user32: Call window procedure even if we' re out of winproc handles.
Alexandre Julliard
julliard at winehq.org
Thu Jun 16 03:45:41 CDT 2016
Module: wine
Branch: stable
Commit: b4de8a5fbd569cb70ea82f9d30dcc39ec045e841
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b4de8a5fbd569cb70ea82f9d30dcc39ec045e841
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Mar 9 13:51:37 2016 +0100
user32: Call window procedure even if we're out of winproc handles.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit c9ae38e4c77023eeb3e3bd49dd4506943e19d37e)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/user32/winproc.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c
index 3642109..c74fdda 100644
--- a/dlls/user32/winproc.c
+++ b/dlls/user32/winproc.c
@@ -876,6 +876,7 @@ BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
WND *wndPtr;
WNDPROC func;
WINDOWPROC *proc;
+ BOOL unicode_win;
if (!(wndPtr = WIN_GetPtr( hwnd ))) return FALSE;
if (wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
@@ -886,10 +887,9 @@ BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
}
func = wndPtr->winproc;
proc = handle_to_proc( wndPtr->winproc );
+ unicode_win = wndPtr->flags & WIN_ISUNICODE;
WIN_ReleasePtr( wndPtr );
- if (!proc) return TRUE;
-
if (thread_info->recursion_count > MAX_WINPROC_RECURSION) return FALSE;
thread_info->recursion_count++;
@@ -897,19 +897,27 @@ BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
{
if (proc == WINPROC_PROC16)
WINPROC_CallProcWtoA( wow_handlers.call_window_proc, hwnd, msg, wParam, lParam, result, func );
- else if (proc->procW)
+ else if (proc && proc->procW)
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procW );
- else
+ else if (proc)
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procA );
+ else if (unicode_win)
+ call_window_proc( hwnd, msg, wParam, lParam, result, func );
+ else
+ WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, func );
}
else
{
if (proc == WINPROC_PROC16)
wow_handlers.call_window_proc( hwnd, msg, wParam, lParam, result, func );
- else if (proc->procA)
+ else if (proc && proc->procA)
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procA );
- else
+ else if (proc)
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procW, mapping );
+ else if (unicode_win)
+ WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, func, mapping );
+ else
+ call_window_proc( hwnd, msg, wParam, lParam, result, func );
}
thread_info->recursion_count--;
return TRUE;
More information about the wine-cvs
mailing list