From 9d6d54f5e65d1e4eb544873746efe6ca857ae303 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 23 Oct 2006 14:05:34 +0200 Subject: [PATCH] comctl32: Position the tooltip window correctly on multi-monitor setups. --- dlls/comctl32/tooltips.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c index 3462ef9bc30..e9badc87386 100644 --- a/dlls/comctl32/tooltips.c +++ b/dlls/comctl32/tooltips.c @@ -496,7 +496,9 @@ static void TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr) { TTTOOL_INFO *toolPtr; - RECT rect, wndrect; + HMONITOR monitor; + MONITORINFO mon_info; + RECT rect; SIZE size; NMHDR hdr; int ptfx = 0; @@ -593,13 +595,18 @@ TOOLTIPS_Show (HWND hwnd, TOOLTIPS_INFO *infoPtr) rect.bottom = rect.top + size.cy; /* check position */ - wndrect.right = GetSystemMetrics( SM_CXSCREEN ); - if( rect.right > wndrect.right ) { - rect.left -= rect.right - wndrect.right + 2; - rect.right = wndrect.right - 2; + + monitor = MonitorFromRect( &rect, MONITOR_DEFAULTTOPRIMARY ); + mon_info.cbSize = sizeof(mon_info); + GetMonitorInfoW( monitor, &mon_info ); + + if( rect.right > mon_info.rcWork.right ) { + rect.left -= rect.right - mon_info.rcWork.right + 2; + rect.right = mon_info.rcWork.right - 2; } - wndrect.bottom = GetSystemMetrics( SM_CYSCREEN ); - if( rect.bottom > wndrect.bottom ) { + if (rect.left < mon_info.rcWork.left) rect.left = mon_info.rcWork.left; + + if( rect.bottom > mon_info.rcWork.bottom ) { RECT rc; if (toolPtr->uFlags & TTF_IDISHWND)