summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2022-05-10 17:59:58 +0200
committerFlorian Bruhin <me@the-compiler.org>2022-06-22 17:41:11 +0200
commit53f0409071822bde706f8646e91892f652a10112 (patch)
tree3a7629c6b02148b7619d542243292b186fe301b9
parent0db2bc20f634938203f40ff64cfc4fce2542172f (diff)
downloadqutebrowser-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.py15
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