Alexandre Julliard : user: Added fast A->
W mapping for WM_SETTEXT and related messages.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 22 05:19:05 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 4dd1cce203ca936611e7f93355b51b307f6b6120
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=4dd1cce203ca936611e7f93355b51b307f6b6120
Author: Alexandre Julliard <julliard at winehq.org>
Date: Sat May 20 18:54:25 2006 +0200
user: Added fast A->W mapping for WM_SETTEXT and related messages.
---
dlls/user/winproc.c | 75 +++++++++++++++++++++++++++------------------------
1 files changed, 40 insertions(+), 35 deletions(-)
diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index a693fe7..8e71bfc 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -775,26 +775,6 @@ static INT WINPROC_MapMsg32ATo32W( HWND
case LB_GETTEXTLEN:
return 1; /* need to map result */
-/* Listbox / Combobox */
- case LB_ADDSTRING:
- case LB_INSERTSTRING:
- case LB_FINDSTRING:
- case LB_FINDSTRINGEXACT:
- case LB_SELECTSTRING:
- case CB_ADDSTRING:
- case CB_INSERTSTRING:
- case CB_FINDSTRINGEXACT:
- case CB_FINDSTRING:
- case CB_SELECTSTRING:
- if(!*plparam) return 0;
- if ( WINPROC_TestLBForStr( hwnd, msg ))
- {
- UNICODE_STRING usBuffer;
- RtlCreateUnicodeStringFromAsciiz(&usBuffer,(LPCSTR)*plparam);
- *plparam = (LPARAM)usBuffer.Buffer;
- }
- return (*plparam ? 1 : -1);
-
case LB_GETTEXT: /* FIXME: fixed sized buffer */
case CB_GETLBTEXT:
if ( WINPROC_TestLBForStr( hwnd, msg ))
@@ -905,21 +885,6 @@ static LRESULT WINPROC_UnmapMsg32ATo32W(
HeapFree( GetProcessHeap(), 0, (void *)lParam );
break;
-/* Listbox / Combobox */
- case LB_ADDSTRING:
- case LB_INSERTSTRING:
- case LB_FINDSTRING:
- case LB_FINDSTRINGEXACT:
- case LB_SELECTSTRING:
- case CB_ADDSTRING:
- case CB_INSERTSTRING:
- case CB_FINDSTRING:
- case CB_FINDSTRINGEXACT:
- case CB_SELECTSTRING:
- if ( WINPROC_TestLBForStr( hwnd, msg ))
- HeapFree( GetProcessHeap(), 0, (void *)lParam );
- break;
-
case LB_GETTEXT:
case CB_GETLBTEXT:
if ( WINPROC_TestLBForStr( hwnd, msg ))
@@ -2708,6 +2673,46 @@ LRESULT WINPROC_CallProcAtoW( winproc_ca
}
break;
+ case LB_ADDSTRING:
+ case LB_INSERTSTRING:
+ case LB_FINDSTRING:
+ case LB_FINDSTRINGEXACT:
+ case LB_SELECTSTRING:
+ case CB_ADDSTRING:
+ case CB_INSERTSTRING:
+ case CB_FINDSTRING:
+ case CB_FINDSTRINGEXACT:
+ case CB_SELECTSTRING:
+ if (!lParam || !WINPROC_TestLBForStr( hwnd, msg ))
+ {
+ ret = callback( hwnd, msg, wParam, lParam, result, arg );
+ break;
+ }
+ /* fall through */
+ case WM_SETTEXT:
+ case WM_WININICHANGE:
+ case WM_DEVMODECHANGE:
+ case CB_DIR:
+ case LB_DIR:
+ case LB_ADDFILE:
+ case EM_REPLACESEL:
+ if (!lParam) ret = callback( hwnd, msg, wParam, lParam, result, arg );
+ else
+ {
+ WCHAR *ptr, buffer[512];
+ LPCSTR strA = (LPCSTR)lParam;
+ DWORD lenW, lenA = strlen(strA) + 1;
+
+ RtlMultiByteToUnicodeSize( &lenW, strA, lenA );
+ if ((ptr = get_buffer( buffer, sizeof(buffer), lenW )))
+ {
+ RtlMultiByteToUnicodeN( ptr, lenW, NULL, strA, lenA );
+ ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
+ free_buffer( buffer, ptr );
+ }
+ }
+ break;
+
default:
if( (unmap = WINPROC_MapMsg32ATo32W( 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