patch 9.0.0317: when updating the whole screen a popup may not be redrawn

Problem:    When updating the whole screen a popup may not be redrawn.
Solution:   Mark the screen and windows for redraw also when not clearing.
            Also mark popup windows for redraw.
diff --git a/src/screen.c b/src/screen.c
index a1741ca..eb01fdb 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -49,7 +49,7 @@
 static int	screen_attr = 0;
 
 static void screen_char_2(unsigned off, int row, int col);
-static void screenclear2(void);
+static void screenclear2(int doclear);
 static void lineclear(unsigned off, int width, int attr);
 static void lineinvalid(unsigned off, int width);
 static int win_do_lines(win_T *wp, int row, int line_count, int mayclear, int del, int clear_attr);
@@ -2906,7 +2906,7 @@
 
     set_must_redraw(UPD_CLEAR);	// need to clear the screen later
     if (doclear)
-	screenclear2();
+	screenclear2(TRUE);
 #ifdef FEAT_GUI
     else if (gui.in_use
 	    && !gui.starting
@@ -2969,16 +2969,30 @@
 #endif
 }
 
+/*
+ * Clear the screen.
+ * May delay if there is something the user should read.
+ * Allocated the screen for resizing if needed.
+ */
     void
 screenclear(void)
 {
     check_for_delay(FALSE);
     screenalloc(FALSE);	    // allocate screen buffers if size changed
-    screenclear2();	    // clear the screen
+    screenclear2(TRUE);	    // clear the screen
+}
+
+/*
+ * Do not clear the screen but mark everything for redraw.
+ */
+    void
+redraw_as_cleared(void)
+{
+    screenclear2(FALSE);
 }
 
     static void
-screenclear2(void)
+screenclear2(int doclear)
 {
     int	    i;
 
@@ -3007,7 +3021,7 @@
 	LineWraps[i] = FALSE;
     }
 
-    if (can_clear(T_CL))
+    if (doclear && can_clear(T_CL))
     {
 	out_str(T_CL);		// clear the display
 	clear_cmdline = FALSE;
@@ -3023,7 +3037,10 @@
 
     screen_cleared = TRUE;	// can use contents of ScreenLines now
 
-    win_rest_invalid(firstwin);
+    win_rest_invalid(firstwin);	// redraw all regular windows
+#ifdef FEAT_PROP_POPUP
+    popup_redraw_all();		// redraw all popup windows
+#endif
     redraw_cmdline = TRUE;
     redraw_tabline = TRUE;
     if (must_redraw == UPD_CLEAR)	// no need to clear again