From bf462e535a729a513a5a0401ace812366e715a32 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 5 May 2021 14:45:57 +0530 Subject: [PATCH] Fix focus changes not being sent to windows when focused window changes because of the previously focused window being closed Fixes #3571 --- docs/changelog.rst | 3 +++ kitty/boss.py | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index e11c93ccd..076092473 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -21,6 +21,9 @@ To update |kitty|, :doc:`follow the instructions `. - Fix tab activity symbol not appearing if no other changes happen in tab bar even when there is activity in a tab (:iss:`3571`) +- Fix focus changes not being sent to windows when focused window changes + because of the previously focused window being closed (:iss:`3571`) + 0.20.2 [2021-04-28] ---------------------- diff --git a/kitty/boss.py b/kitty/boss.py index d89a1418e..42a6d5a08 100755 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -436,6 +436,7 @@ def _cleanup_tab_after_window_removal(self, src_tab: Tab) -> None: mark_os_window_for_close(src_tab.os_window_id) def on_child_death(self, window_id: int) -> None: + prev_active_window = self.active_window window = self.window_id_map.pop(window_id, None) if window is None: return @@ -464,6 +465,12 @@ def on_child_death(self, window_id: int) -> None: import traceback traceback.print_exc() window.action_on_close = window.action_on_removal = None + window = self.active_window + if window is not prev_active_window: + if prev_active_window is not None: + prev_active_window.focus_changed(False) + if window is not None: + window.focus_changed(True) def close_window(self, window: Optional[Window] = None) -> None: window = window or self.active_window