From 9cda076c930aa966896c050537450e8220b9fbac Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 6 Nov 2021 11:28:56 +0530 Subject: [PATCH] Fix restoring of OS window title after visual selection --- kitty/boss.py | 6 +++--- kitty/fast_data_types.pyi | 2 +- kitty/state.c | 17 ++++++++++------- kitty/state.h | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/kitty/boss.py b/kitty/boss.py index 869d67897..b1af10c51 100755 --- a/kitty/boss.py +++ b/kitty/boss.py @@ -38,8 +38,8 @@ from .fast_data_types import ( redirect_mouse_handling, ring_bell, safe_pipe, set_application_quit_request, set_background_image, set_boss, set_clipboard_string, set_in_sequence_mode, set_options, - set_os_window_size, set_os_window_title, sync_os_window_title, - thread_write, toggle_fullscreen, toggle_maximized + set_os_window_size, set_os_window_title, thread_write, toggle_fullscreen, + toggle_maximized ) from .key_encoding import get_name_to_functional_number_map from .keys import get_shortcut, shortcut_matches @@ -171,7 +171,7 @@ class VisualSelect: self.callback(tab, w) def clear_global_state(self) -> 'Boss': - sync_os_window_title(self.os_window_id) + set_os_window_title(self.os_window_id, '') boss = get_boss() redirect_mouse_handling(False) boss.clear_pending_sequences() diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index 909250b55..32ff71453 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -1323,5 +1323,5 @@ def send_data_to_peer(peer_id: int, data: Union[str, bytes]) -> None: pass -def set_os_window_title(os_window_id: int, title: str) -> Optional[str]: +def set_os_window_title(os_window_id: int, title: str) -> None: pass diff --git a/kitty/state.c b/kitty/state.c index afb9ddfed..1fcca635e 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -265,7 +265,7 @@ update_window_title(id_type os_window_id, id_type tab_id, id_type window_id, PyO void set_os_window_title_from_window(Window *w, OSWindow *os_window) { - if (os_window->disallow_title_changes) return; + if (os_window->disallow_title_changes || os_window->title_is_overriden) return; if (w->title && w->title != os_window->window_title) { Py_XDECREF(os_window->window_title); os_window->window_title = w->title; @@ -844,14 +844,17 @@ PYWRAP1(set_os_window_title) { id_type os_window_id; const char *title; PA("Ks", &os_window_id, &title); - PyObject *old_title = NULL; WITH_OS_WINDOW(os_window_id) - old_title = os_window->window_title; - Py_XINCREF(old_title); - set_os_window_title(os_window, title); + if (strlen(title)) { + os_window->title_is_overriden = true; + set_os_window_title(os_window, title); + } else { + os_window->title_is_overriden = false; + if (os_window->window_title) set_os_window_title(os_window, PyUnicode_AsUTF8(os_window->window_title)); + update_os_window_title(os_window); + } END_WITH_OS_WINDOW - if (!old_title) Py_RETURN_NONE; - return old_title; + Py_RETURN_NONE; } diff --git a/kitty/state.h b/kitty/state.h index 794c2ccf6..d02e23277 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -185,7 +185,7 @@ typedef struct { double logical_dpi_x, logical_dpi_y, font_sz_in_pts; bool mouse_button_pressed[32]; PyObject *window_title; - bool disallow_title_changes; + bool disallow_title_changes, title_is_overriden; bool viewport_size_dirty, viewport_updated_at_least_once; LiveResizeInfo live_resize; bool has_pending_resizes, is_semi_transparent, shown_once, is_damaged;