@@ -185,8 +185,12 @@ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
185185 get_pos_options (wp , dict );
186186
187187 wp -> w_zindex = dict_get_number (dict , (char_u * )"zindex" );
188+ if (wp -> w_zindex < 1 )
189+ wp -> w_zindex = POPUPWIN_DEFAULT_ZINDEX ;
190+ if (wp -> w_zindex > 32000 )
191+ wp -> w_zindex = 32000 ;
188192
189- #if defined(FEAT_TIMERS )
193+ # if defined(FEAT_TIMERS )
190194 // Add timer to close the popup after some time.
191195 nr = dict_get_number (dict , (char_u * )"time" );
192196 if (nr > 0 )
@@ -204,7 +208,7 @@ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
204208 clear_tv (& tv );
205209 }
206210 }
207- #endif
211+ # endif
208212
209213 // Option values resulting in setting an option.
210214 str = dict_get_string (dict , (char_u * )"highlight" , FALSE);
@@ -330,6 +334,8 @@ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
330334 else
331335 semsg (_ (e_invarg2 ), tv_get_string (& di -> di_tv ));
332336 }
337+
338+ popup_mask_refresh = TRUE;
333339}
334340
335341/*
@@ -435,6 +441,10 @@ popup_adjust_position(win_T *wp)
435441 int left_extra = wp -> w_popup_border [3 ] + wp -> w_popup_padding [3 ];
436442 int extra_height = top_extra + bot_extra ;
437443 int extra_width = left_extra + right_extra ;
444+ int org_winrow = wp -> w_winrow ;
445+ int org_wincol = wp -> w_wincol ;
446+ int org_width = wp -> w_width ;
447+ int org_height = wp -> w_height ;
438448
439449 wp -> w_winrow = 0 ;
440450 wp -> w_wincol = 0 ;
@@ -554,6 +564,16 @@ popup_adjust_position(win_T *wp)
554564 }
555565
556566 wp -> w_popup_last_changedtick = CHANGEDTICK (wp -> w_buffer );
567+
568+ // Need to update popup_mask if the position or size changed.
569+ if (org_winrow != wp -> w_winrow
570+ || org_wincol != wp -> w_wincol
571+ || org_width != wp -> w_width
572+ || org_height != wp -> w_height )
573+ {
574+ redraw_all_later (NOT_VALID );
575+ popup_mask_refresh = TRUE;
576+ }
557577}
558578
559579typedef enum
@@ -565,7 +585,7 @@ typedef enum
565585/*
566586 * popup_create({text}, {options})
567587 * popup_atcursor({text}, {options})
568- * When called from f_popup_atcursor() "atcursor " is TRUE .
588+ * When called from f_popup_atcursor() "type " is TYPE_ATCURSOR .
569589 */
570590 static void
571591popup_create (typval_T * argvars , typval_T * rettv , create_type_T type )
@@ -675,18 +695,18 @@ popup_create(typval_T *argvars, typval_T *rettv, create_type_T type)
675695 set_moved_columns (wp , FIND_STRING );
676696 }
677697
698+ // set default values
699+ wp -> w_zindex = POPUPWIN_DEFAULT_ZINDEX ;
700+
678701 // Deal with options.
679702 apply_options (wp , buf , argvars [1 ].vval .v_dict );
680703
681- // set default values
682- if (wp -> w_zindex == 0 )
683- wp -> w_zindex = 50 ;
684-
685704 popup_adjust_position (wp );
686705
687706 wp -> w_vsep_width = 0 ;
688707
689708 redraw_all_later (NOT_VALID );
709+ popup_mask_refresh = TRUE;
690710}
691711
692712/*
@@ -815,6 +835,7 @@ f_popup_hide(typval_T *argvars, typval_T *rettv UNUSED)
815835 wp -> w_popup_flags |= POPF_HIDDEN ;
816836 -- wp -> w_buffer -> b_nwindows ;
817837 redraw_all_later (NOT_VALID );
838+ popup_mask_refresh = TRUE;
818839 }
819840}
820841
@@ -832,6 +853,7 @@ f_popup_show(typval_T *argvars, typval_T *rettv UNUSED)
832853 wp -> w_popup_flags &= ~POPF_HIDDEN ;
833854 ++ wp -> w_buffer -> b_nwindows ;
834855 redraw_all_later (NOT_VALID );
856+ popup_mask_refresh = TRUE;
835857 }
836858}
837859
@@ -843,6 +865,7 @@ popup_free(win_T *wp)
843865 clear_cmdline = TRUE;
844866 win_free_popup (wp );
845867 redraw_all_later (NOT_VALID );
868+ popup_mask_refresh = TRUE;
846869}
847870
848871/*
@@ -944,7 +967,6 @@ f_popup_move(typval_T *argvars, typval_T *rettv UNUSED)
944967 if (wp -> w_winrow + wp -> w_height >= cmdline_row )
945968 clear_cmdline = TRUE;
946969 popup_adjust_position (wp );
947- redraw_all_later (NOT_VALID );
948970}
949971
950972/*
@@ -984,7 +1006,7 @@ f_popup_getpos(typval_T *argvars, typval_T *rettv)
9841006}
9851007
9861008/*
987- * f_popup_getoptions ({id})
1009+ * popup_getoptions ({id})
9881010 */
9891011 void
9901012f_popup_getoptions (typval_T * argvars , typval_T * rettv )
0 commit comments