@@ -71,8 +71,9 @@ popup_options_one(dict_T *dict, char_u *key)
7171 else // "col"
7272 n = screen_screencol () + 1 + n ;
7373
74- if (n < 1 )
75- n = 1 ;
74+ // Zero means "not set", use -1 instead.
75+ if (n == 0 )
76+ n = -1 ;
7677 return n ;
7778}
7879
@@ -222,7 +223,7 @@ popup_start_drag(win_T *wp, int row, int col)
222223{
223224 drag_start_row = mouse_row ;
224225 drag_start_col = mouse_col ;
225- if (wp -> w_wantline = = 0 )
226+ if (wp -> w_wantline < = 0 )
226227 drag_start_wantline = wp -> w_winrow + 1 ;
227228 else
228229 drag_start_wantline = wp -> w_wantline ;
@@ -1081,7 +1082,9 @@ popup_adjust_position(win_T *wp)
10811082 int org_leftoff = wp -> w_popup_leftoff ;
10821083 int minwidth ;
10831084 int wantline = wp -> w_wantline ; // adjusted for textprop
1085+ int use_wantline = wantline != 0 ;
10841086 int wantcol = wp -> w_wantcol ; // adjusted for textprop
1087+ int use_wantcol = wantcol != 0 ;
10851088
10861089 wp -> w_winrow = 0 ;
10871090 wp -> w_wincol = 0 ;
@@ -1097,6 +1100,11 @@ popup_adjust_position(win_T *wp)
10971100 // If no line was specified default to vertical centering.
10981101 if (wantline == 0 )
10991102 center_vert = TRUE;
1103+ else if (wantline < 0 )
1104+ // If "wantline" is negative it actually means zero.
1105+ wantline = 0 ;
1106+ if (wantcol < 0 )
1107+ wantcol = 0 ;
11001108
11011109 if (wp -> w_popup_prop_type > 0 && win_valid (wp -> w_popup_prop_win ))
11021110 {
@@ -1161,15 +1169,15 @@ popup_adjust_position(win_T *wp)
11611169 }
11621170 else
11631171 {
1164- if (wantline > 0 && (wp -> w_popup_pos == POPPOS_TOPLEFT
1172+ if (use_wantline && (wp -> w_popup_pos == POPPOS_TOPLEFT
11651173 || wp -> w_popup_pos == POPPOS_TOPRIGHT ))
11661174 {
11671175 wp -> w_winrow = wantline - 1 ;
11681176 if (wp -> w_winrow >= Rows )
11691177 wp -> w_winrow = Rows - 1 ;
11701178 }
11711179
1172- if (wantcol == 0 )
1180+ if (! use_wantcol )
11731181 center_hor = TRUE;
11741182 else if (wantcol > 0 && (wp -> w_popup_pos == POPPOS_TOPLEFT
11751183 || wp -> w_popup_pos == POPPOS_BOTLEFT ))
@@ -1372,8 +1380,8 @@ popup_adjust_position(win_T *wp)
13721380 // bottom aligned: may move down
13731381 wp -> w_winrow = wantline - (wp -> w_height + extra_height );
13741382 else
1375- // not enough space, make top aligned
1376- wp -> w_winrow = wantline + 1 ;
1383+ // Not enough space, make top aligned.
1384+ wp -> w_winrow = ( wantline < 0 ? 0 : wantline ) + 1 ;
13771385 }
13781386 if (wp -> w_winrow >= Rows )
13791387 wp -> w_winrow = Rows - 1 ;
0 commit comments