Module: wine Branch: master Commit: a3fcd5609bb95cd508a10b3618230235b39fd8a5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a3fcd5609bb95cd508a10b3618...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Oct 23 14:03:26 2006 +0200
user: Take multiple monitors into account when placing a popup menu.
---
dlls/user/menu.c | 25 +++++++++++++++++-------- 1 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/dlls/user/menu.c b/dlls/user/menu.c index 19c73f3..e157e04 100644 --- a/dlls/user/menu.c +++ b/dlls/user/menu.c @@ -1772,6 +1772,9 @@ static BOOL MENU_ShowPopup( HWND hwndOwn { POPUPMENU *menu; UINT width, height; + POINT pt; + HMONITOR monitor; + MONITORINFO info;
TRACE("owner=%p hmenu=%p id=0x%04x x=0x%04x y=0x%04x xa=0x%04x ya=0x%04x\n", hwndOwner, hmenu, id, x, y, xanchor, yanchor); @@ -1794,25 +1797,31 @@ static BOOL MENU_ShowPopup( HWND hwndOwn width = menu->Width + GetSystemMetrics(SM_CXBORDER); height = menu->Height + GetSystemMetrics(SM_CYBORDER);
- if( x + width > GetSystemMetrics(SM_CXSCREEN )) + /* FIXME: should use item rect */ + pt.x = x; + pt.y = y; + monitor = MonitorFromPoint( pt, MONITOR_DEFAULTTONEAREST ); + info.cbSize = sizeof(info); + GetMonitorInfoW( monitor, &info ); + if( x + width > info.rcWork.right) { if( xanchor && x >= width - xanchor ) x -= width - xanchor;
- if( x + width > GetSystemMetrics(SM_CXSCREEN)) - x = GetSystemMetrics(SM_CXSCREEN) - width; + if( x + width > info.rcWork.right) + x = info.rcWork.right - width; } - if( x < 0 ) x = 0; + if( x < info.rcWork.left ) x = info.rcWork.left;
- if( y + height > GetSystemMetrics(SM_CYSCREEN )) + if( y + height > info.rcWork.bottom) { if( yanchor && y >= height + yanchor ) y -= height + yanchor;
- if( y + height > GetSystemMetrics(SM_CYSCREEN )) - y = GetSystemMetrics(SM_CYSCREEN) - height; + if( y + height > info.rcWork.bottom) + y = info.rcWork.bottom - height; } - if( y < 0 ) y = 0; + if( y < info.rcWork.top ) y = info.rcWork.top;
/* NOTE: In Windows, top menu popup is not owned. */ menu->hWnd = CreateWindowExW( 0, POPUPMENU_CLASS_ATOMW, NULL,