Module: wine Branch: master Commit: 30fa4cb5d0488e8464a5b4e0f22da1908cf4e235 URL: http://source.winehq.org/git/wine.git/?a=commit;h=30fa4cb5d0488e8464a5b4e0f2...
Author: Jay Yang jkelleyy@gmail.com Date: Thu Jun 23 14:56:14 2011 -0400
comctl32: Make ComboBoxEx send CBEN_ENDEDIT when selecting from the dropdown list.
---
dlls/comctl32/comboex.c | 8 ++++---- dlls/comctl32/tests/comboex.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/comboex.c b/dlls/comctl32/comboex.c index 319696d..3402a71 100644 --- a/dlls/comctl32/comboex.c +++ b/dlls/comctl32/comboex.c @@ -1120,10 +1120,10 @@ static LRESULT COMBOEX_Command (COMBOEX_INFO *infoPtr, WPARAM wParam) switch (command) { case CBN_DROPDOWN: - SetFocus (infoPtr->hwndCombo); - ShowWindow (infoPtr->hwndEdit, SW_HIDE); - return SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf); - + SetFocus (infoPtr->hwndCombo); + ShowWindow (infoPtr->hwndEdit, SW_HIDE); + infoPtr->flags |= WCBE_ACTEDIT; + return SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf); case CBN_CLOSEUP: SendMessageW (parent, WM_COMMAND, wParam, (LPARAM)infoPtr->hwndSelf); /* diff --git a/dlls/comctl32/tests/comboex.c b/dlls/comctl32/tests/comboex.c index 59c261c..172e564 100644 --- a/dlls/comctl32/tests/comboex.c +++ b/dlls/comctl32/tests/comboex.c @@ -42,6 +42,8 @@ static BOOL (WINAPI *pSetWindowSubclass)(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR #define MAX_CHARS 100 static char *textBuffer = NULL;
+static BOOL received_end_edit = FALSE; + static HWND createComboEx(DWORD style) { return CreateWindowExA(0, WC_COMBOBOXEXA, NULL, style, 0, 0, 300, 300, hComboExParentWnd, NULL, hMainHinst, NULL); @@ -341,6 +343,7 @@ static void test_WM_LBUTTONDOWN(void) ok(idx == 4 || broken(idx == -1), /* win98 */ "Current Selection: expected %d, got %d\n", 4, idx); + ok(received_end_edit, "Expected to receive a CBEN_ENDEDIT message\n");
DestroyWindow(hComboEx); } @@ -427,6 +430,30 @@ static void test_WM_WINDOWPOSCHANGING(void) ok(ret, "DestroyWindow failed\n"); }
+static LRESULT ComboExTestOnNotify(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + NMHDR *hdr = (NMHDR*)lParam; + switch(hdr->code){ + case CBEN_ENDEDITA: + { + NMCBEENDEDITA *edit_info = (NMCBEENDEDITA*)hdr; + if(edit_info->iWhy==CBENF_DROPDOWN){ + received_end_edit = TRUE; + } + break; + } + case CBEN_ENDEDITW: + { + NMCBEENDEDITW *edit_info = (NMCBEENDEDITW*)hdr; + if(edit_info->iWhy==CBENF_DROPDOWN){ + received_end_edit = TRUE; + } + break; + } + } + return 0; +} + static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { @@ -434,7 +461,8 @@ static LRESULT CALLBACK ComboExTestWndProc(HWND hWnd, UINT msg, WPARAM wParam, L case WM_DESTROY: PostQuitMessage(0); break; - + case WM_NOTIFY: + return ComboExTestOnNotify(hWnd,msg,wParam,lParam); default: return DefWindowProcA(hWnd, msg, wParam, lParam); }