# HG changeset patch # User Bram Moolenaar # Date 1669923904 -3600 # Node ID eeb4d72e523ded71fb3082f431f11d992bd2ff75 # Parent f97365e31b2b8e3fef26f4f78c2d495e0e1886d3 patch 9.0.0984: GUI: remote_foreground() does not always work Commit: https://github.com/vim/vim/commit/023930d62e898652e68c938c6d7ac232556cb7a9 Author: Bram Moolenaar 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) diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c --- 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 --- 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,