summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.3.393
blob: ca6cbc96d67492c9868a50b377da1edc17491d71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
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


*** ../vim-7.3.392/src/gui_w32.c	2011-12-15 21:51:32.000000000 +0100
--- src/gui_w32.c	2012-01-04 20:25:58.000000000 +0100
***************
*** 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
*** ../vim-7.3.392/src/version.c	2012-01-04 19:34:32.000000000 +0100
--- src/version.c	2012-01-04 20:28:57.000000000 +0100
***************
*** 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    ///