diff --git a/proto/anki/frontend.proto b/proto/anki/frontend.proto index f7557cd23..021322383 100644 --- a/proto/anki/frontend.proto +++ b/proto/anki/frontend.proto @@ -42,6 +42,7 @@ service FrontendService { rpc ShowInMediaFolder(generic.String) returns (generic.Empty); rpc RecordAudio(generic.Empty) returns (generic.String); rpc CloseAddCards(generic.Bool) returns (generic.Empty); + rpc CloseEditCurrent(generic.Empty) returns (generic.Empty); // Profile config rpc GetProfileConfigJson(generic.String) returns (generic.Json); diff --git a/qt/aqt/addcards.py b/qt/aqt/addcards.py index 133bfb42b..3b0421b30 100644 --- a/qt/aqt/addcards.py +++ b/qt/aqt/addcards.py @@ -34,7 +34,7 @@ class AddCards(QMainWindow): def __init__(self, mw: AnkiQt) -> None: super().__init__(None, Qt.WindowType.Window) self._close_event_has_cleaned_up = False - self._close_callback: Callable[[], None] | None = None + self._close_callback: Callable[[], None] = self._close self.mw = mw self.col = mw.col form = aqt.forms.addcards.Ui_Dialog() diff --git a/qt/aqt/editcurrent.py b/qt/aqt/editcurrent.py index d8007c75c..4cd8dcb0c 100644 --- a/qt/aqt/editcurrent.py +++ b/qt/aqt/editcurrent.py @@ -32,13 +32,7 @@ class EditCurrent(QMainWindow): self.editor.card = self.mw.reviewer.card self.editor.set_note(self.mw.reviewer.card.note(), focusTo=0) restoreGeom(self, "editcurrent") - close_button = self.form.buttonBox.button(QDialogButtonBox.StandardButton.Close) - assert close_button is not None - close_button.setShortcut(QKeySequence("Ctrl+Return")) add_close_shortcut(self) - # qt5.14+ doesn't handle numpad enter on Windows - self.compat_add_shorcut = QShortcut(QKeySequence("Ctrl+Enter"), self) - qconnect(self.compat_add_shorcut.activated, close_button.click) gui_hooks.operation_did_execute.append(self.on_operation_did_execute) self.show() diff --git a/qt/aqt/forms/editcurrent.ui b/qt/aqt/forms/editcurrent.ui index 14ecd21fa..d2102e306 100644 --- a/qt/aqt/forms/editcurrent.ui +++ b/qt/aqt/forms/editcurrent.ui @@ -28,16 +28,6 @@ - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - @@ -60,22 +50,4 @@ - - - buttonBox - rejected() - Dialog - close() - - - 316 - 260 - - - 286 - 274 - - - - diff --git a/qt/aqt/mediasrv.py b/qt/aqt/mediasrv.py index 35ae517e0..1bc7cce8b 100644 --- a/qt/aqt/mediasrv.py +++ b/qt/aqt/mediasrv.py @@ -818,6 +818,18 @@ def close_add_cards() -> bytes: return b"" +def close_edit_current() -> bytes: + def handle_on_main() -> None: + from aqt.editcurrent import EditCurrent + + window = aqt.mw.app.activeWindow() + if isinstance(window, EditCurrent): + window.close() + + aqt.mw.taskman.run_on_main(lambda: QTimer.singleShot(0, handle_on_main)) + return b"" + + post_handler_list = [ congrats_info, get_deck_configs_for_update, @@ -850,6 +862,7 @@ post_handler_list = [ read_clipboard, write_clipboard, close_add_cards, + close_edit_current, ] @@ -1048,3 +1061,4 @@ def _extract_dynamic_get_request(path: str) -> DynamicRequest | None: return legacy_page_data else: return None + return None diff --git a/ts/routes/editor/ActionButtons.svelte b/ts/routes/editor/ActionButtons.svelte new file mode 100644 index 000000000..9dfa8cbe9 --- /dev/null +++ b/ts/routes/editor/ActionButtons.svelte @@ -0,0 +1,23 @@ + + + +
+ {#if mode === "add" || mode === "current"} + + {/if} +
+ + diff --git a/ts/routes/editor/CloseButton.svelte b/ts/routes/editor/CloseButton.svelte new file mode 100644 index 000000000..824f1adcf --- /dev/null +++ b/ts/routes/editor/CloseButton.svelte @@ -0,0 +1,32 @@ + + + + +
{tr.actionsClose()}
+
+ + + diff --git a/ts/routes/editor/NoteEditor.svelte b/ts/routes/editor/NoteEditor.svelte index 14ae874ca..0eb4de744 100644 --- a/ts/routes/editor/NoteEditor.svelte +++ b/ts/routes/editor/NoteEditor.svelte @@ -397,6 +397,19 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html await closeAddCardsBackend({ val: await shouldPromptBeforeClosing() }); } + async function closeEditCurrent() { + saveNow(); + await closeEditCurrentBackend({}); + } + + async function onClose() { + if (mode === "add") { + await closeAddCards(); + } else if (mode == "current") { + await closeEditCurrent(); + } + } + export function saveOnPageHide() { if (document.visibilityState === "hidden") { // will fire on session close and minimize @@ -588,6 +601,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html addMediaFromPath, updateEditorNotetype, closeAddCards as closeAddCardsBackend, + closeEditCurrent as closeEditCurrentBackend, } from "@generated/backend"; import { wrapInternal } from "@tslib/wrap"; import { getProfileConfig, getMeta, setMeta, getColConfig } from "@tslib/profile"; @@ -611,6 +625,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import { NoteFieldsCheckResponse_State, type Note } from "@generated/anki/notes_pb"; import { setupContextMenu } from "./context-menu.svelte"; import { registerShortcut } from "@tslib/shortcuts"; + import ActionButtons from "./ActionButtons.svelte"; $: isIOImageLoaded = false; $: ioImageLoadedStore.set(isIOImageLoaded); @@ -1221,6 +1236,7 @@ components and functionality for general note editing. + {/if}