]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Save and restore multimonitor window positions.
authorToni Wilen <twilen@winuae.net>
Sun, 18 Jul 2021 18:31:30 +0000 (21:31 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 18 Jul 2021 18:31:30 +0000 (21:31 +0300)
od-win32/win32.cpp
od-win32/win32gfx.cpp

index 8c4e8b1fa73b8b56dd91e5ee97e0b78c953afd5c..fbec533e63813a2964362f25f163495ab715127a 100644 (file)
@@ -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;
index 63704845eff085964651db89d004c7b3ba80f808..2684c3c8b1ecfa36bc392025a4983af11af63919 100644 (file)
@@ -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;
 }