Nikolay Sivov : comctl32/tooltips: Cut tooltip text at first tab char unless TTS_NOPREFIX is used.

Alexandre Julliard julliard at winehq.org
Mon Aug 22 07:32:39 CDT 2016


Module: wine
Branch: stable
Commit: 479ed1e9deac45e5c45b8d955e4713574847bf63
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=479ed1e9deac45e5c45b8d955e4713574847bf63

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Mon May  2 20:36:51 2016 +0300

comctl32/tooltips: Cut tooltip text at first tab char unless TTS_NOPREFIX is used.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 75059e9ee10dd2505de79849b05d3897c8d88073)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/comctl32/tests/tooltips.c | 175 +++++++++++++++++++++++------------------
 dlls/comctl32/tooltips.c       |   6 ++
 2 files changed, 105 insertions(+), 76 deletions(-)

diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c
index 3382fce..e94b2fd 100644
--- a/dlls/comctl32/tests/tooltips.c
+++ b/dlls/comctl32/tests/tooltips.c
@@ -288,13 +288,15 @@ static HWND create_parent_window(void)
 
 static void test_gettext(void)
 {
+    static const CHAR testtip2A[] = "testtip\ttest2";
+    static const CHAR testtipA[] = "testtip";
     HWND hwnd, notify;
     TTTOOLINFOA toolinfoA;
     TTTOOLINFOW toolinfoW;
     LRESULT r;
     CHAR bufA[10] = "";
     WCHAR bufW[10] = { 0 };
-    static const CHAR testtipA[] = "testtip";
+    DWORD length, style;
 
     notify = create_parent_window();
     ok(notify != NULL, "Expected notification window to be created\n");
@@ -316,49 +318,48 @@ static void test_gettext(void)
     toolinfoA.lParam = 0xdeadbeef;
     GetClientRect(hwnd, &toolinfoA.rect);
     r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
-    if (r)
-    {
-        toolinfoA.hwnd = NULL;
-        toolinfoA.uId = 0x1234ABCD;
-        toolinfoA.lpszText = bufA;
-        SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
-        ok(strcmp(toolinfoA.lpszText, "") == 0, "lpszText should be an empty string\n");
+    ok(r, "got %ld\n", r);
 
-        toolinfoA.lpszText = bufA;
-        SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
-        ok(toolinfoA.lpszText == NULL,
-           "expected NULL, got %p\n", toolinfoA.lpszText);
+    toolinfoA.hwnd = NULL;
+    toolinfoA.uId = 0x1234abcd;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!*toolinfoA.lpszText, "lpszText should be empty, got %s\n", toolinfoA.lpszText);
 
-        /* NULL hinst, valid resource id for text */
-        toolinfoA.cbSize = sizeof(TTTOOLINFOA);
-        toolinfoA.hwnd = NULL;
-        toolinfoA.hinst = NULL;
-        toolinfoA.uFlags = 0;
-        toolinfoA.uId = 0x1233ABCD;
-        toolinfoA.lpszText = MAKEINTRESOURCEA(IDS_TBADD1);
-        toolinfoA.lParam = 0xdeadbeef;
-        GetClientRect(hwnd, &toolinfoA.rect);
-        r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
-        ok(r, "failed to add a tool\n");
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+todo_wine
+    ok(!r, "got %ld\n", r);
+    ok(toolinfoA.lpszText == NULL, "expected NULL, got %p\n", toolinfoA.lpszText);
 
-        toolinfoA.hwnd = NULL;
-        toolinfoA.uId = 0x1233ABCD;
-        toolinfoA.lpszText = bufA;
-        SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
-        ok(strcmp(toolinfoA.lpszText, "abc") == 0, "lpszText should be an empty string\n");
+    /* NULL hinst, valid resource id for text */
+    toolinfoA.cbSize = sizeof(TTTOOLINFOA);
+    toolinfoA.hwnd = NULL;
+    toolinfoA.hinst = NULL;
+    toolinfoA.uFlags = 0;
+    toolinfoA.uId = 0x1233abcd;
+    toolinfoA.lpszText = MAKEINTRESOURCEA(IDS_TBADD1);
+    toolinfoA.lParam = 0xdeadbeef;
+    GetClientRect(hwnd, &toolinfoA.rect);
+    r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
+    ok(r, "failed to add a tool\n");
 
-        toolinfoA.hinst = (HINSTANCE)0xdeadbee;
-        SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
-        ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst);
+    toolinfoA.hwnd = NULL;
+    toolinfoA.uId = 0x1233abcd;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, "abc"), "got wrong text, %s\n", toolinfoA.lpszText);
 
-        SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA);
-    }
-    else
-    {
-        win_skip( "Old comctl32, not testing NULL text\n" );
-        DestroyWindow( hwnd );
-        return;
-    }
+    toolinfoA.hinst = (HINSTANCE)0xdeadbee;
+    r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+todo_wine
+    ok(!r, "got %ld\n", r);
+    ok(toolinfoA.hinst == NULL, "expected NULL, got %p\n", toolinfoA.hinst);
+
+    r = SendMessageA(hwnd, TTM_DELTOOLA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
 
     /* add another tool with text */
     toolinfoA.cbSize = sizeof(TTTOOLINFOA);
@@ -372,28 +373,26 @@ static void test_gettext(void)
     GetClientRect(hwnd, &toolinfoA.rect);
     r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
     ok(r, "Adding the tool to the tooltip failed\n");
-    if (r)
-    {
-        DWORD length;
 
-        length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0);
-        ok(length == 0, "Expected 0, got %d\n", length);
+    length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0);
+    ok(length == 0, "Expected 0, got %d\n", length);
 
