diff --git a/docs/changelog.rst b/docs/changelog.rst index f18762ab8..922070c0e 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -76,6 +76,8 @@ To update |kitty|, :doc:`follow the instructions `. - Fix a regression that caused using the ``title`` command in session files to stop working (:iss:`3676`) +- macOS: Fix a rare crash on exit (:iss:`3686`) + 0.20.3 [2021-05-06] ---------------------- diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index eb36fc3bd..e8b6912f4 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -160,9 +160,11 @@ static PyObject *notification_activated_callback = NULL; static PyObject* set_notification_activated_callback(PyObject *self UNUSED, PyObject *callback) { - if (notification_activated_callback) Py_DECREF(notification_activated_callback); - notification_activated_callback = callback; - Py_INCREF(callback); + Py_CLEAR(notification_activated_callback); + if (callback != Py_None) + notification_activated_callback = callback; + Py_INCREF(callback); + } Py_RETURN_NONE; } @@ -638,7 +640,6 @@ cleanup() { if (dockMenu) [dockMenu release]; dockMenu = nil; - Py_CLEAR(notification_activated_callback); #ifndef KITTY_USE_DEPRECATED_MACOS_NOTIFICATION_API drain_pending_notifications(NO); diff --git a/kitty/fast_data_types.pyi b/kitty/fast_data_types.pyi index ad96d2803..16ba2e443 100644 --- a/kitty/fast_data_types.pyi +++ b/kitty/fast_data_types.pyi @@ -1182,3 +1182,7 @@ def click_mouse_url(os_window_id: int, tab_id: int, window_id: int) -> None: def mouse_selection(os_window_id: int, tab_id: int, window_id: int, code: int, button: int) -> None: pass + + +def set_notification_activated_callback(cb: Optional[Callable]) -> None: + pass diff --git a/kitty/main.py b/kitty/main.py index ea180800c..4e116757f 100644 --- a/kitty/main.py +++ b/kitty/main.py @@ -178,6 +178,9 @@ class AppRunner: finally: set_options(None) free_font_data() # must free font data before glfw/freetype/fontconfig/opengl etc are finalized + if is_macos: + from kitty.fast_data_types import set_notification_activated_callback + set_notification_activated_callback(None) run_app = AppRunner()