diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-05-10 17:59:58 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-06-22 17:41:11 +0200 |
commit | 53f0409071822bde706f8646e91892f652a10112 (patch) | |
tree | 3a7629c6b02148b7619d542243292b186fe301b9 | |
parent | 0db2bc20f634938203f40ff64cfc4fce2542172f (diff) | |
download | qutebrowser-53f0409071822bde706f8646e91892f652a10112.tar.gz qutebrowser-53f0409071822bde706f8646e91892f652a10112.zip |
printing: Save dialog
We need to call .deleteLater() on the dialog when printing is done.
Otherwise, it sticks around, as confirmed by :debug-all-objects.
This might also fix the macOS segfault issue.
TODO: Verify this.
-rw-r--r-- | qutebrowser/browser/browsertab.py | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 800fabf6d..704595db2 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -236,6 +236,7 @@ class AbstractPrinting(QObject): super().__init__(parent) self._widget = cast(_WidgetType, None) self._tab = tab + self._dialog: QPrintDialog = None self.printing_finished.connect(self._on_printing_finished) self.pdf_printing_finished.connect(self._on_pdf_printing_finished) @@ -245,6 +246,9 @@ class AbstractPrinting(QObject): # (and probably their printer) already. if not ok: message.error("Printing failed!") + if self._dialog is not None: + self._dialog.deleteLater() + self._dialog = None @pyqtSlot(str, bool) def _on_pdf_printing_finished(self, path, ok): @@ -283,14 +287,9 @@ class AbstractPrinting(QObject): def show_dialog(self) -> None: """Print with a QPrintDialog.""" - diag = QPrintDialog(self._tab) - if utils.is_mac: - # For some reason we get a segfault when using open() on macOS - ret = diag.exec() - if ret == QDialog.DialogCode.Accepted: - self.to_printer(diag.printer()) - else: - diag.open(lambda: self.to_printer(diag.printer())) + self._dialog = QPrintDialog(self._tab) + self._dialog.open(lambda: self.to_printer(self._dialog.printer())) + # Gets cleaned up in on_printing_finished @dataclasses.dataclass |