Bruno Jesus : user32: Fix support for CB_SETDROPPEDWIDTH in combobox.
Alexandre Julliard
julliard at winehq.org
Fri Sep 2 13:13:39 CDT 2011
Module: wine
Branch: master
Commit: 7c76a79ffa199c892f9d555bc12e2dd4fe58b1b1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7c76a79ffa199c892f9d555bc12e2dd4fe58b1b1
Author: Bruno Jesus <00cpxxx at gmail.com>
Date: Thu Sep 1 02:30:50 2011 -0300
user32: Fix support for CB_SETDROPPEDWIDTH in combobox.
---
dlls/user32/combo.c | 18 ++++++++++++++----
dlls/user32/tests/combo.c | 22 ++++++++++++++++------
2 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/combo.c b/dlls/user32/combo.c
index 9c22df6..4a839ec 100644
--- a/dlls/user32/combo.c
+++ b/dlls/user32/combo.c
@@ -2112,14 +2112,24 @@ LRESULT ComboWndProc_common( HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar
return SendMessageW(lphc->hWndLBox, LB_GETLOCALE, 0, 0);
case CB_SETLOCALE:
return SendMessageW(lphc->hWndLBox, LB_SETLOCALE, wParam, 0);
+ case CB_SETDROPPEDWIDTH:
+ if( (CB_GETTYPE(lphc) == CBS_SIMPLE) ||
+ (INT)wParam >= 32768 )
+ return CB_ERR;
+ /* new value must be higher than combobox width */
+ if((INT)wParam >= lphc->droppedRect.right - lphc->droppedRect.left)
+ lphc->droppedWidth = wParam;
+ else if(wParam)
+ lphc->droppedWidth = 0;
+
+ /* recalculate the combobox area */
+ CBCalcPlacement(hwnd, lphc, &lphc->textRect, &lphc->buttonRect, &lphc->droppedRect );
+
+ /* fall through */
case CB_GETDROPPEDWIDTH:
if( lphc->droppedWidth )
return lphc->droppedWidth;
return lphc->droppedRect.right - lphc->droppedRect.left;
- case CB_SETDROPPEDWIDTH:
- if( (CB_GETTYPE(lphc) != CBS_SIMPLE) &&
- (INT)wParam < 32768 ) lphc->droppedWidth = (INT)wParam;
- return CB_ERR;
case CB_GETDROPPEDCONTROLRECT:
if( lParam ) CBGetDroppedControlRect(lphc, (LPRECT)lParam );
return CB_OKAY;
diff --git a/dlls/user32/tests/combo.c b/dlls/user32/tests/combo.c
index eabeeb0..af23f96 100644
--- a/dlls/user32/tests/combo.c
+++ b/dlls/user32/tests/combo.c
@@ -406,25 +406,35 @@ static void test_changesize( DWORD style)
}
ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, -1, 0);
- todo_wine ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
- todo_wine ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, 0, 0);
- todo_wine ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, clwidth - 1, 0);
- todo_wine ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
- todo_wine ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, clwidth << 1, 0);
- todo_wine ok( ddwidth == (clwidth << 1), "drop-width is %d vs %d\n", ddwidth, clwidth << 1);
+ ok( ddwidth == (clwidth << 1), "drop-width is %d vs %d\n", ddwidth, clwidth << 1);
ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
ok( ddwidth == (clwidth << 1), "drop-width is %d vs %d\n", ddwidth, clwidth << 1);
+ ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, 0, 0);
+ ok( ddwidth == (clwidth << 1), "drop-width is %d vs %d\n", ddwidth, clwidth << 1);
+ ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
+ ok( ddwidth == (clwidth << 1), "drop-width is %d vs %d\n", ddwidth, clwidth << 1);
+
+ ddwidth = SendMessageA(hCombo, CB_SETDROPPEDWIDTH, 1, 0);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+ ddwidth = SendMessageA(hCombo, CB_GETDROPPEDWIDTH, 0, 0);
+ ok( ddwidth == clwidth + 2, "drop-width is %d vs %d\n", ddwidth, clwidth + 2);
+
DestroyWindow(hCombo);
}
More information about the wine-cvs
mailing list