I think that it is better to use GetWindowRect() and MoveWindow()
instead of GetWindowPlacement() so that we can use normal (not relative)
screen coordinates.

diff --git a/src/gui_w32.c b/src/gui_w32.c
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1660,28 +1660,21 @@
        int direction)
 {
     RECT       workarea_rect;
+    RECT       window_rect;
     int                win_width, win_height;
-    WINDOWPLACEMENT wndpl;

     /* Try to keep window completely on screen. */
     /* Get position of the screen work area.  This is the part that is not
      * used by the taskbar or appbars. */
     get_work_area(&workarea_rect);

-    /* Get current posision of our window.  Note that the .left and .top are
-     * relative to the work area.  */
-    wndpl.length = sizeof(WINDOWPLACEMENT);
-    GetWindowPlacement(s_hwnd, &wndpl);
-
     /* Resizing a maximized window looks very strange, unzoom it first.
      * But don't do it when still starting up, it may have been requested in
      * the shortcut. */
-    if (wndpl.showCmd == SW_SHOWMAXIMIZED && starting == 0)
-    {
+    if (IsZoomed(s_hwnd) && starting == 0)
        ShowWindow(s_hwnd, SW_SHOWNORMAL);
-       /* Need to get the settings of the normal window. */
-       GetWindowPlacement(s_hwnd, &wndpl);
-    }
+
+    GetWindowRect(s_hwnd, &window_rect);

     /* compute the size of the outside of the window */
     win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
@@ -1695,34 +1688,24 @@
     /* 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;
+    window_rect.right = window_rect.left + win_width;
+    window_rect.bottom = window_rect.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
-     * these two are not compatible. */
-    SetWindowPlacement(s_hwnd, &wndpl);
+    if ((direction & RESIZE_HOR) && window_rect.right > workarea_rect.right)
+       OffsetRect(&window_rect, workarea_rect.right - window_rect.right, 0);
+
+    if ((direction & RESIZE_HOR) && window_rect.left < workarea_rect.left)
+       OffsetRect(&window_rect, workarea_rect.left - window_rect.left, 0);
+
+    if ((direction & RESIZE_VERT) && window_rect.bottom > workarea_rect.bottom)
+       OffsetRect(&window_rect, 0, workarea_rect.bottom - window_rect.bottom);
+
+    if ((direction & RESIZE_VERT) && window_rect.top < workarea_rect.top)
+       OffsetRect(&window_rect, 0, workarea_rect.top - window_rect.top);
+
+    MoveWindow(s_hwnd, window_rect.left, window_rect.top,
+                                               win_width, win_height, TRUE);

     SetActiveWindow(s_hwnd);
     SetFocus(s_hwnd);


-- 
Yukihiro Nakadaira - [email protected]

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui