]> granicus.if.org Git - vim/commitdiff
patch 8.1.2210: using negative offset for popup_create() does not work v8.1.2210
authorBram Moolenaar <Bram@vim.org>
Thu, 24 Oct 2019 17:25:00 +0000 (19:25 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 24 Oct 2019 17:25:00 +0000 (19:25 +0200)
Problem:    Using negative offset for popup_create() does not work.
Solution:   Use -1 instead of zero. (closes #5111)

src/popupwin.c
src/testdir/dumps/Test_popupwin_corners.dump
src/testdir/test_popupwin.vim
src/version.c

index a9579320e8f7226f85a2a09230f58595584d0839..a53ae0f66b45c31e4dc7ac5c623d149d3ef8ca5f 100644 (file)
@@ -71,8 +71,9 @@ popup_options_one(dict_T *dict, char_u *key)
     else // "col"
        n = screen_screencol() + 1 + n;
 
-    if (n < 1)
-       n = 1;
+    // Zero means "not set", use -1 instead.
+    if (n == 0)
+       n = -1;
     return n;
 }
 
@@ -222,7 +223,7 @@ popup_start_drag(win_T *wp, int row, int col)
 {
     drag_start_row = mouse_row;
     drag_start_col = mouse_col;
-    if (wp->w_wantline == 0)
+    if (wp->w_wantline <= 0)
        drag_start_wantline = wp->w_winrow + 1;
     else
        drag_start_wantline = wp->w_wantline;
@@ -1081,7 +1082,9 @@ popup_adjust_position(win_T *wp)
     int                org_leftoff = wp->w_popup_leftoff;
     int                minwidth;
     int                wantline = wp->w_wantline;  // adjusted for textprop
+    int                use_wantline = wantline != 0;
     int                wantcol = wp->w_wantcol;    // adjusted for textprop
+    int                use_wantcol = wantcol != 0;
 
     wp->w_winrow = 0;
     wp->w_wincol = 0;
@@ -1097,6 +1100,11 @@ popup_adjust_position(win_T *wp)
     // If no line was specified default to vertical centering.
     if (wantline == 0)
        center_vert = TRUE;
+    else if (wantline < 0)
+       // If "wantline" is negative it actually means zero.
+       wantline = 0;
+    if (wantcol < 0)
+       wantcol = 0;
 
     if (wp->w_popup_prop_type > 0 && win_valid(wp->w_popup_prop_win))
     {
@@ -1161,7 +1169,7 @@ popup_adjust_position(win_T *wp)
     }
     else
     {
-       if (wantline > 0 && (wp->w_popup_pos == POPPOS_TOPLEFT
+       if (use_wantline && (wp->w_popup_pos == POPPOS_TOPLEFT
                || wp->w_popup_pos == POPPOS_TOPRIGHT))
        {
            wp->w_winrow = wantline - 1;
@@ -1169,7 +1177,7 @@ popup_adjust_position(win_T *wp)
                wp->w_winrow = Rows - 1;
        }
 
-       if (wantcol == 0)
+       if (!use_wantcol)
            center_hor = TRUE;
        else if (wantcol > 0 && (wp->w_popup_pos == POPPOS_TOPLEFT
                || wp->w_popup_pos == POPPOS_BOTLEFT))
@@ -1372,8 +1380,8 @@ popup_adjust_position(win_T *wp)
            // bottom aligned: may move down
            wp->w_winrow = wantline - (wp->w_height + extra_height);
        else
-           // not enough space, make top aligned
-           wp->w_winrow = wantline + 1;
+           // Not enough space, make top aligned.
+           wp->w_winrow = (wantline < 0 ? 0 : wantline) + 1;
     }
     if (wp->w_winrow >= Rows)
        wp->w_winrow = Rows - 1;
index eee6601bb07a67b3194470c02faadec6fc0b08cb..82188c00794c2f47ea6b76c4fb7af720a310981c 100644 (file)
@@ -1,12 +1,12 @@
-|-+0&#ffffff0@59| @14
-|-@1|#|-@20|@|-@34| @14
-|-@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@2|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@8| @14
-|-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8| @14
-|-@1|║+0#0000001#ffd7ff255| |f|i|r|s|t| @1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|i|r|s|t| @1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |f|i|R|S|t| @1|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |F|I|r|s|T| @1|║|-+0#0000000#ffffff0@8| @14
-|-@1|║+0#0000001#ffd7ff255| |s|e|c|o|n|d| |║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|e|c|o|n|D| |║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |s|e|C|O|n|d| |║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| |S|E|c|o|N|D| |║|-+0#0000000#ffffff0@8| @14
-|-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@2|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@8| @14
-|-@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@2|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@8| @14
-|-@27|%|-@20>&|-@8| @14
+|-+0&#ffffff0@49>*|-@8| @14
+|-@1|#|-@19|@|-@25|╔+0#0000001#ffd7ff255|═@4|╗|-+0#0000000#ffffff0@2| @14
+|-@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@1|╔+0#0000001#ffd7ff255|═@7|╗|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @4|║|-+0#0000000#ffffff0@2| @14
+|-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |o|n|e| |║|-+0#0000000#ffffff0@2| @14
+|-@1|║+0#0000001#ffd7ff255| |f|i|r|s|t| @1|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |F|i|r|s|t| @1|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |f|i|R|S|t| @1|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |F|I|r|s|T| @1|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |t|w|o| |║|-+0#0000000#ffffff0@2| @14
+|-@1|║+0#0000001#ffd7ff255| |s|e|c|o|n|d| |║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |S|e|c|o|n|D| |║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |s|e|C|O|n|d| |║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| |S|E|c|o|N|D| |║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @4|║|-+0#0000000#ffffff0@2| @14
+|-@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|║+0#0000001#ffd7ff255| @7|║|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@4|╝|-+0#0000000#ffffff0@2| @14
+|-@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@1|╚+0#0000001#ffd7ff255|═@7|╝|-+0#0000000#ffffff0@11| @14
+|-@25|%|-@19|&|-@11| @14
 |-@59| @14
 |-@59| @14
-@57|9|,|5|1| @9|T|o|p| 
+@57|1|,|5|1| @9|T|o|p| 
index dc382d83b51cee8708ccf7361576a020f06402de..1c5bcb28fe5ceab8adf85b80bd867afb6122d133 100644 (file)
@@ -278,7 +278,7 @@ func Test_popup_all_corners()
              \ border: [],
              \ padding: [],
              \ })
-       normal 25|r@
+       normal 24|r@
        let winid1 = popup_create(['First', 'SeconD'], #{
              \ line: 'cursor+1',
              \ col: 'cursor',
@@ -286,7 +286,7 @@ func Test_popup_all_corners()
              \ border: [],
              \ padding: [],
              \ })
-       normal 9G29|r%
+       normal 9G27|r%
        let winid1 = popup_create(['fiRSt', 'seCOnd'], #{
              \ line: 'cursor-1',
              \ col: 'cursor',
@@ -294,7 +294,7 @@ func Test_popup_all_corners()
              \ border: [],
              \ padding: [],
              \ })
-       normal 51|r&
+       normal 48|r&
        let winid1 = popup_create(['FIrsT', 'SEcoND'], #{
              \ line: 'cursor-1',
              \ col: 'cursor',
@@ -302,6 +302,14 @@ func Test_popup_all_corners()
              \ border: [],
              \ padding: [],
              \ })
+       normal 1G51|r*
+       let winid1 = popup_create(['one', 'two'], #{
+             \ line: 'cursor-1',
+             \ col: 'cursor',
+             \ pos: 'botleft',
+             \ border: [],
+             \ padding: [],
+             \ })
   END
   call writefile(lines, 'XtestPopupCorners')
   let buf = RunVimInTerminal('-S XtestPopupCorners', #{rows: 12})
index 728fa478f51b551f1c1e9dcc015423c355fd0541..0347a68b4dc538e878427491980afb9f2bdb9c56 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2210,
 /**/
     2209,
 /**/