# HG changeset patch # User Bram Moolenaar # Date 1610658005 -3600 # Node ID 24beca855c593d45cd5681e11a214c87ac0ef581 # Parent 2d5c14704a42906d6fd71865965db2d86735b39a patch 8.2.2352: if focus lost/gained is received twice code is not ignored Commit: https://github.com/vim/vim/commit/d44cc593cee84fc3c712ca1828d1574f80700383 Author: Bram Moolenaar Date: Thu Jan 14 21:57:58 2021 +0100 patch 8.2.2352: if focus lost/gained is received twice code is not ignored Problem: If the focus lost/gained escape sequence is received twice it is not ignored. (Christ van Willigen) Solution: Adjust the logic to ignore the escape code. diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -5708,18 +5708,24 @@ check_termcode( && key_name[0] == KS_EXTRA ) { - if (key_name[1] == KE_FOCUSGAINED && !focus_state) + if (key_name[1] == KE_FOCUSGAINED) { - ui_focus_change(TRUE); - did_cursorhold = TRUE; - focus_state = TRUE; + if (!focus_state) + { + ui_focus_change(TRUE); + did_cursorhold = TRUE; + focus_state = TRUE; + } key_name[1] = (int)KE_IGNORE; } - else if (key_name[1] == KE_FOCUSLOST && focus_state) + else if (key_name[1] == KE_FOCUSLOST) { - ui_focus_change(FALSE); - did_cursorhold = TRUE; - focus_state = FALSE; + if (focus_state) + { + ui_focus_change(FALSE); + did_cursorhold = TRUE; + focus_state = FALSE; + } key_name[1] = (int)KE_IGNORE; } } diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2352, +/**/ 2351, /**/ 2350,