Fix bug #399 (crashes on systems with pyqt < 5.3)
Crash occurs in usertypes.py / Question class due to Python slots being called on deleted Qt objects. This causes either a TypeError or an AttributeError (probably depending on the state of the deleted Qt object?). Fixed by declaring slots in the Question object explicitly via decorator "@pyqtSlot()". Possible further TODOs: - Find out whether this is a problem for slots in other objects as well. - Create unittest for this bug (might me somewhat tricky, though).
This commit is contained in:
parent
77df4c7241
commit
34c9a73e32
@ -27,7 +27,7 @@ import operator
|
||||
import collections.abc
|
||||
import enum as pyenum
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, QObject, QTimer
|
||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QTimer
|
||||
|
||||
from qutebrowser.utils import log, qtutils, utils
|
||||
|
||||
@ -307,6 +307,7 @@ class Question(QObject):
|
||||
raise TypeError("Mode {} is no PromptMode member!".format(val))
|
||||
self._mode = val
|
||||
|
||||
@pyqtSlot()
|
||||
def done(self):
|
||||
"""Must be called when the queston was answered completely."""
|
||||
self.answered.emit(self.answer)
|
||||
@ -317,11 +318,13 @@ class Question(QObject):
|
||||
self.answered_no.emit()
|
||||
self.completed.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def cancel(self):
|
||||
"""Cancel the question (resulting from user-input)."""
|
||||
self.cancelled.emit()
|
||||
self.completed.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def abort(self):
|
||||
"""Abort the question."""
|
||||
self.is_aborted = True
|
||||
|
Loading…
Reference in New Issue
Block a user