Alexandre Julliard : user: Added fast 32->16 mapping for WM_GETTEXT, WM_SETTEXT and similar messages.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 26 13:55:02 CDT 2006


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 26 14:14:14 2006 +0200

user: Added fast 32->16 mapping for WM_GETTEXT, WM_SETTEXT and similar messages.

---

 dlls/user/winproc.c |   47 ++++++++++++-----------------------------------
 1 files changed, 12 insertions(+), 35 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 28eebb4..da6e050 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -964,16 +964,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
         *plparam = MAKELPARAM( (HWND16)*plparam,
                                (WORD)msg32 - WM_CTLCOLORMSGBOX );
         return 0;
-    case WM_GETTEXT:
-    case WM_ASKCBFORMATNAME:
-        {
-            LPARAM *str; /* store LPARAM, then *pwparam16 char space */
-            *pwparam16 = (WPARAM16)min( wParam32, 0xff80 ); /* Must be < 64K */
-            if (!(str = HeapAlloc( GetProcessHeap(), 0, *pwparam16 + sizeof(LPARAM)))) return -1;
-            *str++ = *plparam;  /* Store the previous lParam */
-            *plparam = MapLS( str );
-        }
-        return 1;
     case WM_MENUSELECT:
         if(HIWORD(wParam32) & MF_POPUP)
         {
@@ -993,14 +983,6 @@ static INT WINPROC_MapMsg32ATo16( HWND h
             *plparam = MAKELPARAM( (HWND16)*plparam, HIWORD(wParam32));
         /* else nothing to do */
         return 0;
-    case WM_NOTIFY:
-        *plparam = MapLS( (NMHDR *)*plparam ); /* NMHDR is already 32-bit */
-        return 1;
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-        *plparam = MapLS( (LPSTR)*plparam );
-        return 1;
     case WM_ACTIVATEAPP:
         if (*plparam) *plparam = HTASK_16( (HANDLE)*plparam );
         return 0;
@@ -1062,9 +1044,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
     case CB_SELECTSTRING:
     case CB_DIR:
     case CB_GETLBTEXT:
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
         UnMapLS( (SEGPTR)lParam16 );
         break;
     case LB_SETTABSTOPS:
@@ -1106,20 +1085,6 @@ static void WINPROC_UnmapMsg32ATo16( HWN
         if( lParam )
             *((PUINT)(lParam)) = HIWORD(*result);  /* FIXME: substract 1? */
         break;
-
-    case WM_GETTEXT:
-    case WM_ASKCBFORMATNAME:
-        {
-            LPSTR str = MapSL(lParam16);
-            UnMapLS( lParam16 );
-            lParam16 = *((LPARAM *)str - 1);
-            lstrcpynA( (LPSTR)lParam16, str, wParam16 );
-            HeapFree( GetProcessHeap(), 0, (LPARAM *)str - 1 );
-        }
-        break;
-    case WM_NOTIFY:
-        UnMapLS(lParam16);
-        break;
     }
 }
 
@@ -2222,6 +2187,18 @@ LRESULT WINPROC_CallProc32ATo16( winproc
             *result = 0;
         }
         break;
+    case WM_GETTEXT:
+    case WM_ASKCBFORMATNAME:
+        wParam = min( wParam, 0xff80 ); /* Must be < 64K */
+        /* fall through */
+    case WM_NOTIFY:
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+        lParam = MapLS( (void *)lParam );
+        ret = callback( HWND_16(hwnd), msg, wParam, lParam, result, arg );
+        UnMapLS( lParam );
+        break;
     case WM_DDE_INITIATE:
     case WM_DDE_TERMINATE:
     case WM_DDE_UNADVISE:




More information about the wine-cvs mailing list