Nikolay Sivov : comctl32/tooltips: Return full toolinfo from TTM_GETCURRENTTOOL.

Alexandre Julliard julliard at winehq.org
Mon Sep 11 15:07:59 CDT 2017


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon Sep 11 12:40:03 2017 +0300

comctl32/tooltips: Return full toolinfo from TTM_GETCURRENTTOOL.

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

---

 dlls/comctl32/tests/tooltips.c | 37 ++++++++++--------
 dlls/comctl32/tooltips.c       | 87 +++++++++++++-----------------------------
 2 files changed, 47 insertions(+), 77 deletions(-)

diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c
index 1fb9579..be6ab40 100644
--- a/dlls/comctl32/tests/tooltips.c
+++ b/dlls/comctl32/tests/tooltips.c
@@ -151,8 +151,8 @@ static void test_customdraw(void) {
 
    DWORD       iterationNumber;
    WNDCLASSA wc;
-   LRESULT   lResult;
    POINT orig_pos;
+   LRESULT ret;
 
    /* Create a class to use the custom draw wndproc */
    wc.style = CS_HREDRAW | CS_VREDRAW;
@@ -216,8 +216,8 @@ static void test_customdraw(void) {
        toolInfo.lpszText = (LPSTR)"This is a test tooltip";
        toolInfo.lParam = 0xdeadbeef;
        GetClientRect (parent, &toolInfo.rect);
-       lResult = SendMessageA(hwndTip, TTM_ADDTOOLA, 0, (LPARAM)&toolInfo);
-       ok(lResult, "Adding the tool to the tooltip failed\n");
+       ret = SendMessageA(hwndTip, TTM_ADDTOOLA, 0, (LPARAM)&toolInfo);
+       ok(ret, "Failed to add the tool.\n");
 
        /* Make tooltip appear quickly */
        SendMessageA(hwndTip, TTM_SETDELAYTIME, TTDT_INITIAL, MAKELPARAM(1,0));
@@ -236,6 +236,20 @@ static void test_customdraw(void) {
               expectedResults[iterationNumber].ExpectedCalls);
        }
 
+       ret = SendMessageA(hwndTip, TTM_GETCURRENTTOOLA, 0, 0);
+       ok(ret, "Failed to get current tool %#lx.\n", ret);
+
+       memset(&toolInfo, 0xcc, sizeof(toolInfo));
+       toolInfo.cbSize = sizeof(toolInfo);
+       toolInfo.lpszText = NULL;
+       toolInfo.lpReserved = (void *)0xdeadbeef;
+       SendMessageA(hwndTip, TTM_GETCURRENTTOOLA, 0, (LPARAM)&toolInfo);
+       ok(toolInfo.hwnd == parent, "Unexpected hwnd %p.\n", toolInfo.hwnd);
+       ok(toolInfo.hinst == GetModuleHandleA(NULL), "Unexpected hinst %p.\n", toolInfo.hinst);
+       ok(toolInfo.uId == 0x1234abcd, "Unexpected uId %lx.\n", toolInfo.uId);
+       ok(toolInfo.lParam == 0, "Unexpected lParam %lx.\n", toolInfo.lParam);
+       ok(toolInfo.lpReserved == (void *)0xdeadbeef, "Unexpected lpReserved %p.\n", toolInfo.lpReserved);
+
        /* Clean up */
        DestroyWindow(hwndTip);
        DestroyWindow(parent);
@@ -491,9 +505,8 @@ static void test_ttm_gettoolinfo(void)
     HWND hwnd;
     DWORD r;
 
-    hwnd = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL, 0,
-                           10, 10, 300, 100,
-                           NULL, NULL, NULL, 0);
+    hwnd = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL, 0, 10, 10, 300, 100, NULL, NULL, NULL, 0);
+    ok(hwnd != NULL, "Failed to create tooltip control.\n");
 
     ti.cbSize = TTTOOLINFOA_V2_SIZE;
     ti.hwnd = NULL;
@@ -611,11 +624,7 @@ static void test_ttm_gettoolinfo(void)
     hwnd = CreateWindowExW(0, TOOLTIPS_CLASSW, NULL, 0,
                            10, 10, 300, 100,
                            NULL, NULL, NULL, 0);
