]> granicus.if.org Git - vim/commitdiff
patch 8.2.1237: changing 'completepopup' after opening popup has no effect v8.2.1237
authorBram Moolenaar <Bram@vim.org>
Sat, 18 Jul 2020 14:07:16 +0000 (16:07 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 18 Jul 2020 14:07:16 +0000 (16:07 +0200)
Problem:    Changing 'completepopup' after opening a popup has no effect. (Jay
            Sitter)
Solution:   Close the popup when the options are changed. (closes #6471)

runtime/doc/options.txt
src/optionstr.c
src/popupwin.c
src/proto/popupwin.pro
src/testdir/dumps/Test_popupwin_infopopup_8.dump [new file with mode: 0644]
src/testdir/test_popupwin.vim
src/version.c

index 37fdc84bcdfd8078a9dfe2e42c755d9ebb4ea20f..71ee94b4e5ad385eb565e8fa99647c9a77cc2973 100644 (file)
@@ -1951,9 +1951,11 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not available when compiled without the |+textprop|
                        or |+quickfix| feature}
        When 'completeopt' contains "popup" then this option is used for the
-       properties of the info popup when it is created.  You can also use
-       |popup_findinfo()| and then set properties for an existing info popup
-       with |popup_setoptions()|.  See |complete-popup|.
+       properties of the info popup when it is created.  If an info popup
+       window already exists it is closed, so that the option value is
+       applied when it is created again.
+       You can also use |popup_findinfo()| and then set properties for an
+       existing info popup with |popup_setoptions()|.  See |complete-popup|.
 
 
                                                *'concealcursor'* *'cocu'*
index a0409fa77110259197a83e274edf9d64af31b132..bfc2e3b9557e92e4765a21e1986ec5950e7fc58d 100644 (file)
@@ -2249,6 +2249,8 @@ did_set_string_option(
     {
        if (parse_completepopup(NULL) == FAIL)
            errmsg = e_invarg;
+       else
+           popup_close_info();
     }
 # endif
 #endif
index 296441b11be767c53d9841522bf1b5f454322d3d..b0b4737c77eb1ddae2fdcb9541468720a069b009 100644 (file)
@@ -4031,6 +4031,18 @@ popup_hide_info(void)
     if (wp != NULL)
        popup_hide(wp);
 }
+
+/*
+ * Close any info popup.
+ */
+    void
+popup_close_info(void)
+{
+    win_T *wp = popup_find_info_window();
+
+    if (wp != NULL)
+       popup_close_with_retval(wp, -1);
+}
 #endif
 
 /*
index 02cdce33ab93d2803f95b9376ead65ff4eb2a5b2..fe75702cef42e50d9b80b8f21f66ac82f296b865 100644 (file)
@@ -60,6 +60,7 @@ void f_popup_findpreview(typval_T *argvars, typval_T *rettv);
 int popup_create_preview_window(int info);
 void popup_close_preview(void);
 void popup_hide_info(void);
+void popup_close_info(void);
 int popup_win_closed(win_T *win);
 void popup_set_title(win_T *wp);
 void popup_update_preview_title(void);
diff --git a/src/testdir/dumps/Test_popupwin_infopopup_8.dump b/src/testdir/dumps/Test_popupwin_infopopup_8.dump
new file mode 100644 (file)
index 0000000..6838bcd
--- /dev/null
@@ -0,0 +1,14 @@
+|a+0&#ffffff0|w|o|r|d| @69
+|t|e|s|t| |t|a|w|o|r|d> @63
+|~+0#4040ff13&| @3| +0#0000001#e0e0e08|w|r|d| @4|W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#0000001| +0#0000001#e0e0e08|w|o|r|d|s| |a|r|e| |c|o@1|l| | +0#4040ff13#ffffff0@29
+|~| @3| +0#0000001#ffd7ff255|a|n|o|t|w|r|d| |W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#0000001| +0#4040ff13#ffffff0@45
+|~| @3| +0#0000001#ffd7ff255|n|o|a|w|r|d| @1|W| |e|x|t|r|a| |t|e|x|t| @1| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@45
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |U|s|e|r| |d|e|f|i|n|e|d| |c|o|m|p|l|e|t|i|o|n| |(|^|U|^|N|^|P|)| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@26
index 8df01e15a6e795de333772c66507447e1c199736..054d479efd37ae9f07b318f3a224a854aed095d0 100644 (file)
@@ -3109,6 +3109,12 @@ func Test_popupmenu_info_border()
   call term_sendkeys(buf, "otest text test text\<C-X>\<C-U>")
   call VerifyScreenDump(buf, 'Test_popupwin_infopopup_7', {})
 
+  " Test that when the option is changed the popup changes.
+  call term_sendkeys(buf, "\<Esc>")
+  call term_sendkeys(buf, ":set completepopup=border:off\<CR>")
+  call term_sendkeys(buf, "a\<C-X>\<C-U>")
+  call VerifyScreenDump(buf, 'Test_popupwin_infopopup_8', {})
+
   call term_sendkeys(buf, "\<Esc>")
   call StopVimInTerminal(buf)
   call delete('XtestInfoPopup')
index d8353cc4a770001be9e0fb3a70ec3a1f9f612021..06f7fd2b85ad8adee7639b96c5226bbdffe1a2e6 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1237,
 /**/
     1236,
 /**/