Skip to content

Commit

Permalink
[COMCTL32] Combobox Implement logic for set and get dropdown height C…
Browse files Browse the repository at this point in the history
…ORE-15833

by import of Wine commit
https://source.winehq.org/git/wine.git/commit/313c63e194aebdd517b3a85f8fe4d83acf170b62
merged from current Wine head.

Thanks to patches author Fabian Maurer
and also Doug Lyons for tests and adding initial the merge-patch.
  • Loading branch information
JoachimHenze committed Mar 16, 2019
1 parent 05886b8 commit e3e173f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 20 deletions.
43 changes: 23 additions & 20 deletions dll/win32/comctl32/combo.c
Expand Up @@ -18,10 +18,6 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* TODO:
* - ComboBox_[GS]etMinVisible()
* - CB_GETMINVISIBLE, CB_SETMINVISIBLE
* - CB_SETTOPINDEX
*/

#include <stdarg.h>
Expand Down Expand Up @@ -459,6 +455,11 @@ static LRESULT COMBO_Create( HWND hwnd, LPHEADCOMBO lphc, HWND hwndParent, LONG
*/
lphc->wState |= CBF_MEASUREITEM;

/*
* Per default the comctl32 version of combo shows up to 30 items
*/
lphc->visibleItems = 30;

/* M$ IE 3.01 actually creates (and rapidly destroys) an ownerless combobox */

if( lphc->owner || !(style & WS_VISIBLE) )
Expand Down Expand Up @@ -1010,23 +1011,18 @@ static void CBDropDown( LPHEADCOMBO lphc )

if (nItems > 0)
{
int nHeight;
int nIHeight;

nIHeight = (int)SendMessageW(lphc->hWndLBox, LB_GETITEMHEIGHT, 0, 0);
int nIHeight = (int)SendMessageW(lphc->hWndLBox, LB_GETITEMHEIGHT, 0, 0);

nHeight = nIHeight*nItems;

if (nHeight < nDroppedHeight - COMBO_YBORDERSIZE())
nDroppedHeight = nHeight + COMBO_YBORDERSIZE();

if (nDroppedHeight < nHeight)
{
if (nItems < 5)
nDroppedHeight = (nItems+1)*nIHeight;
else if (nDroppedHeight < 6*nIHeight)
nDroppedHeight = 6*nIHeight;
}
if (lphc->dwStyle & CBS_NOINTEGRALHEIGHT)
{
nDroppedHeight -= 1;
}
else
{
if (nItems > lphc->visibleItems)
nItems = lphc->visibleItems;
nDroppedHeight = nItems * nIHeight + COMBO_YBORDERSIZE();
}
}

r.left = rect.left;
Expand Down Expand Up @@ -2135,6 +2131,13 @@ static LRESULT CALLBACK COMBO_WindowProc( HWND hwnd, UINT message, WPARAM wParam
return SendMessageW(lphc->hWndEdit, EM_LIMITTEXT, wParam, lParam);
return TRUE;

case CB_GETMINVISIBLE:
return lphc->visibleItems;

case CB_SETMINVISIBLE:
lphc->visibleItems = (INT)wParam;
return TRUE;

default:
if (message >= WM_USER)
WARN("unknown msg WM_USER+%04x wp=%04lx lp=%08lx\n", message - WM_USER, wParam, lParam );
Expand Down
1 change: 1 addition & 0 deletions dll/win32/comctl32/comctl32.h
Expand Up @@ -147,6 +147,7 @@ typedef struct
INT fixedOwnerDrawHeight;
INT droppedWidth; /* last two are not used unless set */
INT editHeight; /* explicitly */
INT visibleItems;
} HEADCOMBO, *LPHEADCOMBO;

extern BOOL COMBO_FlipListbox(HEADCOMBO *lphc, BOOL ok, BOOL bRedrawButton) DECLSPEC_HIDDEN;
Expand Down

0 comments on commit e3e173f

Please sign in to comment.