diff --git a/qt/aqt/browser/browser.py b/qt/aqt/browser/browser.py index d3cfd0fc2..e490ec4a1 100644 --- a/qt/aqt/browser/browser.py +++ b/qt/aqt/browser/browser.py @@ -673,19 +673,22 @@ class Browser(QMainWindow): cids = self.table.get_selected_card_ids() did = self.mw.col.db.scalar("select did from cards where id = ?", cids[0]) current = self.mw.col.decks.get(did)["name"] - ret = StudyDeck( + + def callback(ret: StudyDeck) -> None: + if not ret.name: + return + did = self.col.decks.id(ret.name) + set_card_deck(parent=self, card_ids=cids, deck_id=did).run_in_background() + + StudyDeck( self.mw, current=current, accept=tr.browsing_move_cards(), title=tr.browsing_change_deck(), help=HelpPage.BROWSING, parent=self, + callback=callback, ) - if not ret.name: - return - did = self.col.decks.id(ret.name) - - set_card_deck(parent=self, card_ids=cids, deck_id=did).run_in_background() # legacy diff --git a/qt/aqt/customstudy.py b/qt/aqt/customstudy.py index f53710ddb..5b021c9b4 100644 --- a/qt/aqt/customstudy.py +++ b/qt/aqt/customstudy.py @@ -32,10 +32,9 @@ class CustomStudy(QDialog): self.created_custom_study = False f.setupUi(self) disable_help_button(self) - self.setWindowModality(Qt.WindowModality.WindowModal) self.setupSignals() f.radioNew.click() - self.exec() + self.open() def setupSignals(self) -> None: f = self.form diff --git a/qt/aqt/deckchooser.py b/qt/aqt/deckchooser.py index bc91e0b12..106c31a02 100644 --- a/qt/aqt/deckchooser.py +++ b/qt/aqt/deckchooser.py @@ -91,23 +91,28 @@ class DeckChooser(QHBoxLayout): from aqt.studydeck import StudyDeck current = self.selected_deck_name() - ret = StudyDeck( - self.mw, - current=current, - accept=tr.actions_choose(), - title=tr.qt_misc_choose_deck(), - help=HelpPage.EDITING, - cancel=False, - parent=self._widget, - geomKey="selectDeck", - ) - if ret.name: + + def callback(ret: StudyDeck) -> None: + if not ret.name: + return new_selected_deck_id = self.mw.col.decks.by_name(ret.name)["id"] if self.selected_deck_id != new_selected_deck_id: self.selected_deck_id = new_selected_deck_id if func := self.on_deck_changed: func(new_selected_deck_id) + StudyDeck( + self.mw, + current=current, + accept=tr.actions_choose(), + title=tr.qt_misc_choose_deck(), + help=HelpPage.EDITING, + cancel=True, + parent=self._widget, + geomKey="selectDeck", + callback=callback, + ) + def on_operation_did_execute( self, changes: OpChanges, handler: object | None ) -> None: diff --git a/qt/aqt/deckconf.py b/qt/aqt/deckconf.py index 5388c214e..690af763a 100644 --- a/qt/aqt/deckconf.py +++ b/qt/aqt/deckconf.py @@ -40,7 +40,6 @@ class DeckConf(QDialog): self.mw.checkpoint(tr.actions_options()) self.setupCombos() self.setupConfs() - self.setWindowModality(Qt.WindowModality.WindowModal) qconnect( self.form.buttonBox.helpRequested, lambda: openHelp(HelpPage.DECK_OPTIONS) ) @@ -58,8 +57,7 @@ class DeckConf(QDialog): # qt doesn't size properly with altered fonts otherwise restoreGeom(self, "deckconf", adjustSize=True) gui_hooks.deck_conf_will_show(self) - self.show() - self.exec() + self.open() saveGeom(self, "deckconf") def setupCombos(self) -> None: diff --git a/qt/aqt/main.py b/qt/aqt/main.py index 0d7e11a19..ed99c1d59 100644 --- a/qt/aqt/main.py +++ b/qt/aqt/main.py @@ -1439,14 +1439,18 @@ title="{}" {}>{}""".format( def onStudyDeck(self) -> None: from aqt.studydeck import StudyDeck - ret = StudyDeck(self, dyn=True, current=self.col.decks.current()["name"]) - if ret.name: - # fixme: this is silly, it should be returning an ID + def callback(ret: StudyDeck) -> None: + if not ret.name: + return deck_id = self.col.decks.id(ret.name) set_current_deck(parent=self, deck_id=deck_id).success( lambda out: self.moveToState("overview") ).run_in_background() + StudyDeck( + self, dyn=True, current=self.col.decks.current()["name"], callback=callback + ) + def onEmptyCards(self) -> None: show_empty_cards(self) diff --git a/qt/aqt/models.py b/qt/aqt/models.py index 5904acbda..d9a6b23d3 100644 --- a/qt/aqt/models.py +++ b/qt/aqt/models.py @@ -48,7 +48,7 @@ class Models(QDialog): parent = parent or mw self.fromMain = fromMain self.selected_notetype_id = selected_notetype_id - QDialog.__init__(self, parent, Qt.WindowType.Window) + QDialog.__init__(self, parent or mw) self.col = mw.col.weakref() assert self.col self.mm = self.col.models @@ -61,7 +61,7 @@ class Models(QDialog): self.models: Sequence[NotetypeNameIdUseCount] = [] self.setupModels() restoreGeom(self, "models") - self.exec() + self.show() # Models ########################################################################## diff --git a/qt/aqt/notetypechooser.py b/qt/aqt/notetypechooser.py index 90d0f3673..e8d614ac3 100644 --- a/qt/aqt/notetypechooser.py +++ b/qt/aqt/notetypechooser.py @@ -105,7 +105,14 @@ class NotetypeChooser(QHBoxLayout): def nameFunc() -> list[str]: return sorted(n.name for n in self.mw.col.models.all_names_and_ids()) - ret = StudyDeck( + def callback(ret: StudyDeck) -> None: + if not ret.name: + return + notetype = self.mw.col.models.by_name(ret.name) + if (id := notetype["id"]) != self._selected_notetype_id: + self.selected_notetype_id = id + + StudyDeck( self.mw, names=nameFunc, accept=tr.actions_choose(), @@ -116,13 +123,8 @@ class NotetypeChooser(QHBoxLayout): buttons=[edit], cancel=True, geomKey="selectModel", + callback=callback, ) - if not ret.name: - return - - notetype = self.mw.col.models.by_name(ret.name) - if (id := notetype["id"]) != self._selected_notetype_id: - self.selected_notetype_id = id @property def selected_notetype_id(self) -> NotetypeId: diff --git a/qt/aqt/studydeck.py b/qt/aqt/studydeck.py index 1a91785ab..4181f1407 100644 --- a/qt/aqt/studydeck.py +++ b/qt/aqt/studydeck.py @@ -81,7 +81,7 @@ class StudyDeck(QDialog): self.ok = self.form.buttonBox.addButton( accept or tr.decks_study(), QDialogButtonBox.ButtonRole.AcceptRole ) - self.setWindowModality(Qt.WindowModality.WindowModal) + self.setModal(True) qconnect(self.form.buttonBox.helpRequested, lambda: openHelp(help)) qconnect(self.form.filter.textEdited, self.redraw) qconnect(self.form.list.itemDoubleClicked, self.accept) @@ -90,7 +90,7 @@ class StudyDeck(QDialog): self.redraw("", current) self.callback = callback if callback: - self.open() + self.show() else: self.exec()