From 57dec7677816446763d280f55a9b1a5cebef6436 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Fri, 1 Dec 2017 08:30:17 +0300 Subject: [PATCH] comctl32/syslink: Fix return value for LM_GETIDEALSIZE. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/comctl32/syslink.c | 12 +++++------ dlls/comctl32/tests/syslink.c | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/dlls/comctl32/syslink.c b/dlls/comctl32/syslink.c index 339c7282477..67a1a60a85c 100644 --- a/dlls/comctl32/syslink.c +++ b/dlls/comctl32/syslink.c @@ -1472,7 +1472,7 @@ static BOOL SYSLINK_NoNextLink (const SYSLINK_INFO *infoPtr, BOOL Prev) * SYSLINK_GetIdealSize * Calculates the ideal size of a link control at a given maximum width. */ -static VOID SYSLINK_GetIdealSize (const SYSLINK_INFO *infoPtr, int cxMaxWidth, LPSIZE lpSize) +static LONG SYSLINK_GetIdealSize (const SYSLINK_INFO *infoPtr, int cxMaxWidth, SIZE *lpSize) { RECT rc; HDC hdc; @@ -1493,6 +1493,8 @@ static VOID SYSLINK_GetIdealSize (const SYSLINK_INFO *infoPtr, int cxMaxWidth, L lpSize->cx = rc.right; lpSize->cy = rc.bottom; } + + return rc.bottom; } /*********************************************************************** @@ -1664,11 +1666,9 @@ static LRESULT WINAPI SysLinkWindowProc(HWND hwnd, UINT message, case LM_GETIDEALHEIGHT: if (lParam) - { - /* LM_GETIDEALSIZE */ - SYSLINK_GetIdealSize(infoPtr, (int)wParam, (LPSIZE)lParam); - } - return SYSLINK_GetIdealHeight(infoPtr); + return SYSLINK_GetIdealSize(infoPtr, (int)wParam, (SIZE *)lParam); + else + return SYSLINK_GetIdealHeight(infoPtr); case WM_SETFOCUS: return SYSLINK_SetFocus(infoPtr); diff --git a/dlls/comctl32/tests/syslink.c b/dlls/comctl32/tests/syslink.c index 382c89d2089..a6b90b6a25b 100644 --- a/dlls/comctl32/tests/syslink.c +++ b/dlls/comctl32/tests/syslink.c @@ -205,6 +205,43 @@ static void test_create_syslink(void) DestroyWindow(hWndSysLink); } +static void test_LM_GETIDEALHEIGHT(void) +{ + HWND hwnd; + LONG ret; + + hwnd = create_syslink(WS_CHILD | WS_TABSTOP | WS_VISIBLE, hWndParent); + ok(hwnd != NULL, "Failed to create SysLink window.\n"); + + ret = SendMessageA(hwnd, LM_GETIDEALHEIGHT, 0, 0); + ok(ret > 0, "Unexpected ideal height, %d.\n", ret); + + DestroyWindow(hwnd); +} + +static void test_LM_GETIDEALSIZE(void) +{ + HWND hwnd; + LONG ret; + SIZE sz; + + hwnd = create_syslink(WS_CHILD | WS_TABSTOP | WS_VISIBLE, hWndParent); + ok(hwnd != NULL, "Failed to create SysLink window.\n"); + + memset(&sz, 0, sizeof(sz)); + ret = SendMessageA(hwnd, LM_GETIDEALSIZE, 0, (LPARAM)&sz); + ok(ret > 0, "Unexpected return value, %d.\n", ret); + if (sz.cy == 0) + win_skip("LM_GETIDEALSIZE is not supported.\n"); + else + { + ok(sz.cx > 5, "Unexpected ideal width, %d.\n", sz.cx); + ok(sz.cy == ret, "Unexpected ideal height, %d.\n", sz.cy); + } + + DestroyWindow(hwnd); +} + START_TEST(syslink) { ULONG_PTR ctx_cookie; @@ -231,6 +268,8 @@ START_TEST(syslink) flush_events(); test_create_syslink(); + test_LM_GETIDEALHEIGHT(); + test_LM_GETIDEALSIZE(); DestroyWindow(hWndParent); unload_v6_module(ctx_cookie, hCtx);