patch 9.0.0990: callback name argument is changed by setqflist()

Problem:    Callback name argument is changed by setqflist().
Solution:   Use the expanded function name for the callback, do not store it
            in the argument. (closes #11653)
diff --git a/src/popupwin.c b/src/popupwin.c
index 9bc3174..e487f0c 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -444,7 +444,13 @@
     if (get_lambda_tv_and_compile(&ptr, &tv, FALSE, &EVALARG_EVALUATE) == OK)
     {
 	wp->w_popup_timer = create_timer(time, 0);
-	wp->w_popup_timer->tr_callback = get_callback(&tv);
+	callback_T cb = get_callback(&tv);
+	if (cb.cb_name != NULL && !cb.cb_free_name)
+	{
+	    cb.cb_name = vim_strsave(cb.cb_name);
+	    cb.cb_free_name = TRUE;
+	}
+	wp->w_popup_timer->tr_callback = cb;
 	clear_tv(&tv);
     }
 }
@@ -961,6 +967,8 @@
 	{
 	    free_callback(&wp->w_filter_cb);
 	    set_callback(&wp->w_filter_cb, &callback);
+	    if (callback.cb_free_name)
+		vim_free(callback.cb_name);
 	}
     }
     nr = dict_get_bool(dict, "mapping", -1);
@@ -990,6 +998,8 @@
 	{
 	    free_callback(&wp->w_close_cb);
 	    set_callback(&wp->w_close_cb, &callback);
+	    if (callback.cb_free_name)
+		vim_free(callback.cb_name);
 	}
     }
 }
@@ -2229,7 +2239,11 @@
 	tv.vval.v_string = (char_u *)"popup_filter_menu";
 	callback = get_callback(&tv);
 	if (callback.cb_name != NULL)
+	{
 	    set_callback(&wp->w_filter_cb, &callback);
+	    if (callback.cb_free_name)
+		vim_free(callback.cb_name);
+	}
 
 	wp->w_p_wrap = 0;
 	wp->w_popup_flags |= POPF_CURSORLINE;