diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/leap/bitmask/gui/app.py | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/leap/bitmask/gui/app.py b/src/leap/bitmask/gui/app.py index 4bd9190..cf4ac4b 100644 --- a/src/leap/bitmask/gui/app.py +++ b/src/leap/bitmask/gui/app.py @@ -25,6 +25,8 @@ import os import signal import sys +from functools import partial + from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtWebKit, QtWebKitWidgets @@ -47,11 +49,15 @@ class BrowserWindow(QtWidgets.QDialog): self.setWindowTitle('Bitmask') self.resize(800, 600) self.load_app() + self.closing = False def load_app(self): self.view.load(QtCore.QUrl(BITMASK_URI)) - def shutdown(self): + def shutdown(self, *args): + if self.closing: + return + self.closing = True global bitmaskd bitmaskd.join() with open(pid) as f: @@ -68,6 +74,12 @@ class BrowserWindow(QtWidgets.QDialog): sys.exit(1) +def _handle_kill(*args, **kw): + win = kw.get('win') + if win: + QtCore.QTimer.singleShot(0, win.close) + + def launch_gui(): global qApp global bitmaskd @@ -81,6 +93,16 @@ def launch_gui(): qApp.setQuitOnLastWindowClosed(True) qApp.lastWindowClosed.connect(browser.shutdown) + signal.signal( + signal.SIGINT, + partial(_handle_kill, win=browser)) + + # Avoid code to get stuck inside c++ loop, returning control + # to python land. + timer = QtCore.QTimer() + timer.timeout.connect(lambda: None) + timer.start(500) + browser.show() sys.exit(qApp.exec_()) |