diff --git a/qt/aqt/gui_hooks.py b/qt/aqt/gui_hooks.py index bd2fb71ea..6e0c957dc 100644 --- a/qt/aqt/gui_hooks.py +++ b/qt/aqt/gui_hooks.py @@ -1041,6 +1041,38 @@ class _StyleDidInitFilter: style_did_init = _StyleDidInitFilter() +class _TopToolbarDidInitLinksHook: + _hooks: List[ + Callable[[List[Tuple[str, str, str]], "aqt.toolbar.Toolbar"], None] + ] = [] + + def append( + self, cb: Callable[[List[Tuple[str, str, str]], "aqt.toolbar.Toolbar"], None] + ) -> None: + """(links: List[Tuple[str, str, str]], top_toolbar: aqt.toolbar.Toolbar)""" + self._hooks.append(cb) + + def remove( + self, cb: Callable[[List[Tuple[str, str, str]], "aqt.toolbar.Toolbar"], None] + ) -> None: + if cb in self._hooks: + self._hooks.remove(cb) + + def __call__( + self, links: List[Tuple[str, str, str]], top_toolbar: aqt.toolbar.Toolbar + ) -> None: + for hook in self._hooks: + try: + hook(links, top_toolbar) + except: + # if the hook fails, remove it + self._hooks.remove(hook) + raise + + +top_toolbar_did_init_links = _TopToolbarDidInitLinksHook() + + class _UndoStateDidChangeHook: _hooks: List[Callable[[bool], None]] = [] diff --git a/qt/aqt/toolbar.py b/qt/aqt/toolbar.py index 4d3b6b9ae..8f762e835 100644 --- a/qt/aqt/toolbar.py +++ b/qt/aqt/toolbar.py @@ -6,6 +6,7 @@ from __future__ import annotations import aqt from anki.lang import _ +from aqt import gui_hooks from aqt.qt import * from aqt.webview import AnkiWebView @@ -47,12 +48,13 @@ class Toolbar: def _centerLinks(self): links = [ - ["decks", _("Decks"), _("Shortcut key: %s") % "D"], - ["add", _("Add"), _("Shortcut key: %s") % "A"], - ["browse", _("Browse"), _("Shortcut key: %s") % "B"], - ["stats", _("Stats"), _("Shortcut key: %s") % "T"], - ["sync", _("Sync"), _("Shortcut key: %s") % "Y"], + ("decks", _("Decks"), _("Shortcut key: %s") % "D"), + ("add", _("Add"), _("Shortcut key: %s") % "A"), + ("browse", _("Browse"), _("Shortcut key: %s") % "B"), + ("stats", _("Stats"), _("Shortcut key: %s") % "T"), + ("sync", _("Sync"), _("Shortcut key: %s") % "Y"), ] + gui_hooks.top_toolbar_did_init_links(links, self) return self._linkHTML(links) def _linkHTML(self, links): diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index 56268f914..fcbdabadc 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -187,6 +187,10 @@ hooks = [ return_type="str", legacy_hook="setupStyle", ), + Hook( + name="top_toolbar_did_init_links", + args=["links: List[Tuple[str, str, str]]", "top_toolbar: aqt.toolbar.Toolbar",], + ), # Adding cards ################### Hook(