Akihiro Sagawa : comctl32: Add support for retrieving lpszText in TOOLINFO structure.
Alexandre Julliard
julliard at winehq.org
Thu Apr 12 15:23:12 CDT 2012
Module: wine
Branch: master
Commit: b48f394e4f3ee73eb2f974d19770d411d13f3e62
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b48f394e4f3ee73eb2f974d19770d411d13f3e62
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Thu Apr 12 00:42:55 2012 +0900
comctl32: Add support for retrieving lpszText in TOOLINFO structure.
---
dlls/comctl32/tests/tooltips.c | 16 ++++++++++++++++
dlls/comctl32/tooltips.c | 27 +++++++++++++++++++--------
2 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c
index 596598f..31504d1 100644
--- a/dlls/comctl32/tests/tooltips.c
+++ b/dlls/comctl32/tests/tooltips.c
@@ -322,6 +322,11 @@ static void test_gettext(void)
toolinfoA.lpszText = bufA;
SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
ok(strcmp(toolinfoA.lpszText, "") == 0, "lpszText should be an empty string\n");
+
+ toolinfoA.lpszText = bufA;
+ SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+ ok(toolinfoA.lpszText == NULL,
+ "expected NULL, got %p", toolinfoA.lpszText);
}
else
{
@@ -355,6 +360,12 @@ static void test_gettext(void)
SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
ok(strcmp(toolinfoA.lpszText, testtipA) == 0, "lpszText should be an empty string\n");
+ memset(bufA, 0x1f, sizeof(bufA));
+ toolinfoA.lpszText = bufA;
+ SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+ ok(strcmp(toolinfoA.lpszText, testtipA) == 0,
+ "expected %s, got %p\n", testtipA, toolinfoA.lpszText);
+
length = SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0);
ok(length == 0, "Expected 0, got %d\n", length);
}
@@ -378,6 +389,11 @@ static void test_gettext(void)
SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
ok(strcmp(toolinfoA.lpszText, testcallbackA) == 0,
"lpszText should be an (%s) string\n", testcallbackA);
+
+ toolinfoA.lpszText = bufA;
+ SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+ ok(toolinfoA.lpszText == LPSTR_TEXTCALLBACKA,
+ "expected LPSTR_TEXTCALLBACKA, got %p\n", toolinfoA.lpszText);
}
DestroyWindow(hwnd);
diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c
index 162867d..1d758b4 100644
--- a/dlls/comctl32/tooltips.c
+++ b/dlls/comctl32/tooltips.c
@@ -943,6 +943,21 @@ TOOLTIPS_GetToolFromPoint (const TOOLTIPS_INFO *infoPtr, HWND hwnd, const POINT
return -1;
}
+static inline void
+TOOLTIPS_CopyInfoT (const TTTOOL_INFO *toolPtr, TTTOOLINFOW *ti, BOOL isW)
+{
+ if (ti->lpszText) {
+ if (toolPtr->lpszText == NULL ||
+ IS_INTRESOURCE(toolPtr->lpszText) ||
+ toolPtr->lpszText == LPSTR_TEXTCALLBACKW)
+ ti->lpszText = toolPtr->lpszText;
+ else if (isW)
+ strcpyW (ti->lpszText, toolPtr->lpszText);
+ else
+ WideCharToMultiByte(CP_ACP, 0, toolPtr->lpszText, -1,
+ (LPSTR)ti->lpszText, INFOTIPSIZE, NULL, NULL);
+ }
+}
static BOOL
TOOLTIPS_IsWindowActive (HWND hwnd)
@@ -1199,8 +1214,7 @@ TOOLTIPS_EnumToolsT (const TOOLTIPS_INFO *infoPtr, UINT uIndex, TTTOOLINFOW *ti,
ti->uId = toolPtr->uId;
ti->rect = toolPtr->rect;
ti->hinst = toolPtr->hinst;
-/* ti->lpszText = toolPtr->lpszText; */
- ti->lpszText = NULL; /* FIXME */
+ TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
if (ti->cbSize >= TTTOOLINFOA_V2_SIZE)
ti->lParam = toolPtr->lParam;
@@ -1246,8 +1260,7 @@ TOOLTIPS_GetCurrentToolT (const TOOLTIPS_INFO *infoPtr, TTTOOLINFOW *ti, BOOL is
ti->uFlags = toolPtr->uFlags;
ti->rect = toolPtr->rect;
ti->hinst = toolPtr->hinst;
-/* ti->lpszText = toolPtr->lpszText; */
- ti->lpszText = NULL; /* FIXME */
+ TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
if (ti->cbSize >= TTTOOLINFOW_V2_SIZE)
ti->lParam = toolPtr->lParam;
@@ -1385,8 +1398,7 @@ TOOLTIPS_GetToolInfoT (const TOOLTIPS_INFO *infoPtr, TTTOOLINFOW *ti, BOOL isW)
ti->uFlags = toolPtr->uFlags;
ti->rect = toolPtr->rect;
ti->hinst = toolPtr->hinst;
-/* lpToolInfo->lpszText = toolPtr->lpszText; */
- ti->lpszText = NULL; /* FIXME */
+ TOOLTIPS_CopyInfoT (toolPtr, ti, isW);
if (ti->cbSize >= TTTOOLINFOW_V2_SIZE)
ti->lParam = toolPtr->lParam;
@@ -1420,8 +1432,7 @@ TOOLTIPS_HitTestT (const TOOLTIPS_INFO *infoPtr, LPTTHITTESTINFOW lptthit,
lptthit->ti.uId = toolPtr->uId;
lptthit->ti.rect = toolPtr->rect;
lptthit->ti.hinst = toolPtr->hinst;
-/* lptthit->ti.lpszText = toolPtr->lpszText; */
- lptthit->ti.lpszText = NULL; /* FIXME */
+ TOOLTIPS_CopyInfoT (toolPtr, &lptthit->ti, isW);
if (lptthit->ti.cbSize >= TTTOOLINFOW_V2_SIZE)
lptthit->ti.lParam = toolPtr->lParam;
}
More information about the wine-cvs
mailing list