diff --git a/dll/win32/comctl32/combo.c b/dll/win32/comctl32/combo.c index 25502f8a74..0987d66f7f 100644 --- a/dll/win32/comctl32/combo.c +++ b/dll/win32/comctl32/combo.c @@ -1790,6 +1790,10 @@ static LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam if ((vk == VK_RETURN || vk == VK_ESCAPE) && (lphc->wState & CBF_DROPPED)) result |= DLGC_WANTMESSAGE; +#ifdef __REACTOS__ + if (vk == VK_BACK) + result |= DLGC_WANTMESSAGE; +#endif } return result; } @@ -1906,6 +1910,50 @@ static LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam COMBO_FlipListbox( lphc, FALSE, FALSE ); return TRUE; } +#ifdef __REACTOS__ + else if (wParam == VK_BACK && GetAsyncKeyState(VK_CONTROL) < 0) + { + /* Ctrl+Backspace */ + INT cch, iStart, iEnd; + LPWSTR pszText; + MessageBoxA(NULL, "OK2", NULL, 0); + + cch = GetWindowTextLengthW(lphc->hWndEdit); + + SendMessageW(lphc->hWndEdit, EM_GETSEL, (WPARAM)&iStart, (LPARAM)&iEnd); + + if (cch > 0 && iStart == iEnd) + { + pszText = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, (cch + 1) * sizeof(WCHAR)); + if (pszText) + { + GetWindowTextW(lphc->hWndEdit, pszText, cch + 1); + MessageBoxW(NULL, pszText, NULL, 0); + + for (; 0 < iStart; --iStart) + { + if (pszText[iStart - 1] == ' ' && + IsCharAlphaNumericW(pszText[iStart])) + { + SendMessageW(lphc->hWndEdit, EM_SETSEL, iStart, iEnd); + SendMessageW(lphc->hWndEdit, EM_REPLACESEL, TRUE, (LPARAM)L""); + HeapFree(GetProcessHeap(), 0, pszText); + return TRUE; + } + } + + if (iStart == 0) + { + SetWindowTextW(lphc->hWndEdit, L""); + HeapFree(GetProcessHeap(), 0, pszText); + return TRUE; + } + + HeapFree(GetProcessHeap(), 0, pszText); + } + } + } +#endif /* fall through */ case WM_CHAR: case WM_IME_CHAR: