From b4b99697f99cebec0f92042075d62f27b235d35c Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Thu, 28 Mar 2013 16:03:30 +0000 Subject: [PATCH] user32: Keep the combo listbox within the monitor's work area. --- dlls/user32/combo.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/dlls/user32/combo.c b/dlls/user32/combo.c index 346b346aae4..2aa44247d15 100644 --- a/dlls/user32/combo.c +++ b/dlls/user32/combo.c @@ -1043,18 +1043,24 @@ static void CBDropDown( LPHEADCOMBO lphc ) } } + r.left = rect.left; + r.top = rect.bottom; + r.right = r.left + lphc->droppedRect.right - lphc->droppedRect.left; + r.bottom = r.top + nDroppedHeight; + /*If height of dropped rectangle gets beyond a screen size it should go up, otherwise down.*/ monitor = MonitorFromRect( &rect, MONITOR_DEFAULTTOPRIMARY ); mon_info.cbSize = sizeof(mon_info); GetMonitorInfoW( monitor, &mon_info ); - if( (rect.bottom + nDroppedHeight) >= mon_info.rcWork.bottom ) - rect.bottom = rect.top - nDroppedHeight; + if (r.bottom > mon_info.rcWork.bottom) + { + r.top = max( rect.top - nDroppedHeight, mon_info.rcWork.top ); + r.bottom = min( r.top + nDroppedHeight, mon_info.rcWork.bottom ); + } - SetWindowPos( lphc->hWndLBox, HWND_TOP, rect.left, rect.bottom, - lphc->droppedRect.right - lphc->droppedRect.left, - nDroppedHeight, - SWP_NOACTIVATE | SWP_SHOWWINDOW); + SetWindowPos( lphc->hWndLBox, HWND_TOP, r.left, r.top, r.right - r.left, r.bottom - r.top, + SWP_NOACTIVATE | SWP_SHOWWINDOW ); if( !(lphc->wState & CBF_NOREDRAW) )