Commit: patch 9.2.0900: FocusGained still triggered when closing dialog
Christian Brabandt <[email protected]> Sun, 2 Aug 2026 21:15:05 +0200
| Newsgroups | gmane.editors.vim.devel |
|---|---|
| Message-ID | <[email protected]> |
patch 9.2.0900: FocusGained still triggered when closing dialog Commit: https://github.com/vim/vim/commit/d474289d0f12505b16b59a61ad161c57c3e596cb Author: Christoffer Aasted <[email protected]> Date: Sun Aug 2 19:00:41 2026 +0000 patch 9.2.0900: FocusGained still triggered when closing dialog Problem: FocusGained still triggered when closing dialog (after v9.2.0851) Solution: Track that dialog is active and suppress the FocusGained autocommand (Christoffer Aasted) related: #20780 closes: #20894 Signed-off-by: Christoffer Aasted <[email protected]> Signed-off-by: Christian Brabandt <[email protected]> diff --git a/src/gui.h b/src/gui.h index e2232982e..653937cfe 100644 --- a/src/gui.h +++ b/src/gui.h @@ -422,8 +422,7 @@ typedef struct Gui # ifdef FEAT_GUI_DIALOG // Multiple dialogs not allowed, just tracked for future use. int dialogs_active; // number of active GUI dialogs - - // X11 focus_in_event() by dialogs, ignored to match wayland. + // Suppress focus-in event when focus returns. int dialog_focus_pending; # endif bool is_x11; // active gdk backend in gtk is x11 diff --git a/src/gui_gtk.c b/src/gui_gtk.c index eef771e84..89159d237 100644 --- a/src/gui_gtk.c +++ b/src/gui_gtk.c @@ -1710,8 +1710,6 @@ gui_mch_dialog(int type, // type of dialog DialogInfo dialoginfo; ++gui.dialogs_active; - if (gui.is_x11) - ++gui.dialog_focus_pending; dialog = create_message_dialog(type, title, message); dialoginfo.dialog = GTK_DIALOG(dialog); @@ -1798,7 +1796,8 @@ gui_mch_dialog(int type, // type of dialog gtk_widget_destroy(dialog); } - --gui.dialogs_active; + if (gui.dialogs_active > 0) + --gui.dialogs_active; return response > 0 ? response : 0; } diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c index f2db6d1da..6b56a1ee5 100644 --- a/src/gui_gtk_x11.c +++ b/src/gui_gtk_x11.c @@ -1071,8 +1071,13 @@ focus_in_event(GtkWidget *widget, gpointer data UNUSED) { #ifdef FEAT_GUI_DIALOG - if (gui.is_x11 && gui.dialog_focus_pending > 0) + if (gui.dialog_focus_pending > 0) + { --gui.dialog_focus_pending; + ++hold_gui_events; + gui_focus_change(TRUE); + --hold_gui_events; + } else #endif gui_focus_change(TRUE); @@ -1093,6 +1098,11 @@ focus_out_event(GtkWidget *widget UNUSED, GdkEventFocus *event UNUSED, gpointer data UNUSED) { +#ifdef FEAT_GUI_DIALOG + if (gui.dialogs_active > 0) + ++gui.dialog_focus_pending; +#endif + gui_focus_change(FALSE); if (blink_state != BLINK_NONE) diff --git a/src/version.c b/src/version.c index 41209b125..ac814a01e 100644 --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 900, /**/ 899, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1wqbeL-009d7j-1C%40256bit.org.