On 10/19/2014 18:44, Dan Bassi wrote:
+ /* Old text is a null pointer due to HeapAlloc() failing, therefore unable to perform strcmpW so assume text has changed */ + if (!tiOld->pszText) + return TRUE; + I don't think you should necessary assume it's changed.
/* Text has changed and it's not a callback */ - if ((tvChange->mask & TVIF_TEXT) && (tiOld->pszText != tiNew->pszText) && + if ((tvChange->mask & TVIF_TEXT) && (strcmpW(tiOld->pszText, tiNew->pszText) != 0) && tiNew->pszText != LPSTR_TEXTCALLBACKW) return TRUE;
This is wrong, you can't compare if it's a special callback value.
+ originalItem.pszText = HeapAlloc(GetProcessHeap(), 0, originalItem.cchTextMax * sizeof(WCHAR)); Normally comctl32 code uses Alloc()/Free() functions.
This patch needs tests first, those tests should cover all possible combinations regarding callback cases, different pointers but same data, same data but different pointers, maybe something else.