diff --git a/src/__builtins__.py b/src/__builtins__.py index 5878f30..ef8f994 100644 --- a/src/__builtins__.py +++ b/src/__builtins__.py @@ -1,6 +1,7 @@ # Python imports import builtins import threading +import sys # Lib imports @@ -13,10 +14,6 @@ from utils.logger import Logger from utils.settings_manager.manager import SettingsManager -class BuiltinsException(Exception): - ... - - # NOTE: Threads WILL NOT die with parent's destruction. def threaded_wrapper(fn): @@ -51,4 +48,14 @@ builtins.logger = Logger(settings_manager.get_home_config_path(), \ builtins.threaded = threaded_wrapper builtins.daemon_threaded = daemon_threaded_wrapper -builtins.event_sleep_time = 0.05 + + + +def custom_except_hook(exc_type, exc_value, exc_traceback): + if issubclass(exc_type, KeyboardInterrupt): + sys.__excepthook__(exc_type, exc_value, exc_traceback) + return + + logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) + +sys.excepthook = custom_except_hook diff --git a/src/core/controller.py b/src/core/controller.py index 238882a..3801ae7 100644 --- a/src/core/controller.py +++ b/src/core/controller.py @@ -48,6 +48,7 @@ class Controller(DummyMixin, SignalsMixins, ControllerData): self.window.connect("key-release-event", self.on_global_key_release_controller) def _subscribe_to_events(self): + event_system.subscribe("shutting_down", lambda: print("Shutting down...")) event_system.subscribe("handle_file_from_ipc", self.handle_file_from_ipc) event_system.subscribe("handle_dir_from_ipc", self.handle_dir_from_ipc) event_system.subscribe("tggl_top_main_menubar", self._tggl_top_main_menubar) diff --git a/src/core/window.py b/src/core/window.py index 48fce90..daceb4f 100644 --- a/src/core/window.py +++ b/src/core/window.py @@ -1,5 +1,4 @@ # Python imports -import time import signal # Lib imports @@ -99,6 +98,8 @@ class Window(Gtk.ApplicationWindow): def _tear_down(self, widget = None, eve = None): + event_system.emit("shutting_down") + size = self.get_default_size() pos = self.get_position() @@ -109,5 +110,4 @@ class Window(Gtk.ApplicationWindow): settings_manager.save_settings() settings_manager.clear_pid() - time.sleep(event_sleep_time) Gtk.main_quit()