diff --git a/kitty/boss.py b/kitty/boss.py index 96be98239..b055f34eb 100644 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -37,7 +37,7 @@ from .fast_data_types import ( IMPERATIVE_CLOSE_REQUESTED, NO_CLOSE_REQUESTED, ChildMonitor, Color, EllipticCurveKey, KeyEvent, SingleKey, add_timer, apply_options_update, background_opacity_of, change_background_opacity, change_os_window_state, - cocoa_set_menubar_title, create_os_window, + cocoa_set_menubar_title, create_os_window, last_focused_os_window_id, current_application_quit_request, current_os_window, destroy_global_data, focus_os_window, get_boss, get_options, get_os_window_size, global_font_size, mark_os_window_for_close, os_window_font_size, @@ -351,7 +351,7 @@ class Boss: yield { 'id': os_window_id, 'platform_window_id': platform_window_id(os_window_id), - 'is_focused': tm is active_tab_manager, + 'is_focused': tm is active_tab_manager and os_window_id == last_focused_os_window_id(), 'tabs': list(tm.list_tabs(active_tab, active_window, self_window)), 'wm_class': tm.wm_class, 'wm_name': tm.wm_name diff --git a/kitty/tabs.py b/kitty/tabs.py index 6695d6e9a..75b6c39f0 100644 --- a/kitty/tabs.py +++ b/kitty/tabs.py @@ -46,6 +46,7 @@ class TabMouseEvent(NamedTuple): class TabDict(TypedDict): id: int is_focused: bool + is_active_tab: bool title: str layout: str layout_state: Dict[str, Any] @@ -700,7 +701,7 @@ class Tab: # {{{ def list_windows(self, active_window: Optional[Window], self_window: Optional[Window] = None) -> Generator[WindowDict, None, None]: for w in self: - yield w.as_dict(is_focused=w is active_window, is_self=w is self_window) + yield w.as_dict(is_focused=w is active_window and w.os_window_id == last_focused_os_window_id(), is_self=w is self_window) def matches_query(self, field: str, query: str, active_tab_manager: Optional['TabManager'] = None) -> bool: if field == 'title': @@ -938,7 +939,8 @@ class TabManager: # {{{ for tab in self: yield { 'id': tab.id, - 'is_focused': tab is active_tab, + 'is_focused': tab is active_tab and tab.os_window_id == last_focused_os_window_id(), + 'is_active_tab': tab is active_tab, 'title': tab.name or tab.title, 'layout': str(tab.current_layout.name), 'layout_state': tab.current_layout.layout_state(), diff --git a/kitty/window.py b/kitty/window.py index d96ed1802..ae2377e40 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -138,6 +138,7 @@ def compile_match_query(exp: str, is_simple: bool = True) -> MatchPatternType: class WindowDict(TypedDict): id: int is_focused: bool + is_active_window: bool title: str pid: Optional[int] cwd: str @@ -614,10 +615,11 @@ class Window: def __repr__(self) -> str: return f'Window(title={self.title}, id={self.id})' - def as_dict(self, is_focused: bool = False, is_self: bool = False) -> WindowDict: + def as_dict(self, is_focused: bool = False, is_self: bool = False, is_active_window: bool = False) -> WindowDict: return dict( id=self.id, is_focused=is_focused, + is_active_window=is_active_window, title=self.title, pid=self.child.pid, cwd=self.child.current_cwd or self.child.cwd,