reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit 3b6eeb6c66af0b4d6f497c25b23c2b62fbe76e69
parent edb46b75b5d3e1ec4f937c2e99f3fffe87bebd6a
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Wed,  4 Jan 2017 20:19:56 -0800

dialog: limit window centering to a single monitor on Windows [p=1779566]

Diffstat:
Msrc/dialog.cpp | 14++++++++++++++
1 file changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/dialog.cpp b/src/dialog.cpp @@ -217,6 +217,20 @@ void Dialog::center() GetWindowRect(m_handle, &dialogRect); GetWindowRect(m_parent, &parentRect); +#ifdef _WIN32 + // limit the centering to the monitor containing most of the parent window + HMONITOR monitor = MonitorFromWindow(m_parent, MONITOR_DEFAULTTONEAREST); + MONITORINFO minfo{sizeof(MONITORINFO)}; + + if(GetMonitorInfo(monitor, &minfo)) { + parentRect.left = max(parentRect.left, minfo.rcWork.left); + parentRect.top = max(parentRect.top, minfo.rcWork.top); + + parentRect.right = min(parentRect.right, minfo.rcWork.right); + parentRect.bottom = min(parentRect.bottom, minfo.rcWork.bottom); + } +#endif + const int parentWidth = parentRect.right - parentRect.left; const int dialogWidth = dialogRect.right - dialogRect.left; int left = (parentWidth - dialogWidth) / 2;