Alexandre Julliard : user: Added fast W->
A mapping for WM_GETTEXT and WM_ASKCBFORNAME.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 18 09:43:51 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: f793b818a40d118b21bd045f7169790bf2828034
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=f793b818a40d118b21bd045f7169790bf2828034
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu May 18 11:22:55 2006 +0200
user: Added fast W->A mapping for WM_GETTEXT and WM_ASKCBFORNAME.
---
dlls/user/winproc.c | 49 +++++++++++++++++++++++--------------------------
1 files changed, 23 insertions(+), 26 deletions(-)
diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 5db5c90..be91e0f 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -992,16 +992,6 @@ static INT WINPROC_MapMsg32WTo32A( HWND
{
switch(msg)
{
- case WM_GETTEXT:
- case WM_ASKCBFORMATNAME:
- {
- LPARAM *ptr = HeapAlloc( GetProcessHeap(), 0, *pwparam + sizeof(LPARAM) );
- if (!ptr) return -1;
- *ptr++ = *plparam; /* Store previous lParam */
- *plparam = (LPARAM)ptr;
- }
- return 1;
-
case WM_SETTEXT:
case WM_WININICHANGE:
case WM_DEVMODECHANGE:
@@ -1152,22 +1142,6 @@ static LRESULT WINPROC_UnmapMsg32WTo32A(
{
switch(msg)
{
- case WM_GETTEXT:
- case WM_ASKCBFORMATNAME:
- {
- LPARAM *ptr = (LPARAM *)lParam - 1;
- if (!wParam) result = 0;
- else if (!(result = MultiByteToWideChar( CP_ACP, 0, (LPSTR)lParam, -1,
- (LPWSTR)*ptr, wParam )))
- {
- ((LPWSTR)*ptr)[wParam-1] = 0;
- result = wParam - 1;
- }
- else result--; /* do not count terminating null */
- HeapFree( GetProcessHeap(), 0, ptr );
- }
- break;
-
case WM_SETTEXT:
case WM_WININICHANGE:
case WM_DEVMODECHANGE:
@@ -3060,6 +3034,29 @@ static LRESULT WINPROC_CallProc32WTo32A(
}
break;
+ case WM_GETTEXT:
+ case WM_ASKCBFORMATNAME:
+ {
+ char *ptr, buffer[512];
+ DWORD len = wParam * 2;
+
+ if (!(ptr = get_buffer( buffer, sizeof(buffer), len ))) break;
+ ret = WINPROC_CallWndProc( func, hwnd, msg, len, (LPARAM)ptr );
+ if (ret && len)
+ {
+ RtlMultiByteToUnicodeN( (LPWSTR)lParam, wParam*sizeof(WCHAR), &len, ptr, strlen(ptr)+1 );
+ ret = len/sizeof(WCHAR) - 1; /* do not count terminating null */
+ ((LPWSTR)lParam)[ret] = 0;
+ if (dialog)
+ {
+ SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, ret );
+ ret = TRUE;
+ }
+ }
+ free_buffer( buffer, ptr );
+ }
+ break;
+
default:
if ((unmap = WINPROC_MapMsg32WTo32A( hwnd, msg, &wParam, &lParam )) == -1) {
ERR_(msg)("Message translation failed. (msg=%s,wp=%08x,lp=%08lx)\n",
More information about the wine-cvs
mailing list