-    if(!hwnd)
-    {
-        win_skip("CreateWindowExW() not supported. Skipping.\n");
-        return;
-    }
+    ok(hwnd != NULL, "Failed to create tooltip window.\n");
 
     tiW.cbSize = TTTOOLINFOW_V1_SIZE - 1;
     tiW.hwnd = NULL;
@@ -757,11 +766,7 @@ static void test_longtextW(void)
     hwnd = CreateWindowExW(0, TOOLTIPS_CLASSW, NULL, 0,
                            10, 10, 300, 100,
                            NULL, NULL, NULL, 0);
-    if(!hwnd)
-    {
-        win_skip("CreateWindowExW() not supported. Skipping.\n");
-        return;
-    }
+    ok(hwnd != NULL, "Failed to create tooltip window.\n");
 
     toolinfoW.cbSize = TTTOOLINFOW_V2_SIZE;
     toolinfoW.hwnd = NULL;
diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c
index 56dc743..41146f1 100644
--- a/dlls/comctl32/tooltips.c
+++ b/dlls/comctl32/tooltips.c
@@ -953,8 +953,16 @@ TOOLTIPS_GetToolFromPoint (const TOOLTIPS_INFO *infoPtr, HWND hwnd, const POINT
 }
 
 static inline void
-TOOLTIPS_CopyInfoT (const TTTOOL_INFO *toolPtr, TTTOOLINFOW *ti, BOOL isW)
+TOOLTIPS_CopyInfoT (const TOOLTIPS_INFO *infoPtr, INT index, TTTOOLINFOW *ti, BOOL isW)
 {
+    const TTTOOL_INFO *toolPtr = &infoPtr->tools[index];
+
+    ti->uFlags = toolPtr->uFlags;
+    ti->hwnd   = toolPtr->hwnd;
+    ti->uId    = toolPtr->uId;
+    ti->rect   = toolPtr->rect;
+    ti->hinst  = toolPtr->hinst;
+
     if (ti->lpszText) {
         if (toolPtr->lpszText == NULL ||
             IS_INTRESOURCE(toolPtr->lpszText) ||
@@ -967,6 +975,11 @@ TOOLTIPS_CopyInfoT (const TTTOOL_INFO *toolPtr, TTTOOLINFOW *ti, BOOL isW)
             WideCharToMultiByte(CP_ACP, 0, toolPtr->lpszText, -1,
                                 (LPSTR)ti->lpszText, MAX_TEXT_SIZE_A, NULL, NULL);
     }
+
+    if (ti->cbSize >= TTTOOLINFOW_V2_SIZE)
+        ti->lParam = toolPtr->lParam;
+
+    /* lpReserved is intentionally not set. */
 }
 
 static BOOL
@@ -1220,28 +1233,14 @@ static LRESULT
 TOOLTIPS_EnumToolsT (const TOOLTIPS_INFO *infoPtr, UINT uIndex, TTTOOLINFOW *ti,
                      BOOL isW)
 {
-    TTTOOL_INFO *toolPtr;
-
-    if (!ti) return FALSE;
-    if (ti->cbSize < TTTOOLINFOW_V1_SIZE)
+    if (!ti || ti->cbSize < TTTOOLINFOW_V1_SIZE)
 	return FALSE;
     if (uIndex >= infoPtr->uNumTools)
 	return FALSE;
 
     TRACE("index=%u\n", uIndex);
 
-    toolPtr = &infoPtr->tools[uIndex];
-
-    /* copy tool data */
-    ti->uFlags   = toolPtr->uFlags;
-    ti->hwnd     = toolPtr->hwnd;
-    ti->uId      = toolPtr->uId;
-    ti->rect     = toolPtr->rect;
-    ti->hinst    = toolPtr->hinst;
-    TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
-
-    if (ti->cbSize >= TTTOOLINFOA_V2_SIZE)
-	ti->lParam = toolPtr->lParam;
+    TOOLTIPS_CopyInfoT (infoPtr, uIndex, ti, isW);
 
     return TRUE;
 }
@@ -1271,31 +1270,15 @@ TOOLTIPS_GetBubbleSize (const TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *lpToolI
 static LRESULT
 TOOLTIPS_GetCurrentToolT (const TOOLTIPS_INFO *infoPtr, TTTOOLINFOW *ti, BOOL isW)
 {
-    TTTOOL_INFO *toolPtr;
-
     if (ti) {
         if (ti->cbSize < TTTOOLINFOW_V1_SIZE)
             return FALSE;
 
-	if (infoPtr->nCurrentTool > -1) {
-	    toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
-
-	    /* copy tool data */
-	    ti->uFlags   = toolPtr->uFlags;
-	    ti->rect     = toolPtr->rect;
-	    ti->hinst    = toolPtr->hinst;
-	    TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
-
-	    if (ti->cbSize >= TTTOOLINFOW_V2_SIZE)
-		ti->lParam = toolPtr->lParam;
-
-	    return TRUE;
-	}
-	else
-	    return FALSE;
+        if (infoPtr->nCurrentTool != -1)
+            TOOLTIPS_CopyInfoT (infoPtr, infoPtr->nCurrentTool, ti, isW);
     }
-    else
-	return (infoPtr->nCurrentTool != -1);
+
+    return infoPtr->nCurrentTool != -1;
 }
 
 
@@ -1400,8 +1383,8 @@ TOOLTIPS_GetToolCount (const TOOLTIPS_INFO *infoPtr)
 static LRESULT
 TOOLTIPS_GetToolInfoT (const TOOLTIPS_INFO *infoPtr, TTTOOLINFOW *ti, BOOL isW)
 {
-    TTTOOL_INFO *toolPtr;
     INT nTool;
+    HWND hwnd;
 
     if (!ti) return FALSE;
     if (ti->cbSize < TTTOOLINFOW_V1_SIZE)
@@ -1415,16 +1398,9 @@ TOOLTIPS_GetToolInfoT (const TOOLTIPS_INFO *infoPtr, TTTOOLINFOW *ti, BOOL isW)
 
     TRACE("tool %d\n", nTool);
 
-    toolPtr = &infoPtr->tools[nTool];
-
-    /* copy tool data */
-    ti->uFlags   = toolPtr->uFlags;
-    ti->rect     = toolPtr->rect;
-    ti->hinst    = toolPtr->hinst;
-    TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
-
-    if (ti->cbSize >= TTTOOLINFOW_V2_SIZE)
-	ti->lParam = toolPtr->lParam;
+    hwnd = ti->hwnd;
+    TOOLTIPS_CopyInfoT (infoPtr, nTool, ti, isW);
+    ti->hwnd = hwnd;
 
     return TRUE;
 }
@@ -1434,7 +1410,6 @@ static LRESULT
 TOOLTIPS_HitTestT (const TOOLTIPS_INFO *infoPtr, LPTTHITTESTINFOW lptthit,
                    BOOL isW)
 {
-    TTTOOL_INFO *toolPtr;
     INT nTool;
 
     if (lptthit == 0)
@@ -1447,18 +1422,8 @@ TOOLTIPS_HitTestT (const TOOLTIPS_INFO *infoPtr, LPTTHITTESTINFOW lptthit,
     TRACE("tool %d!\n", nTool);
 
     /* copy tool data */
-    if (lptthit->ti.cbSize >= TTTOOLINFOW_V1_SIZE) {
-	toolPtr = &infoPtr->tools[nTool];
-
-	lptthit->ti.uFlags   = toolPtr->uFlags;
-	lptthit->ti.hwnd     = toolPtr->hwnd;
-	lptthit->ti.uId      = toolPtr->uId;
-	lptthit->ti.rect     = toolPtr->rect;
-	lptthit->ti.hinst    = toolPtr->hinst;
-	TOOLTIPS_CopyInfoT (toolPtr, &lptthit->ti, isW);
-	if (lptthit->ti.cbSize >= TTTOOLINFOW_V2_SIZE)
-	    lptthit->ti.lParam   = toolPtr->lParam;
-    }
+    if (lptthit->ti.cbSize >= TTTOOLINFOW_V1_SIZE)
+        TOOLTIPS_CopyInfoT (infoPtr, nTool, &lptthit->ti, isW);
 
     return TRUE;
 }




More information about the wine-cvs mailing list