-        toolinfoA.hwnd = NULL;
-        toolinfoA.uId = 0x1235ABCD;
-        toolinfoA.lpszText = bufA;
-        SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
-        ok(strcmp(toolinfoA.lpszText, testtipA) == 0, "lpszText should be an empty string\n");
+    toolinfoA.hwnd = NULL;
+    toolinfoA.uId = 0x1235abcd;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %p\n", testtipA, toolinfoA.lpszText);
 
-        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);
+    memset(bufA, 0x1f, sizeof(bufA));
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+todo_wine
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %p\n", testtipA, toolinfoA.lpszText);
 
-        length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0);
-        ok(length == 0, "Expected 0, got %d\n", length);
-    }
+    length = SendMessageA(hwnd, WM_GETTEXTLENGTH, 0, 0);
+    ok(length == 0, "Expected 0, got %d\n", length);
 
     /* add another with callback text */
     toolinfoA.cbSize = sizeof(TTTOOLINFOA);
@@ -406,33 +405,26 @@ static void test_gettext(void)
     GetClientRect(hwnd, &toolinfoA.rect);
     r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
     ok(r, "Adding the tool to the tooltip failed\n");
-    if (r)
-    {
-        toolinfoA.hwnd = notify;
-        toolinfoA.uId = 0x1236ABCD;
-        toolinfoA.lpszText = bufA;
-        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);
-    }
+    toolinfoA.hwnd = notify;
+    toolinfoA.uId = 0x1236abcd;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, testcallbackA), "lpszText should be an (%s) string\n", testcallbackA);
+
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTOOLINFOA, 0, (LPARAM)&toolinfoA);
+todo_wine
+    ok(!r, "got %ld\n", r);
+    ok(toolinfoA.lpszText == LPSTR_TEXTCALLBACKA, "expected LPSTR_TEXTCALLBACKA, got %p\n", toolinfoA.lpszText);
 
     DestroyWindow(hwnd);
     DestroyWindow(notify);
 
-    SetLastError(0xdeadbeef);
     hwnd = CreateWindowExW(0, TOOLTIPS_CLASSW, NULL, 0,
                            10, 10, 300, 100,
                            NULL, NULL, NULL, 0);
-
-    if (!hwnd && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
-        win_skip("CreateWindowExW is not implemented\n");
-        return;
-    }
     ok(hwnd != NULL, "failed to create tooltip wnd\n");
 
     toolinfoW.cbSize = sizeof(TTTOOLINFOW);
@@ -455,6 +447,37 @@ static void test_gettext(void)
         ok(toolinfoW.lpszText[0] == 0, "lpszText should be an empty string\n");
     }
 
+    /* text with embedded tabs */
+    toolinfoA.cbSize = sizeof(TTTOOLINFOA);
+    toolinfoA.hwnd = NULL;
+    toolinfoA.hinst = GetModuleHandleA(NULL);
+    toolinfoA.uFlags = 0;
+    toolinfoA.uId = 0x1235abce;
+    strcpy(bufA, testtip2A);
+    toolinfoA.lpszText = bufA;
+    toolinfoA.lParam = 0xdeadbeef;
+    GetClientRect(hwnd, &toolinfoA.rect);
+    r = SendMessageA(hwnd, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA);
+    ok(r, "got %ld\n", r);
+
+    toolinfoA.hwnd = NULL;
+    toolinfoA.uId = 0x1235abce;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, testtipA), "expected %s, got %s\n", testtipA, toolinfoA.lpszText);
+
+    /* enable TTS_NOPREFIX, original text is retained */
+    style = GetWindowLongA(hwnd, GWL_STYLE);
+    SetWindowLongA(hwnd, GWL_STYLE, style | TTS_NOPREFIX);
+
+    toolinfoA.hwnd = NULL;
+    toolinfoA.uId = 0x1235abce;
+    toolinfoA.lpszText = bufA;
+    r = SendMessageA(hwnd, TTM_GETTEXTA, 0, (LPARAM)&toolinfoA);
+    ok(!r, "got %ld\n", r);
+    ok(!strcmp(toolinfoA.lpszText, testtip2A), "expected %s, got %s\n", testtipA, toolinfoA.lpszText);
+
     DestroyWindow(hwnd);
 }
 
diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c
index 8bf6919..eed113e 100644
--- a/dlls/comctl32/tooltips.c
+++ b/dlls/comctl32/tooltips.c
@@ -509,6 +509,12 @@ TOOLTIPS_GetTipText (const TOOLTIPS_INFO *infoPtr, INT nTool, WCHAR *buffer)
         buffer[0] = '\0';
     }
 
+    if (!(GetWindowLongW(infoPtr->hwndSelf, GWL_STYLE) & TTS_NOPREFIX)) {
+        WCHAR *ptrW;
+        if ((ptrW = strchrW(buffer, '\t')))
+            *ptrW = 0;
+    }
+
     TRACE("%s\n", debugstr_w(buffer));
 }
 




More information about the wine-cvs mailing list