fix: handle SIGINT so Ctrl+C cleanly exits the app
Qt's event loop swallows SIGINT. Add a periodic timer to let Python process signals and route SIGINT to the clean quit handler. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
53caf193af
commit
0900329020
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from PySide6.QtCore import QByteArray
|
from PySide6.QtCore import QByteArray, QTimer
|
||||||
from PySide6.QtGui import QAction, QIcon
|
from PySide6.QtGui import QAction, QIcon
|
||||||
from PySide6.QtNetwork import QLocalServer, QLocalSocket
|
from PySide6.QtNetwork import QLocalServer, QLocalSocket
|
||||||
from PySide6.QtWidgets import QApplication, QMenu, QSystemTrayIcon
|
from PySide6.QtWidgets import QApplication, QMenu, QSystemTrayIcon
|
||||||
@ -141,4 +142,13 @@ class MyMemoryApp:
|
|||||||
def run(self) -> int:
|
def run(self) -> int:
|
||||||
"""Run the application event loop."""
|
"""Run the application event loop."""
|
||||||
self.setup_tray()
|
self.setup_tray()
|
||||||
|
|
||||||
|
# Let Python's SIGINT handler fire inside the Qt event loop.
|
||||||
|
# A zero-interval timer gives Python a chance to run signal handlers
|
||||||
|
# between Qt event loop iterations.
|
||||||
|
timer = QTimer()
|
||||||
|
timer.start(500)
|
||||||
|
timer.timeout.connect(lambda: None)
|
||||||
|
signal.signal(signal.SIGINT, lambda *_: self._quit())
|
||||||
|
|
||||||
return self._app.exec()
|
return self._app.exec()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user