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
index d3d0581..b17bc39 100644
--- a/src/term.c
+++ b/src/term.c
@@ -5708,18 +5708,24 @@
&& 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;
}
}