Mercurial > vim
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