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