| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.393 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.393 |
| Problem: Win32: When resizing Vim it is always moved to the primary monitor |
| if the secondary monitor is on the left. |
| Solution: Use the nearest monitor. (Yukihiro Nakadaira) |
| Files: src/gui_w32.c |
| |
| |
| |
| |
| |
| *** 1661,1669 **** |
| { |
| RECT workarea_rect; |
| int win_width, win_height; |
| - int win_xpos, win_ypos; |
| WINDOWPLACEMENT wndpl; |
| - int workarea_left; |
| |
| /* Try to keep window completely on screen. */ |
| /* Get position of the screen work area. This is the part that is not |
| --- 1661,1667 ---- |
| |
| *** 1685,1693 **** |
| GetWindowPlacement(s_hwnd, &wndpl); |
| } |
| |
| - win_xpos = wndpl.rcNormalPosition.left; |
| - win_ypos = wndpl.rcNormalPosition.top; |
| - |
| /* compute the size of the outside of the window */ |
| win_width = width + GetSystemMetrics(SM_CXFRAME) * 2; |
| win_height = height + GetSystemMetrics(SM_CYFRAME) * 2 |
| --- 1683,1688 ---- |
| |
| *** 1697,1732 **** |
| #endif |
| ; |
| |
| ! /* There is an inconsistency when using two monitors and Vim is on the |
| ! * second (right) one: win_xpos will be the offset from the workarea of |
| ! * the left monitor. While with one monitor it's the offset from the |
| ! * workarea (including a possible taskbar on the left). Detect the second |
| ! * monitor by checking for the left offset to be quite big. */ |
| ! if (workarea_rect.left > 300) |
| ! workarea_left = 0; |
| ! else |
| ! workarea_left = workarea_rect.left; |
| |
| ! /* If the window is going off the screen, move it on to the screen. |
| ! * win_xpos and win_ypos are relative to the workarea. */ |
| if ((direction & RESIZE_HOR) |
| ! && workarea_left + win_xpos + win_width > workarea_rect.right) |
| ! win_xpos = workarea_rect.right - win_width - workarea_left; |
| |
| ! if ((direction & RESIZE_HOR) && win_xpos < 0) |
| ! win_xpos = 0; |
| |
| if ((direction & RESIZE_VERT) |
| ! && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom) |
| ! win_ypos = workarea_rect.bottom - win_height - workarea_rect.top; |
| |
| ! if ((direction & RESIZE_VERT) && win_ypos < 0) |
| ! win_ypos = 0; |
| ! |
| ! wndpl.rcNormalPosition.left = win_xpos; |
| ! wndpl.rcNormalPosition.right = win_xpos + win_width; |
| ! wndpl.rcNormalPosition.top = win_ypos; |
| ! wndpl.rcNormalPosition.bottom = win_ypos + win_height; |
| |
| /* set window position - we should use SetWindowPlacement rather than |
| * SetWindowPos as the MSDN docs say the coord systems returned by |
| --- 1692,1723 ---- |
| #endif |
| ; |
| |
| ! /* The following should take care of keeping Vim on the same monitor, no |
| ! * matter if the secondary monitor is left or right of the primary |
| ! * monitor. */ |
| ! wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width; |
| ! wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height; |
| |
| ! /* If the window is going off the screen, move it on to the screen. */ |
| if ((direction & RESIZE_HOR) |
| ! && wndpl.rcNormalPosition.right > workarea_rect.right) |
| ! OffsetRect(&wndpl.rcNormalPosition, |
| ! workarea_rect.right - wndpl.rcNormalPosition.right, 0); |
| |
| ! if ((direction & RESIZE_HOR) |
| ! && wndpl.rcNormalPosition.left < workarea_rect.left) |
| ! OffsetRect(&wndpl.rcNormalPosition, |
| ! workarea_rect.left - wndpl.rcNormalPosition.left, 0); |
| |
| if ((direction & RESIZE_VERT) |
| ! && wndpl.rcNormalPosition.bottom > workarea_rect.bottom) |
| ! OffsetRect(&wndpl.rcNormalPosition, |
| ! 0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom); |
| |
| ! if ((direction & RESIZE_VERT) |
| ! && wndpl.rcNormalPosition.top < workarea_rect.top) |
| ! OffsetRect(&wndpl.rcNormalPosition, |
| ! 0, workarea_rect.top - wndpl.rcNormalPosition.top); |
| |
| /* set window position - we should use SetWindowPlacement rather than |
| * SetWindowPos as the MSDN docs say the coord systems returned by |
| |
| |
| |
| *** 716,717 **** |
| --- 716,719 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 393, |
| /**/ |
| |
| -- |
| I wonder, do vegetarians eat fruit bats? |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |