From 023930d62e898652e68c938c6d7ac232556cb7a9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 1 Dec 2022 19:40:55 +0000 Subject: [PATCH] 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) --- src/gui_gtk_x11.c | 13 ++++++++++++- src/version.c | 2 ++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index 8b75ba8c3..ea76e3370 100644 --- 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 diff --git a/src/version.c b/src/version.c index e78e71fda..6f303d1dd 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 984, /**/ 983, /**/ -- 2.50.1