summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-11-04 20:08:52 +0100
committerBram Moolenaar <Bram@vim.org>2016-11-04 20:08:52 +0100
commit91e44a3305ef6bf2d43496c351dcff0a45c6bfb8 (patch)
treee9875192b16158d34a6deffe29d996734a4560ba
parent9376f5f482a4d579436bf364778c2d8ab8e2f22d (diff)
downloadvim-91e44a3305ef6bf2d43496c351dcff0a45c6bfb8.zip
patch 8.0.0058
Problem: Positioning of the popup menu is not good. Solution: Position it better. (Hirohito Higashi)
-rw-r--r--src/popupmnu.c46
-rw-r--r--src/version.c2
2 files changed, 24 insertions, 24 deletions
diff --git a/src/popupmnu.c b/src/popupmnu.c
index b479b0045..6a75686ff 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -54,18 +54,21 @@ pum_display(
int kind_width;
int extra_width;
int i;
- int top_clear;
int row;
int context_lines;
int col;
- int above_row = cmdline_row;
+ int above_row;
+ int below_row;
int redo_count = 0;
+ win_T *pvwin;
redo:
def_width = PUM_DEF_WIDTH;
max_width = 0;
kind_width = 0;
extra_width = 0;
+ above_row = 0;
+ below_row = cmdline_row;
/* Pretend the pum is already there to avoid that must_redraw is set when
* 'cuc' is on. */
@@ -76,18 +79,16 @@ redo:
row = curwin->w_wrow + W_WINROW(curwin);
#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- if (firstwin->w_p_pvw)
- top_clear = firstwin->w_height;
- else
-#endif
- top_clear = 0;
-
-#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- /* When the preview window is at the bottom stop just above it. Also
- * avoid drawing over the status line so that it's clear there is a window
- * boundary. */
- if (lastwin->w_p_pvw)
- above_row -= lastwin->w_height + lastwin->w_status_height + 1;
+ FOR_ALL_WINDOWS(pvwin)
+ if (pvwin->w_p_pvw)
+ break;
+ if (pvwin != NULL)
+ {
+ if (W_WINROW(pvwin) < W_WINROW(curwin))
+ above_row = W_WINROW(pvwin) + pvwin->w_height;
+ else if (W_WINROW(pvwin) > W_WINROW(curwin) + curwin->w_height)
+ below_row = W_WINROW(pvwin);
+ }
#endif
/*
@@ -102,8 +103,7 @@ redo:
/* Put the pum below "row" if possible. If there are few lines decide on
* where there is more room. */
- if (row + 2 >= above_row - pum_height
- && row > (above_row - top_clear) / 2)
+ if (row - above_row >= below_row - row)
{
/* pum above "row" */
@@ -141,8 +141,8 @@ redo:
+ curwin->w_cline_height - curwin->w_wrow;
pum_row = row + context_lines;
- if (size > above_row - pum_row)
- pum_height = above_row - pum_row;
+ if (size > below_row - pum_row)
+ pum_height = below_row - pum_row;
else
pum_height = size;
if (p_ph > 0 && pum_height > p_ph)
@@ -154,13 +154,11 @@ redo:
return;
#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- /* If there is a preview window at the top avoid drawing over it. */
- if (firstwin->w_p_pvw
- && pum_row < firstwin->w_height
- && pum_height > firstwin->w_height + 4)
+ /* If there is a preview window at the above avoid drawing over it. */
+ if (pvwin != NULL && pum_row < above_row && pum_height > above_row)
{
- pum_row += firstwin->w_height;
- pum_height -= firstwin->w_height;
+ pum_row += above_row;
+ pum_height -= above_row;
}
#endif
diff --git a/src/version.c b/src/version.c
index a6979fe1a..dc3cb58f5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 58,
+/**/
57,
/**/
56,