From 4bb49d404e1a97a1df02e6e62eeca9e18e48d9f0 Mon Sep 17 00:00:00 2001 From: Arthur Milchior Date: Fri, 27 Mar 2020 23:06:22 +0100 Subject: [PATCH] hook browser_header_will_show_context_menu --- qt/aqt/browser.py | 1 + qt/aqt/gui_hooks.py | 24 ++++++++++++++++++++++++ qt/tools/genhooks_gui.py | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index bb587a78a..1e7ed424c 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -970,6 +970,7 @@ QTableView {{ gridline-color: {grid} }} a.setCheckable(True) a.setChecked(type in self.model.activeCols) a.toggled.connect(lambda b, t=type: self.toggleField(t)) + gui_hooks.browser_header_will_show_context_menu(self, m) m.exec_(gpos) def toggleField(self, type): diff --git a/qt/aqt/gui_hooks.py b/qt/aqt/gui_hooks.py index aecaaec3c..93d15b445 100644 --- a/qt/aqt/gui_hooks.py +++ b/qt/aqt/gui_hooks.py @@ -385,6 +385,30 @@ class _BrowserDidSearchHook: browser_did_search = _BrowserDidSearchHook() +class _BrowserHeaderWillShowContextMenuHook: + _hooks: List[Callable[["aqt.browser.Browser", QMenu], None]] = [] + + def append(self, cb: Callable[["aqt.browser.Browser", QMenu], None]) -> None: + """(browser: aqt.browser.Browser, menu: QMenu)""" + self._hooks.append(cb) + + def remove(self, cb: Callable[["aqt.browser.Browser", QMenu], None]) -> None: + if cb in self._hooks: + self._hooks.remove(cb) + + def __call__(self, browser: aqt.browser.Browser, menu: QMenu) -> None: + for hook in self._hooks: + try: + hook(browser, menu) + except: + # if the hook fails, remove it + self._hooks.remove(hook) + raise + + +browser_header_will_show_context_menu = _BrowserHeaderWillShowContextMenuHook() + + class _BrowserMenusDidInitHook: _hooks: List[Callable[["aqt.browser.Browser"], None]] = [] diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index a8887e10b..c2f0a0702 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -185,6 +185,10 @@ hooks = [ args=["browser: aqt.browser.Browser", "menu: QMenu"], legacy_hook="browser.onContextMenu", ), + Hook( + name="browser_header_will_show_context_menu", + args=["browser: aqt.browser.Browser", "menu: QMenu"], + ), Hook( name="browser_did_change_row", args=["browser: aqt.browser.Browser"],