Signed-off-by: Roman Pišl rpisl@seznam.cz --- dlls/comctl32/tests/tooltips.c | 94 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+)
diff --git a/dlls/comctl32/tests/tooltips.c b/dlls/comctl32/tests/tooltips.c index c260e3d220..6f2ff22f09 100644 --- a/dlls/comctl32/tests/tooltips.c +++ b/dlls/comctl32/tests/tooltips.c @@ -262,8 +262,16 @@ static void test_customdraw(void) { SetCursorPos(orig_pos.x, orig_pos.y); }
+#define TTIP_LEFT 300 +#define TTIP_TOP 300 +#define TTIP_WIDTH 200 +#define TTIP_HEIGHT 50 + static const CHAR testcallbackA[] = "callback";
+static HWND g_hwnd_ttn_show; +static enum { none = 0, size, both } g_resize = none; + static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { if (message == WM_NOTIFY && lParam) @@ -272,6 +280,12 @@ static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LP
if (ttnmdi->hdr.code == TTN_GETDISPINFOA) lstrcpyA(ttnmdi->lpszText, testcallbackA); + + if (g_resize != none && ttnmdi->hdr.code == TTN_SHOW) { + g_hwnd_ttn_show = ttnmdi->hdr.hwndFrom; + SetWindowPos(ttnmdi->hdr.hwndFrom, 0, TTIP_LEFT, TTIP_TOP, TTIP_WIDTH, TTIP_HEIGHT, SWP_NOZORDER | SWP_NOACTIVATE); + return g_resize == both; + } }
return DefWindowProcA(hwnd, message, wParam, lParam); @@ -1134,6 +1148,84 @@ static void test_TTM_ADDTOOL(BOOL is_v6) DestroyWindow(hwnd); }
+static void test_TTN_SHOW(void) +{ + HWND hwndTip, notify; + TTTOOLINFOA toolinfoA; + RECT rect; + LRESULT r; + DWORD major, minor, version; + + version = GetVersion(); + major = LOBYTE(version); + minor = HIBYTE(LOWORD(version)); + if (major < 6 || minor < 1) + { + skip("Test available on Windows 7 and later\n"); + return; + } + + /* Create main window */ + notify = create_parent_window(); + ok(notify != NULL, "Expected notification window to be created\n"); + + /* Put cursor outside the window */ + GetWindowRect(notify, &rect); + SetCursorPos(rect.right + 200, 0); + + /* Create tooltip */ + hwndTip = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL, 0, + 10, 10, 400, 400, + NULL, NULL, NULL, 0); + ok(hwndTip != NULL, "failed to create tooltip wnd\n"); + + toolinfoA.cbSize = sizeof(TTTOOLINFOA); + toolinfoA.hwnd = notify; + toolinfoA.hinst = GetModuleHandleA(NULL); + toolinfoA.uFlags = TTF_SUBCLASS; + toolinfoA.uId = 0x1234ABCD; + toolinfoA.lpszText = (LPSTR)"This is a test tooltip"; + toolinfoA.lParam = 0xdeadbeef; + GetClientRect(notify, &toolinfoA.rect); + r = SendMessageA(hwndTip, TTM_ADDTOOLA, 0, (LPARAM)&toolinfoA); + ok(r, "got %ld\n", r); + + /* Make tooltip appear quickly */ + SendMessageA(hwndTip, TTM_SETDELAYTIME, TTDT_INITIAL, MAKELPARAM(1,0)); + + /* Put cursor inside window, tooltip will appear immediately */ + g_resize = size; + GetWindowRect(notify, &rect); + SetCursorPos((rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2); + flush_events(200); + + /* Test actual tooltip window size */ + GetWindowRect(g_hwnd_ttn_show, &rect); + ok(rect.right - rect.left == TTIP_WIDTH && rect.bottom - rect.top == TTIP_HEIGHT, + "Invalid tooltip size %i %i \n", rect.right - rect.left, rect.bottom - rect.top); + ok(rect.left != TTIP_LEFT && rect.top != TTIP_TOP, "Tooltip position should not be modified"); + + /* Put cursor outside the window */ + GetWindowRect(notify, &rect); + SetCursorPos(rect.right + 200, 0); + flush_events(200); + + /* Put cursor inside window, tooltip will appear immediately */ + g_resize = both; + GetWindowRect(notify, &rect); + SetCursorPos((rect.left + rect.right) / 2, (rect.top + rect.bottom) / 2); + flush_events(200); + + /* Test actual tooltip window size and position */ + GetWindowRect(g_hwnd_ttn_show, &rect); + ok(rect.left == TTIP_LEFT && rect.top == TTIP_TOP && + rect.right == TTIP_LEFT + TTIP_WIDTH && rect.bottom == TTIP_TOP + TTIP_HEIGHT, + "Invalid tooltip rect %i %i %i %i\n", rect.left, rect.top, rect.right, rect.bottom); + + DestroyWindow(hwndTip); + DestroyWindow(notify); +} + START_TEST(tooltips) { ULONG_PTR ctx_cookie; @@ -1153,6 +1245,7 @@ START_TEST(tooltips) test_setinfo(FALSE); test_margin(); test_TTM_ADDTOOL(FALSE); + test_TTN_SHOW();
if (!load_v6_module(&ctx_cookie, &hCtx)) return; @@ -1164,6 +1257,7 @@ START_TEST(tooltips) test_setinfo(TRUE); test_margin(); test_TTM_ADDTOOL(TRUE); + test_TTN_SHOW();
unload_v6_module(ctx_cookie, hCtx); }