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:
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;