Nikolay Sivov : comctl32/syslink: Fix return value for LM_GETIDEALSIZE.

Alexandre Julliard julliard at winehq.org
Fri Dec 1 14:08:18 CST 2017


Module: wine
Branch: master
Commit: 57dec7677816446763d280f55a9b1a5cebef6436
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=57dec7677816446763d280f55a9b1a5cebef6436

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Dec  1 08:30:17 2017 +0300

comctl32/syslink: Fix return value for LM_GETIDEALSIZE.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 339c728..67a1a60 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 382c89d..a6b90b6 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);




More information about the wine-cvs mailing list