From 56ca1d973c25f03ac70ab949c808be7d9580f17c Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 18 Jul 2021 21:31:30 +0300 Subject: [PATCH] Save and restore multimonitor window positions. --- od-win32/win32.cpp | 14 +++++++++++--- od-win32/win32gfx.cpp | 31 ++++++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 8c4e8b1f..fbec533e 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -2791,9 +2791,17 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, DWORD top = rc2.top - mon->win_y_diff; DWORD width = rc2.right - rc2.left; DWORD height = rc2.bottom - rc2.top; - if (store_xy++ && !mon->monitor_id) { - regsetint (NULL, _T("MainPosX"), left); - regsetint (NULL, _T("MainPosY"), top); + if (store_xy++) { + if (!mon->monitor_id) { + regsetint(NULL, _T("MainPosX"), left); + regsetint(NULL, _T("MainPosY"), top); + } else { + TCHAR buf[100]; + _stprintf(buf, _T("MainPosX_%d"), mon->monitor_id); + regsetint(NULL, buf, left); + _stprintf(buf, _T("MainPosY_%d"), mon->monitor_id); + regsetint(NULL, buf, top); + } } changed_prefs.gfx_monitor[mon->monitor_id].gfx_size_win.x = left; changed_prefs.gfx_monitor[mon->monitor_id].gfx_size_win.y = top; diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 63704845..2684c3c8 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -1924,6 +1924,7 @@ static void close_hwnds(struct AmigaMonitor *mon) if (mon->screen_is_initialized) releasecapture(mon); mon->screen_is_initialized = 0; + mon->screen_is_picasso = 0; if (!mon->monitor_id) { display_vblank_thread_kill(); #ifdef AVIOUTPUT @@ -3566,8 +3567,27 @@ static void movecursor (int x, int y) static void getextramonitorpos(struct AmigaMonitor *mon, RECT *r) { + TCHAR buf[100]; RECT r1, r2; + int x, y; + bool got = true; + _stprintf(buf, _T("MainPosX_%d"), mon->monitor_id); + if (!regqueryint(NULL, buf, &x)) { + got = false; + } + _stprintf(buf, _T("MainPosY_%d"), mon->monitor_id); + if (!regqueryint(NULL, buf, &y)) { + got = false; + } + if (got) { + POINT pt; + pt.x = x; + pt.y = y; + if (!MonitorFromPoint(pt, MONITOR_DEFAULTTONULL)) { + got = false; + } + } // find rightmost window edge int monid = MAX_AMIGAMONITORS - 1; int rightmon = -1; @@ -3586,7 +3606,7 @@ static void getextramonitorpos(struct AmigaMonitor *mon, RECT *r) rightmon = monid; } } - if (rightmon < 0) + if (rightmon < 0 && !got) return; hwnd = AMonitors[rightmon].hMainWnd; GetWindowRect(hwnd, &r1); @@ -3596,8 +3616,13 @@ static void getextramonitorpos(struct AmigaMonitor *mon, RECT *r) int width = r->right - r->left; int height = r->bottom - r->top; - r->left = r1.right - ((r2.left - r1.left) + (r1.right - r2.right)); - r->top = r1.top; + if (got) { + r->left = x; + r->top = y; + } else { + r->left = r1.right - ((r2.left - r1.left) + (r1.right - r2.right)); + r->top = r1.top; + } r->bottom = r->top + height; r->right = r->left + width; } -- 2.47.3