diff --git a/src/screen.c b/src/screen.c
index 763d7a8..4a70295 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -108,7 +108,7 @@
 
     if (*wp->w_p_wcr != NUL)
 	wcr_attr = syn_name2attr(wp->w_p_wcr);
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     else if (WIN_IS_POPUP(wp))
     {
 	if (wp->w_popup_flags & POPF_INFO)
@@ -348,7 +348,7 @@
 }
 #endif
 
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 /*
  * Return TRUE if this position has a higher level popup or this cell is
  * transparent in the current popup.
@@ -460,7 +460,7 @@
     }
 #endif /* FEAT_RIGHTLEFT */
 
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     // First char of a popup window may go on top of the right half of a
     // double-wide character. Clear the left half to avoid it getting the popup
     // window background color.
@@ -499,7 +499,7 @@
 		redraw_this = TRUE;
 	}
 #endif
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	if (blocked_by_popup(row, col + coloff))
 	    redraw_this = FALSE;
 #endif
@@ -744,7 +744,7 @@
     }
 
     if (clear_width > 0
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	    && !(flags & SLF_POPUP)  // no separator for popup window
 #endif
 	    )
@@ -753,7 +753,7 @@
 	// right of the window contents.  But not on top of a popup window.
 	if (coloff + col < Columns)
 	{
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	    if (!blocked_by_popup(row, col + coloff))
 #endif
 	    {
@@ -1586,7 +1586,7 @@
 		|| exmode_active;
 
 	if ((need_redraw || force_redraw_this)
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 		&& !blocked_by_popup(row, col)
 #endif
 	   )
@@ -2031,12 +2031,12 @@
     // Skip if under the popup menu.
     // Popup windows with zindex higher than POPUPMENU_ZINDEX go on top.
     if (pum_under_menu(row, col)
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	    && screen_zindex <= POPUPMENU_ZINDEX
 #endif
 	    )
 	return;
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     if (blocked_by_popup(row, col))
 	return;
 #endif
@@ -2338,7 +2338,7 @@
 		    || force_next
 #endif
 		    )
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 		    // Skip if under a(nother) popup.
 		    && !blocked_by_popup(row, col)
 #endif
@@ -2479,7 +2479,7 @@
     unsigned	    *new_LineOffset;
     char_u	    *new_LineWraps;
     short	    *new_TabPageIdxs;
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     short	    *new_popup_mask;
     short	    *new_popup_mask_next;
     char	    *new_popup_transparent;
@@ -2540,7 +2540,7 @@
 	win_free_lsize(wp);
     if (aucmd_win != NULL)
 	win_free_lsize(aucmd_win);
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     // global popup windows
     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	win_free_lsize(wp);
@@ -2565,7 +2565,7 @@
     new_LineOffset = LALLOC_MULT(unsigned, Rows);
     new_LineWraps = LALLOC_MULT(char_u, Rows);
     new_TabPageIdxs = LALLOC_MULT(short, Columns);
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     new_popup_mask = LALLOC_MULT(short, Rows * Columns);
     new_popup_mask_next = LALLOC_MULT(short, Rows * Columns);
     new_popup_transparent = LALLOC_MULT(char, Rows * Columns);
@@ -2582,7 +2582,7 @@
     if (aucmd_win != NULL && aucmd_win->w_lines == NULL
 					&& win_alloc_lines(aucmd_win) == FAIL)
 	outofmem = TRUE;
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     // global popup windows
     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	if (win_alloc_lines(wp) == FAIL)
@@ -2612,7 +2612,7 @@
 	    || new_LineOffset == NULL
 	    || new_LineWraps == NULL
 	    || new_TabPageIdxs == NULL
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	    || new_popup_mask == NULL
 	    || new_popup_mask_next == NULL
 	    || new_popup_transparent == NULL
@@ -2637,7 +2637,7 @@
 	VIM_CLEAR(new_LineOffset);
 	VIM_CLEAR(new_LineWraps);
 	VIM_CLEAR(new_TabPageIdxs);
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	VIM_CLEAR(new_popup_mask);
 	VIM_CLEAR(new_popup_mask_next);
 	VIM_CLEAR(new_popup_transparent);
@@ -2715,7 +2715,7 @@
 	/* Use the last line of the screen for the current line. */
 	current_ScreenLine = new_ScreenLines + Rows * Columns;
 
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	vim_memset(new_popup_mask, 0, Rows * Columns * sizeof(short));
 	vim_memset(new_popup_transparent, 0, Rows * Columns * sizeof(char));
 #endif
@@ -2734,7 +2734,7 @@
     LineOffset = new_LineOffset;
     LineWraps = new_LineWraps;
     TabPageIdxs = new_TabPageIdxs;
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     popup_mask = new_popup_mask;
     popup_mask_next = new_popup_mask_next;
     popup_transparent = new_popup_transparent;
@@ -2803,7 +2803,7 @@
     VIM_CLEAR(LineOffset);
     VIM_CLEAR(LineWraps);
     VIM_CLEAR(TabPageIdxs);
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     VIM_CLEAR(popup_mask);
     VIM_CLEAR(popup_mask_next);
     VIM_CLEAR(popup_transparent);
@@ -2948,7 +2948,7 @@
 		|| cterm_normal_bg_color == 0
 #endif
 		|| *T_UT != NUL)
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	    && !(p == T_CE && popup_visible)
 #endif
 	    );
@@ -3412,7 +3412,7 @@
 	return FAIL;
     }
 
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
     // this doesn't work when there are popups visible
     if (popup_visible)
 	return FAIL;
@@ -3544,7 +3544,7 @@
 	     || (clip_star.state != SELECT_CLEARED
 						 && redrawing_for_callback > 0)
 #endif
-#ifdef FEAT_TEXT_PROP
+#ifdef FEAT_PROP_POPUP
 	     || popup_visible
 #endif
 	     )
