changeset 31301:eeb4d72e523d v9.0.0984

patch 9.0.0984: GUI: remote_foreground() does not always work Commit: https://github.com/vim/vim/commit/023930d62e898652e68c938c6d7ac232556cb7a9 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 1 19:40:55 2022 +0000 patch 9.0.0984: GUI: remote_foreground() does not always work Problem: GUI: remote_foreground() does not always work. (Ron Aaron) Solution: For GTK use gtk_window_set_keep_above(). (issue https://github.com/vim/vim/issues/11641)
author Bram Moolenaar <Bram@vim.org>
date Thu, 01 Dec 2022 20:45:04 +0100
parents f97365e31b2b
children b55781a559df
files src/gui_gtk_x11.c src/version.c
diffstat 2 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -780,7 +780,8 @@ draw_event(GtkWidget *widget UNUSED,
 	    for (i = 0; i < list->num_rectangles; i++)
 	    {
 		const cairo_rectangle_t *rect = &list->rectangles[i];
-		cairo_rectangle(cr, rect->x, rect->y, rect->width, rect->height);
+		cairo_rectangle(cr, rect->x, rect->y,
+						    rect->width, rect->height);
 		cairo_fill(cr);
 	    }
 	}
@@ -6313,7 +6314,17 @@ gui_mch_iconify(void)
     void
 gui_mch_set_foreground(void)
 {
+    // Just calling gtk_window_present() used to work in the past, but now this
+    // sequence appears to be needed:
+    // - Show the window on top of others.
+    // - Present the window (also shows it above others).
+    // - Do not the window on top of others (otherwise it would be stuck there).
+    gtk_window_set_keep_above(GTK_WINDOW(gui.mainwin), TRUE);
+    gui_may_flush();
     gtk_window_present(GTK_WINDOW(gui.mainwin));
+    gui_may_flush();
+    gtk_window_set_keep_above(GTK_WINDOW(gui.mainwin), FALSE);
+    gui_may_flush();
 }
 #endif
 
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    984,
+/**/
     983,
 /**/
     982,