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