Commit 38d04b8f authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

Allow to deselect all items by sending CB_SETCURSEL(-1) to the combo.

parent f0f8da58
...@@ -1054,10 +1054,10 @@ static LRESULT COMBO_Paint(LPHEADCOMBO lphc, HDC hParamDC) ...@@ -1054,10 +1054,10 @@ static LRESULT COMBO_Paint(LPHEADCOMBO lphc, HDC hParamDC)
*/ */
static INT CBUpdateLBox( LPHEADCOMBO lphc ) static INT CBUpdateLBox( LPHEADCOMBO lphc )
{ {
INT length, idx, ret; INT length, idx;
LPSTR pText = NULL; LPSTR pText = NULL;
idx = ret = LB_ERR; idx = LB_ERR;
length = CB_GETEDITTEXTLENGTH( lphc ); length = CB_GETEDITTEXTLENGTH( lphc );
if( length > 0 ) if( length > 0 )
...@@ -1071,22 +1071,16 @@ static INT CBUpdateLBox( LPHEADCOMBO lphc ) ...@@ -1071,22 +1071,16 @@ static INT CBUpdateLBox( LPHEADCOMBO lphc )
else pText[0] = '\0'; else pText[0] = '\0';
idx = SendMessageA( lphc->hWndLBox, LB_FINDSTRING, idx = SendMessageA( lphc->hWndLBox, LB_FINDSTRING,
(WPARAM)(-1), (LPARAM)pText ); (WPARAM)(-1), (LPARAM)pText );
if( idx == LB_ERR ) idx = 0; /* select first item */
else ret = idx;
HeapFree( GetProcessHeap(), 0, pText ); HeapFree( GetProcessHeap(), 0, pText );
} }
/* select entry */
SendMessageA( lphc->hWndLBox, LB_SETCURSEL, (WPARAM)idx, 0 );
if( idx >= 0 ) if( idx >= 0 )
{ {
SendMessageA( lphc->hWndLBox, LB_SETTOPINDEX, (WPARAM)idx, 0 ); SendMessageA( lphc->hWndLBox, LB_SETTOPINDEX, (WPARAM)idx, 0 );
/* probably superfluous but Windows sends this too */ /* probably superfluous but Windows sends this too */
SendMessageA( lphc->hWndLBox, LB_SETCARETINDEX, (WPARAM)idx, 0 ); SendMessageA( lphc->hWndLBox, LB_SETCARETINDEX, (WPARAM)idx, 0 );
} }
return ret; return idx;
} }
/*********************************************************************** /***********************************************************************
...@@ -1101,21 +1095,6 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT index ) ...@@ -1101,21 +1095,6 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT index )
TRACE("\t %i\n", index ); TRACE("\t %i\n", index );
if( index == -1 )
{
length = CB_GETEDITTEXTLENGTH( lphc );
if( length )
{
if( (pText = (LPSTR) HeapAlloc( GetProcessHeap(), 0, length + 1)) )
{
GetWindowTextA( lphc->hWndEdit, pText, length + 1 );
index = SendMessageA( lphc->hWndLBox, LB_FINDSTRING,
(WPARAM)(-1), (LPARAM)pText );
HeapFree( GetProcessHeap(), 0, pText );
}
}
}
if( index >= 0 ) /* got an entry */ if( index >= 0 ) /* got an entry */
{ {
length = SendMessageA( lphc->hWndLBox, LB_GETTEXTLEN, (WPARAM)index, 0); length = SendMessageA( lphc->hWndLBox, LB_GETTEXTLEN, (WPARAM)index, 0);
...@@ -1125,15 +1104,16 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT index ) ...@@ -1125,15 +1104,16 @@ static void CBUpdateEdit( LPHEADCOMBO lphc , INT index )
{ {
SendMessageA( lphc->hWndLBox, LB_GETTEXT, SendMessageA( lphc->hWndLBox, LB_GETTEXT,
(WPARAM)index, (LPARAM)pText ); (WPARAM)index, (LPARAM)pText );
lphc->wState |= CBF_NOEDITNOTIFY;
SendMessageA( lphc->hWndEdit, WM_SETTEXT, 0, (LPARAM)pText );
SendMessageA( lphc->hWndEdit, EM_SETSEL, 0, (LPARAM)(-1) );
HeapFree( GetProcessHeap(), 0, pText );
} }
} }
} }
lphc->wState |= CBF_NOEDITNOTIFY;
SendMessageA( lphc->hWndEdit, WM_SETTEXT, 0, pText ? (LPARAM)pText : (LPARAM)"" );
if( pText )
HeapFree( GetProcessHeap(), 0, pText );
} }
/*********************************************************************** /***********************************************************************
...@@ -1238,12 +1218,6 @@ static void CBRollUp( LPHEADCOMBO lphc, BOOL ok, BOOL bButton ) ...@@ -1238,12 +1218,6 @@ static void CBRollUp( LPHEADCOMBO lphc, BOOL ok, BOOL bButton )
{ {
RECT rect; RECT rect;
/*
* It seems useful to send the WM_LBUTTONUP with (-1,-1) when cancelling
* and with (0,0) (anywhere in the listbox) when Oking.
*/
SendMessageA( lphc->hWndLBox, WM_LBUTTONUP, 0, ok ? (LPARAM)0 : (LPARAM)(-1) );
lphc->wState &= ~CBF_DROPPED; lphc->wState &= ~CBF_DROPPED;
ShowWindow( lphc->hWndLBox, SW_HIDE ); ShowWindow( lphc->hWndLBox, SW_HIDE );
if(GetCapture() == lphc->hWndLBox) if(GetCapture() == lphc->hWndLBox)
...@@ -1251,7 +1225,6 @@ static void CBRollUp( LPHEADCOMBO lphc, BOOL ok, BOOL bButton ) ...@@ -1251,7 +1225,6 @@ static void CBRollUp( LPHEADCOMBO lphc, BOOL ok, BOOL bButton )
ReleaseCapture(); ReleaseCapture();
} }
if( CB_GETTYPE(lphc) == CBS_DROPDOWN ) if( CB_GETTYPE(lphc) == CBS_DROPDOWN )
{ {
INT index = SendMessageA( lphc->hWndLBox, LB_GETCURSEL, 0, 0 ); INT index = SendMessageA( lphc->hWndLBox, LB_GETCURSEL, 0, 0 );
...@@ -1464,6 +1437,8 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd ) ...@@ -1464,6 +1437,8 @@ static LRESULT COMBO_Command( LPHEADCOMBO lphc, WPARAM wParam, HWND hWnd )
{ {
INT index = SendMessageA(lphc->hWndLBox, LB_GETCURSEL, 0, 0); INT index = SendMessageA(lphc->hWndLBox, LB_GETCURSEL, 0, 0);
CBUpdateEdit( lphc, index ); CBUpdateEdit( lphc, index );
/* select text in edit, as Windows does */
SendMessageA( lphc->hWndEdit, EM_SETSEL, 0, (LPARAM)(-1) );
} }
else else
InvalidateRect(CB_HWND(lphc), &lphc->textRect, TRUE); InvalidateRect(CB_HWND(lphc), &lphc->textRect, TRUE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment