Module: wine Branch: refs/heads/master Commit: 96a430f530d2a43e1338d24daedd0a1343920a64 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=96a430f530d2a43e1338d24d...
Author: Alexandre Julliard julliard@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",