patch 8.1.1406: popup_hide() and popup_show() not implemented yet

Problem:    popup_hide() and popup_show() not implemented yet.
Solution:   Implement the functions.
diff --git a/src/popupwin.c b/src/popupwin.c
index e39ee67..0857f6b 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -195,18 +195,85 @@
 }
 
 /*
+ * Find the popup window with window-ID "id".
+ * If the popup window does not exist NULL is returned.
+ * If the window is not a popup window, and error message is given.
+ */
+    static win_T *
+find_popup_win(int id)
+{
+    win_T *wp = win_id2wp(id);
+
+    if (wp != NULL && !bt_popup(wp->w_buffer))
+    {
+	semsg(_("E993: window %d is not a popup window"), id);
+	return NULL;
+    }
+    return wp;
+}
+
+/*
+ * Return TRUE if there any popups that are not hidden.
+ */
+    int
+popup_any_visible(void)
+{
+    win_T *wp;
+
+    for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
+	if ((wp->w_popup_flags & PFL_HIDDEN) == 0)
+	    return TRUE;
+    for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
+	if ((wp->w_popup_flags & PFL_HIDDEN) == 0)
+	    return TRUE;
+    return FALSE;
+}
+
+/*
  * popup_close({id})
  */
     void
 f_popup_close(typval_T *argvars, typval_T *rettv UNUSED)
 {
-    int		nr = (int)tv_get_number(argvars);
+    int		id = (int)tv_get_number(argvars);
 
-    popup_close(nr);
+    popup_close(id);
+}
+
+/*
+ * popup_hide({id})
+ */
+    void
+f_popup_hide(typval_T *argvars, typval_T *rettv UNUSED)
+{
+    int		id = (int)tv_get_number(argvars);
+    win_T	*wp = find_popup_win(id);
+
+    if (wp != NULL && (wp->w_popup_flags & PFL_HIDDEN) == 0)
+    {
+	wp->w_popup_flags |= PFL_HIDDEN;
+	redraw_all_later(NOT_VALID);
+    }
+}
+
+/*
+ * popup_show({id})
+ */
+    void
+f_popup_show(typval_T *argvars, typval_T *rettv UNUSED)
+{
+    int		id = (int)tv_get_number(argvars);
+    win_T	*wp = find_popup_win(id);
+
+    if (wp != NULL && (wp->w_popup_flags & PFL_HIDDEN) != 0)
+    {
+	wp->w_popup_flags &= ~PFL_HIDDEN;
+	redraw_all_later(NOT_VALID);
+    }
 }
 
     static void
-popup_undisplay(win_T *wp)
+popup_free(win_T *wp)
 {
     if (wp->w_winrow + wp->w_height >= cmdline_row)
 	clear_cmdline = TRUE;
@@ -232,7 +299,7 @@
 		first_popupwin = wp->w_next;
 	    else
 		prev->w_next = wp->w_next;
-	    popup_undisplay(wp);
+	    popup_free(wp);
 	    return;
 	}
 
@@ -258,7 +325,7 @@
 		*root = wp->w_next;
 	    else
 		prev->w_next = wp->w_next;
-	    popup_undisplay(wp);
+	    popup_free(wp);
 	    return;
 	}
 }