Module: wine Branch: master Commit: 698c7f0f3f8fa1d0ed33c629fa9e93279085d39d URL: http://source.winehq.org/git/wine.git/?a=commit;h=698c7f0f3f8fa1d0ed33c629fa...
Author: Huw Davies huw@codeweavers.com Date: Thu Mar 28 10:21:22 2013 +0000
user32: Invalidate the listbox in LB_SETCOUNT.
---
dlls/user32/listbox.c | 2 + dlls/user32/tests/listbox.c | 78 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/listbox.c b/dlls/user32/listbox.c index 0f4a8be..64691e4 100644 --- a/dlls/user32/listbox.c +++ b/dlls/user32/listbox.c @@ -1767,6 +1767,8 @@ static LRESULT LISTBOX_SetCount( LB_DESCR *descr, INT count ) if ((ret = LISTBOX_RemoveItem( descr, (descr->nb_items - 1) )) < 0) return ret; } + + InvalidateRect( descr->self, NULL, TRUE ); return LB_OKAY; }
diff --git a/dlls/user32/tests/listbox.c b/dlls/user32/tests/listbox.c index ef4a35b..5d96f5c 100644 --- a/dlls/user32/tests/listbox.c +++ b/dlls/user32/tests/listbox.c @@ -274,30 +274,42 @@ static LRESULT WINAPI main_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARA return DefWindowProc(hwnd, msg, wparam, lparam); }
-static void test_ownerdraw(void) +static HWND create_parent( void ) { WNDCLASS cls; - HWND parent, hLB; - INT ret; - RECT rc; + HWND parent; + static ATOM class;
- cls.style = 0; - cls.lpfnWndProc = main_window_proc; - cls.cbClsExtra = 0; - cls.cbWndExtra = 0; - cls.hInstance = GetModuleHandle(0); - cls.hIcon = 0; - cls.hCursor = LoadCursor(0, IDC_ARROW); - cls.hbrBackground = GetStockObject(WHITE_BRUSH); - cls.lpszMenuName = NULL; - cls.lpszClassName = "main_window_class"; - ok (RegisterClass(&cls), "RegisterClass failed\n"); + if (!class) + { + cls.style = 0; + cls.lpfnWndProc = main_window_proc; + cls.cbClsExtra = 0; + cls.cbWndExtra = 0; + cls.hInstance = GetModuleHandle(0); + cls.hIcon = 0; + cls.hCursor = LoadCursor(0, IDC_ARROW); + cls.hbrBackground = GetStockObject(WHITE_BRUSH); + cls.lpszMenuName = NULL; + cls.lpszClassName = "main_window_class"; + class = RegisterClass( &cls ); + }
parent = CreateWindowEx(0, "main_window_class", NULL, WS_POPUP | WS_VISIBLE, 100, 100, 400, 400, GetDesktopWindow(), 0, GetModuleHandle(0), NULL); + return parent; +} + +static void test_ownerdraw(void) +{ + HWND parent, hLB; + INT ret; + RECT rc; + + parent = create_parent(); assert(parent);
hLB = create_listbox(LBS_OWNERDRAWFIXED | WS_CHILD | WS_VISIBLE, parent); @@ -1498,6 +1510,41 @@ static void test_listbox_dlgdir(void) DestroyWindow(hWnd); }
+static void test_set_count( void ) +{ + HWND parent, listbox; + LONG ret; + RECT r; + + parent = create_parent(); + listbox = create_listbox( LBS_OWNERDRAWFIXED | LBS_NODATA | WS_CHILD | WS_VISIBLE, parent ); + + UpdateWindow( listbox ); + GetUpdateRect( listbox, &r, TRUE ); + ok( IsRectEmpty( &r ), "got non-empty rect\n"); + + ret = SendMessage( listbox, LB_SETCOUNT, 100, 0 ); + ok( ret == 0, "got %d\n", ret ); + ret = SendMessage( listbox, LB_GETCOUNT, 0, 0 ); + ok( ret == 100, "got %d\n", ret ); + + GetUpdateRect( listbox, &r, TRUE ); + ok( !IsRectEmpty( &r ), "got empty rect\n"); + + ValidateRect( listbox, NULL ); + GetUpdateRect( listbox, &r, TRUE ); + ok( IsRectEmpty( &r ), "got non-empty rect\n"); + + ret = SendMessage( listbox, LB_SETCOUNT, 99, 0 ); + ok( ret == 0, "got %d\n", ret ); + + GetUpdateRect( listbox, &r, TRUE ); + ok( !IsRectEmpty( &r ), "got empty rect\n"); + + DestroyWindow( listbox ); + DestroyWindow( parent ); +} + START_TEST(listbox) { const struct listbox_test SS = @@ -1576,4 +1623,5 @@ START_TEST(listbox) test_listbox_item_data(); test_listbox_LB_DIR(); test_listbox_dlgdir(); + test_set_count(); }