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

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


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

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

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

---

 dlls/user/winproc.c |   69 ++++++++++++++++-----------------------------------
 1 files changed, 21 insertions(+), 48 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index b852fb5..fe9905b 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -993,21 +993,6 @@ static INT WINPROC_MapMsg32WTo32A( HWND 
     switch(msg)
     {
 /* Listbox */
-    case LB_ADDSTRING:
-    case LB_INSERTSTRING:
-    case LB_FINDSTRING:
-    case LB_FINDSTRINGEXACT:
-    case LB_SELECTSTRING:
-        if(!*plparam) return 0;
-        if ( WINPROC_TestLBForStr( hwnd ))
-        {
-            int len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*plparam, -1, NULL, 0, 0, 0);
-            LPSTR buf = HeapAlloc(GetProcessHeap(), 0, len);
-            if (buf) WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*plparam, -1, buf, len, 0, 0);
-            *plparam = (LPARAM)buf;
-        }
-        return (*plparam ? 1 : -1);
-
     case LB_GETTEXT:                    /* FIXME: fixed sized buffer */
         { if ( WINPROC_TestLBForStr( hwnd ))
           { LPARAM *ptr = HeapAlloc( GetProcessHeap(), 0, 512 + sizeof(LPARAM) );
@@ -1019,21 +1004,6 @@ static INT WINPROC_MapMsg32WTo32A( HWND 
         return 1;
 
 /* Combobox */
-    case CB_ADDSTRING:
-    case CB_INSERTSTRING:
-    case CB_FINDSTRING:
-    case CB_FINDSTRINGEXACT:
-    case CB_SELECTSTRING:
-        if(!*plparam) return 0;
-        if ( WINPROC_TestCBForStr( hwnd ))
-        {
-            int len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*plparam, -1, NULL, 0, 0, 0);
-            LPSTR buf = HeapAlloc(GetProcessHeap(), 0, len);
-            if (buf) WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*plparam, -1, buf, len, 0, 0);
-            *plparam = (LPARAM)buf;
-        }
-        return (*plparam ? 1 : -1);
-
     case CB_GETLBTEXT:          /* FIXME: fixed sized buffer */
         { if ( WINPROC_TestCBForStr( hwnd ))
           { LPARAM *ptr = HeapAlloc( GetProcessHeap(), 0, 512 + sizeof(LPARAM) );
@@ -1102,15 +1072,6 @@ static LRESULT WINPROC_UnmapMsg32WTo32A(
     switch(msg)
     {
 /* Listbox */
-    case LB_ADDSTRING:
-    case LB_INSERTSTRING:
-    case LB_FINDSTRING:
-    case LB_FINDSTRINGEXACT:
-    case LB_SELECTSTRING:
-        if ( WINPROC_TestLBForStr( hwnd ))
-          HeapFree( GetProcessHeap(), 0, (void *)lParam );
-        break;
-
     case LB_GETTEXT:
         if ( WINPROC_TestLBForStr( hwnd ))
         {
@@ -1122,15 +1083,6 @@ static LRESULT WINPROC_UnmapMsg32WTo32A(
         break;
 
 /* Combobox */
-    case CB_ADDSTRING:
-    case CB_INSERTSTRING:
-    case CB_FINDSTRING:
-    case CB_FINDSTRINGEXACT:
-    case CB_SELECTSTRING:
-        if ( WINPROC_TestCBForStr( hwnd ))
-          HeapFree( GetProcessHeap(), 0, (void *)lParam );
-        break;
-
     case CB_GETLBTEXT:
         if ( result < 0) /* CB_ERR and CB_ERRSPACE */
         {
@@ -3002,6 +2954,7 @@ static LRESULT WINPROC_CallProc32WTo32A(
     case LB_DIR:
     case LB_ADDFILE:
     case EM_REPLACESEL:
+    handle_wm_settext:
         if (!lParam) ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam );
         else
         {
@@ -3056,6 +3009,26 @@ static LRESULT WINPROC_CallProc32WTo32A(
         }
         break;
 
+/* Listbox */
+    case LB_ADDSTRING:
+    case LB_INSERTSTRING:
+    case LB_FINDSTRING:
+    case LB_FINDSTRINGEXACT:
+    case LB_SELECTSTRING:
+        if (lParam && WINPROC_TestLBForStr( hwnd )) goto handle_wm_settext;
+        ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam );
+        break;
+
+/* Combobox */
+    case CB_ADDSTRING:
+    case CB_INSERTSTRING:
+    case CB_FINDSTRING:
+    case CB_FINDSTRINGEXACT:
+    case CB_SELECTSTRING:
+        if (lParam && WINPROC_TestCBForStr( hwnd )) goto handle_wm_settext;
+        ret = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam );
+        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