Fix kwin hanging when adding new notetype

https://forums.ankiweb.net/t/bug-anki-2-1-52-crashes-after-adding-new-note-type/20284
This commit is contained in:
Damien Elmes 2022-06-03 11:23:41 +10:00
parent 92e13ae0d3
commit a9884a1b78

View file

@ -144,22 +144,23 @@ class Models(QDialog):
return self.mm.get(NotetypeId(self.models[row].id)) return self.mm.get(NotetypeId(self.models[row].id))
def onAdd(self) -> None: def onAdd(self) -> None:
m = AddModel(self.mw, self).get() def on_success(notetype: NotetypeDict) -> None:
if m:
# if legacy add-ons already added the notetype, skip adding # if legacy add-ons already added the notetype, skip adding
if m["id"]: if notetype["id"]:
return return
# prompt for name # prompt for name
text, ok = getText(tr.actions_name(), default=m["name"]) text, ok = getText(tr.actions_name(), default=notetype["name"], parent=self)
if not ok or not text.strip(): if not ok or not text.strip():
return return
m["name"] = text notetype["name"] = text
add_notetype_legacy(parent=self, notetype=m).success( add_notetype_legacy(parent=self, notetype=notetype).success(
self.refresh_list self.refresh_list
).run_in_background() ).run_in_background()
AddModel(self.mw, on_success, self)
def onDelete(self) -> None: def onDelete(self) -> None:
if len(self.models) < 2: if len(self.models) < 2:
showInfo(tr.notetypes_please_add_another_note_type_first(), parent=self) showInfo(tr.notetypes_please_add_another_note_type_first(), parent=self)
@ -231,7 +232,12 @@ class Models(QDialog):
class AddModel(QDialog): class AddModel(QDialog):
model: Optional[NotetypeDict] model: Optional[NotetypeDict]
def __init__(self, mw: AnkiQt, parent: Optional[QWidget] = None) -> None: def __init__(
self,
mw: AnkiQt,
on_success: Callable[[NotetypeDict], None],
parent: Optional[QWidget] = None,
) -> None:
self.parent_ = parent or mw self.parent_ = parent or mw
self.mw = mw self.mw = mw
self.col = mw.col self.col = mw.col
@ -239,6 +245,7 @@ class AddModel(QDialog):
self.model = None self.model = None
self.dialog = aqt.forms.addmodel.Ui_Dialog() self.dialog = aqt.forms.addmodel.Ui_Dialog()
self.dialog.setupUi(self) self.dialog.setupUi(self)
self.setWindowModality(Qt.WindowModality.ApplicationModal)
disable_help_button(self) disable_help_button(self)
# standard models # standard models
self.notetypes: list[ self.notetypes: list[
@ -259,10 +266,8 @@ class AddModel(QDialog):
qconnect(s.activated, self.accept) qconnect(s.activated, self.accept)
# help # help
qconnect(self.dialog.buttonBox.helpRequested, self.onHelp) qconnect(self.dialog.buttonBox.helpRequested, self.onHelp)
self.on_success = on_success
def get(self) -> Optional[NotetypeDict]: self.show()
self.exec()
return self.model
def reject(self) -> None: def reject(self) -> None:
QDialog.reject(self) QDialog.reject(self)
@ -275,6 +280,7 @@ class AddModel(QDialog):
else: else:
self.model = model(self.col) self.model = model(self.col)
QDialog.accept(self) QDialog.accept(self)
self.on_success(self.model)
def onHelp(self) -> None: def onHelp(self) -> None:
openHelp(HelpPage.ADDING_A_NOTE_TYPE) openHelp(HelpPage.ADDING_A_NOTE_TYPE)