diff src/popupwin.c @ 16898:16fd1bb2e675 v8.1.1450

patch 8.1.1450: popup window positioning wrong when using padding or borders commit https://github.com/vim/vim/commit/399d898ac1e6e587088b5bdd6e36eca4998bc1eb Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 2 15:34:29 2019 +0200 patch 8.1.1450: popup window positioning wrong when using padding or borders Problem: Popup window positioning wrong when using padding or borders. Solution: Fix computing the position.
author Bram Moolenaar <Bram@vim.org>
date Sun, 02 Jun 2019 15:45:05 +0200
parents 52fc577a087d
children 23645f9a5ce2
line wrap: on
line diff
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -382,6 +382,12 @@ popup_adjust_position(win_T *wp)
     int		center_vert = FALSE;
     int		center_hor = FALSE;
     int		allow_adjust_left = !wp->w_popup_fixed;
+    int		top_extra = wp->w_popup_border[0] + wp->w_popup_padding[0];
+    int		right_extra = wp->w_popup_border[1] + wp->w_popup_padding[1];
+    int		bot_extra = wp->w_popup_border[2] + wp->w_popup_padding[2];
+    int		left_extra = wp->w_popup_border[3] + wp->w_popup_padding[3];
+    int		extra_height = top_extra + bot_extra;
+    int		extra_width = left_extra + right_extra;
 
     wp->w_winrow = 0;
     wp->w_wincol = 0;
@@ -474,8 +480,8 @@ popup_adjust_position(win_T *wp)
     {
 	// Right aligned: move to the right if needed.
 	// No truncation, because that would change the height.
-	if (wp->w_width < wp->w_wantcol)
-	    wp->w_wincol = wp->w_wantcol - wp->w_width;
+	if (wp->w_width + extra_width < wp->w_wantcol)
+	    wp->w_wincol = wp->w_wantcol - (wp->w_width + extra_width);
     }
 
     if (wp->w_height <= 1)
@@ -492,9 +498,9 @@ popup_adjust_position(win_T *wp)
     else if (wp->w_popup_pos == POPPOS_BOTRIGHT
 	    || wp->w_popup_pos == POPPOS_BOTLEFT)
     {
-	if (wp->w_height <= wp->w_wantline)
+	if ((wp->w_height + extra_height) <= wp->w_wantline)
 	    // bottom aligned: may move down
-	    wp->w_winrow = wp->w_wantline - wp->w_height;
+	    wp->w_winrow = wp->w_wantline - (wp->w_height + extra_height);
 	else
 	    // not enough space, make top aligned
 	    wp->w_winrow = wp->w_wantline + 1;