diff --git a/qutebrowser/mainwindow/mainwindow.py b/qutebrowser/mainwindow/mainwindow.py index 51f73a868..b97eed133 100644 --- a/qutebrowser/mainwindow/mainwindow.py +++ b/qutebrowser/mainwindow/mainwindow.py @@ -35,6 +35,7 @@ from qutebrowser.mainwindow.statusbar import bar from qutebrowser.completion import completionwidget from qutebrowser.keyinput import modeman from qutebrowser.browser import hints, downloads, downloadview, commands +from qutebrowser.misc import crashsignal win_id_gen = itertools.count(0) @@ -392,8 +393,18 @@ class MainWindow(QWidget): self._downloadview.updateGeometry() self.tabbed_browser.tabBar().refresh() + def _do_close(self): + """Helper function for closeEvent.""" + objreg.get('session-manager').save_last_window_session() + self._save_geometry() + log.destroy.debug("Closing window {}".format(self.win_id)) + self.tabbed_browser.shutdown() + def closeEvent(self, e): """Override closeEvent to display a confirmation if needed.""" + if crashsignal.is_crashing: + e.accept() + return confirm_quit = config.get('ui', 'confirm-quit') tab_count = self.tabbed_browser.count() download_manager = objreg.get('download-manager', scope='window', @@ -425,7 +436,4 @@ class MainWindow(QWidget): e.ignore() return e.accept() - objreg.get('session-manager').save_last_window_session() - self._save_geometry() - log.destroy.debug("Closing window {}".format(self.win_id)) - self.tabbed_browser.shutdown() + self._do_close() diff --git a/qutebrowser/misc/crashsignal.py b/qutebrowser/misc/crashsignal.py index 2d3399a33..98a74b666 100644 --- a/qutebrowser/misc/crashsignal.py +++ b/qutebrowser/misc/crashsignal.py @@ -42,6 +42,10 @@ ExceptionInfo = collections.namedtuple('ExceptionInfo', 'pages, cmd_history, objects') +# Used by mainwindow.py to skip confirm questions on crashes +is_crashing = False + + class CrashHandler(QObject): """Handler for crashes, reports and exceptions. @@ -236,6 +240,10 @@ class CrashHandler(QObject): self._quitter.on_last_window_closed) except TypeError: log.destroy.exception("Error while preventing shutdown") + + global is_crashing + is_crashing = True + self._app.closeAllWindows() if self._args.no_err_windows: crashdialog.dump_exception_info(exc, info.pages, info.cmd_history,