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 #11641)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 8b75ba8..ea76e33 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -780,7 +780,8 @@
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 @@
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