diff --git a/libs/pyTermTk/TermTk/TTkCore/drivers/term_unix_common.py b/libs/pyTermTk/TermTk/TTkCore/drivers/term_unix_common.py index c0dc5059..f74e678c 100644 --- a/libs/pyTermTk/TermTk/TTkCore/drivers/term_unix_common.py +++ b/libs/pyTermTk/TermTk/TTkCore/drivers/term_unix_common.py @@ -127,6 +127,7 @@ class _TTkTerm(TTkTermBase): def _registerResizeCb(callback:Callable[[int,int],None]) -> None: _TTkTerm._sigWinChCb = callback # Dummy call to retrieve the terminal size + # signal only works in main thread of the main interpreter _TTkTerm._sigWinCh(signal.SIGWINCH, None) signal.signal(signal.SIGWINCH, _TTkTerm._sigWinCh) TTkTermBase.registerResizeCb = _registerResizeCb diff --git a/libs/pyTermTk/TermTk/TTkCore/drivers/unix.py b/libs/pyTermTk/TermTk/TTkCore/drivers/unix.py index 696daa00..577df26e 100644 --- a/libs/pyTermTk/TermTk/TTkCore/drivers/unix.py +++ b/libs/pyTermTk/TermTk/TTkCore/drivers/unix.py @@ -23,7 +23,7 @@ __all__ = ['TTkSignalDriver','TTkInputDriver'] import sys, os, re -import signal +import atexit, signal from select import select try: import fcntl, termios, tty @@ -84,6 +84,7 @@ class TTkSignalDriver(): signal.signal(signal.SIGCONT, TTkSignalDriver._SIGCONT) # Resume signal.signal(signal.SIGINT, TTkSignalDriver._SIGINT) # Ctrl-C + @atexit.register def exit(): signal.signal(signal.SIGINT, signal.SIG_DFL) diff --git a/libs/pyTermTk/TermTk/TTkCore/ttk.py b/libs/pyTermTk/TermTk/TTkCore/ttk.py index 479b0385..41b3b66c 100644 --- a/libs/pyTermTk/TermTk/TTkCore/ttk.py +++ b/libs/pyTermTk/TermTk/TTkCore/ttk.py @@ -151,9 +151,10 @@ class TTk(_TTkRootContainer): TTkSignalDriver.sigStop.connect(self._SIGSTOP) TTkSignalDriver.sigCont.connect(self._SIGCONT) TTkSignalDriver.sigInt.connect( self._SIGINT) + TTkSignalDriver.init() + self._drawMutex = threading.Lock() self._paintEvent = threading.Event() - self._paintEvent.set() self.setFocusPolicy(TTkK.ClickFocus) self.hide() w,h = TTkTerm.getTerminalSize() @@ -167,6 +168,7 @@ class TTk(_TTkRootContainer): self._showMouseCursor = True TTkHelper.registerRootWidget(self) + TTkTerm.registerResizeCb(self._win_resize_cb) frame = 0 time = time.time() @@ -200,13 +202,7 @@ class TTk(_TTkRootContainer): TTkLog.debug( "Starting Main Loop..." ) TTkLog.debug(f"screen = ({TTkTerm.getTerminalSize()})") - # Register events - TTkSignalDriver.init() - - TTkLog.debug("Signal Event Registered") - - TTkTerm.registerResizeCb(self._win_resize_cb) - + self._paintEvent.set() self._timer.timeout.connect(self._time_event) self._timer.start(0.1) self.show() @@ -231,7 +227,6 @@ class TTk(_TTkRootContainer): TTkHelper.quitEvent.emit() self._quit_timer() self._timer.join() - TTkSignalDriver.exit() self.quit() TTkTerm.exit() for e in self._exceptions: diff --git a/tools/check.import.sh b/tools/check.import.sh index 84849a1d..e43dbe82 100755 --- a/tools/check.import.sh +++ b/tools/check.import.sh @@ -66,7 +66,7 @@ __check(){ -e "drivers/_unused_.unix_thread.py:import threading" \ -e "drivers/_unused_.unix_thread.py:import queue" \ -e "drivers/unix.py:import sys, os, re" \ - -e "drivers/unix.py:import signal" \ + -e "drivers/unix.py:import atexit, signal" \ -e "drivers/unix.py:from select import select" \ -e "drivers/windows.py:import signal" \ -e "drivers/windows.py:from ctypes import Structure, Union, byref, wintypes, windll" \