Nikolay Sivov : comctl32/tooltips: Add a helper to free tool text.

Alexandre Julliard julliard at winehq.org
Tue May 21 16:45:22 CDT 2019


Module: wine
Branch: master
Commit: 4da84a13189e1c714dba01fcfc221b8dcb7a6f7f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4da84a13189e1c714dba01fcfc221b8dcb7a6f7f

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue May 21 13:15:54 2019 +0300

comctl32/tooltips: Add a helper to free tool text.

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

---

 dlls/comctl32/tooltips.c | 48 ++++++++++++++++++------------------------------
 1 file changed, 18 insertions(+), 30 deletions(-)

diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c
index b1e8f51..163821a 100644
--- a/dlls/comctl32/tooltips.c
+++ b/dlls/comctl32/tooltips.c
@@ -1140,6 +1140,16 @@ static void TOOLTIPS_ResetSubclass (const TTTOOL_INFO *toolPtr)
             TOOLTIPS_SubclassProc, 1, 0);
 }
 
+static void TOOLTIPS_FreeToolText(TTTOOL_INFO *toolPtr)
+{
+    if (toolPtr->lpszText)
+    {
+        if (!IS_INTRESOURCE(toolPtr->lpszText) && toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
+            Free(toolPtr->lpszText);
+        toolPtr->lpszText = NULL;
+    }
+}
+
 static LRESULT
 TOOLTIPS_DelToolT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW)
 {
@@ -1163,14 +1173,8 @@ TOOLTIPS_DelToolT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW)
     /* make sure the tooltip has disappeared before deleting it */
     TOOLTIPS_Hide(infoPtr);
 
-    /* delete text string */
     toolPtr = &infoPtr->tools[nTool];
-    if (toolPtr->lpszText) {
-	if ( (toolPtr->lpszText != LPSTR_TEXTCALLBACKW) &&
-	     !IS_INTRESOURCE(toolPtr->lpszText) )
-	    Free (toolPtr->lpszText);
-    }
-
+    TOOLTIPS_FreeToolText (toolPtr);
     TOOLTIPS_ResetSubclass (toolPtr);
 
     /* delete tool from tool list */
@@ -1635,7 +1639,6 @@ TOOLTIPS_SetTitleT (TOOLTIPS_INFO *infoPtr, UINT_PTR uTitleIcon, LPCWSTR pszTitl
     return TRUE;
 }
 
-
 static LRESULT
 TOOLTIPS_SetToolInfoT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW)
 {
@@ -1660,12 +1663,7 @@ TOOLTIPS_SetToolInfoT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW)
     toolPtr->rect   = ti->rect;
     toolPtr->hinst  = ti->hinst;
 
-    if ( (toolPtr->lpszText) &&
-         !IS_INTRESOURCE(toolPtr->lpszText) ) {
-        if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
-            Free (toolPtr->lpszText);
-        toolPtr->lpszText = NULL;
-    }
+    TOOLTIPS_FreeToolText (toolPtr);
 
     if (IS_INTRESOURCE(ti->lpszText)) {
 	TRACE("set string id %x\n", LOWORD(ti->lpszText));
@@ -1788,6 +1786,8 @@ TOOLTIPS_UpdateTipTextT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW
     /* copy tool text */
     toolPtr->hinst  = ti->hinst;
 
+    TOOLTIPS_FreeToolText(toolPtr);
+
     if (IS_INTRESOURCE(ti->lpszText)){
 	toolPtr->lpszText = ti->lpszText;
     }
@@ -1795,12 +1795,6 @@ TOOLTIPS_UpdateTipTextT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW
 	if (ti->lpszText == LPSTR_TEXTCALLBACKW)
 	    toolPtr->lpszText = LPSTR_TEXTCALLBACKW;
 	else {
-	    if ( (toolPtr->lpszText)  &&
-		 !IS_INTRESOURCE(toolPtr->lpszText) ) {
-		if( toolPtr->lpszText != LPSTR_TEXTCALLBACKW)
-                    Free (toolPtr->lpszText);
-		toolPtr->lpszText = NULL;
-	    }
 	    if (ti->lpszText) {
 		if (isW) {
 		    INT len = lstrlenW (ti->lpszText);
@@ -1867,17 +1861,11 @@ TOOLTIPS_Destroy (TOOLTIPS_INFO *infoPtr)
 
     /* free tools */
     if (infoPtr->tools) {
-	for (i = 0; i < infoPtr->uNumTools; i++) {
-	    toolPtr = &infoPtr->tools[i];
-	    if (toolPtr->lpszText) {
-		if ( (toolPtr->lpszText != LPSTR_TEXTCALLBACKW) &&
-		     !IS_INTRESOURCE(toolPtr->lpszText) )
-		{
-		    Free (toolPtr->lpszText);
-		    toolPtr->lpszText = NULL;
-		}
-	    }
+        for (i = 0; i < infoPtr->uNumTools; i++)
+        {
+            toolPtr = &infoPtr->tools[i];
 
+            TOOLTIPS_FreeToolText (toolPtr);
             TOOLTIPS_ResetSubclass (toolPtr);
         }
 




More information about the wine-cvs mailing list