Alexandre Julliard : user: Added fast W-> A mapping for WM_SETTEXT and related messages.

Alexandre Julliard julliard at wine.codeweavers.com
Thu May 18 09:43:52 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: bba01599102469ad59dc18f923dab79a950f9be2
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=bba01599102469ad59dc18f923dab79a950f9be2

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu May 18 11:29:31 2006 +0200

user: Added fast W->A mapping for WM_SETTEXT and related messages.

---

 dlls/user/winproc.c |   52 ++++++++++++++++++++++++---------------------------
 1 files changed, 24 insertions(+), 28 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index be91e0f..15b00ee 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -992,24 +992,6 @@ static INT WINPROC_MapMsg32WTo32A( HWND 
 {
     switch(msg)
     {
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case CB_DIR:
-    case LB_DIR:
-    case LB_ADDFILE:
-    case EM_REPLACESEL:
-        if (*plparam)
-        {
-            LPCWSTR str = (LPCWSTR)*plparam;
-            int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, 0, 0);
-            *plparam = (LPARAM)HeapAlloc(GetProcessHeap(), 0, len);
-            if (!*plparam) return -1;
-            WideCharToMultiByte(CP_ACP, 0, str, -1, (LPSTR)*plparam, len, 0, 0);
-            return 1;
-        }
-        return 0;
-
     case WM_MDICREATE:
         {
             MDICREATESTRUCTA *cs = HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) );
@@ -1142,16 +1124,6 @@ static LRESULT WINPROC_UnmapMsg32WTo32A(
 {
     switch(msg)
     {
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case CB_DIR:
-    case LB_DIR:
-    case LB_ADDFILE:
-    case EM_REPLACESEL:
-        HeapFree( GetProcessHeap(), 0, (void *)lParam );
-        break;
-
     case WM_MDICREATE:
         {
             MDICREATESTRUCTA *cs = (MDICREATESTRUCTA *)lParam;
@@ -3057,6 +3029,30 @@ static LRESULT WINPROC_CallProc32WTo32A(
         }
         break;
 
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case CB_DIR:
+    case LB_DIR:
+    case LB_ADDFILE:
+    case EM_REPLACESEL:
+        if (!lParam) ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam );
+        else
+        {
+            char *ptr, buffer[512];
+            LPCWSTR strW = (LPCWSTR)lParam;
+            DWORD lenA, lenW = (strlenW(strW) + 1) * sizeof(WCHAR);
+
+            RtlUnicodeToMultiByteSize( &lenA, strW, lenW );
+            if ((ptr = get_buffer( buffer, sizeof(buffer), lenA )))
+            {
+                RtlUnicodeToMultiByteN( ptr, lenA, NULL, strW, lenW );
+                ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, (LPARAM)ptr );
+                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