From 773e28aa3c23c1cb93d5b19b10c49fcec19487a9 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Sun, 23 Aug 2020 15:18:41 -0400 Subject: Fix screenshot popup hide (#753) * Refactor Popup.setVisibleOverride * Use event to observe visibility changes * Add setAllVisibleOverride/clearAllVisibleOverride * Add setAllVisibleOverride/clearAllVisibleOverride cross frame handlers * Update how visibility is changed * Wait for next frame to ensure visibility has been updated --- ext/mixed/js/display.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'ext/mixed') diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index c3498e85..6e41a190 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -1145,9 +1145,12 @@ class Display extends EventDispatcher { } async _getScreenshot() { + const ownerFrameId = this._ownerFrameId; + let token = null; try { - await this._setPopupVisibleOverride(false); - await promiseTimeout(1); // Wait for popup to be hidden. + if (ownerFrameId !== null) { + token = await api.crossFrame.invoke(ownerFrameId, 'setAllVisibleOverride', {value: false, priority: 0, awaitFrame: true}); + } const {format, quality} = this._options.anki.screenshot; const dataUrl = await api.screenshotGet({format, quality}); @@ -1155,7 +1158,9 @@ class Display extends EventDispatcher { return {dataUrl, format}; } finally { - await this._setPopupVisibleOverride(null); + if (token !== null) { + await api.crossFrame.invoke(ownerFrameId, 'clearAllVisibleOverride', {token}); + } } } @@ -1163,10 +1168,6 @@ class Display extends EventDispatcher { return this._options.general.resultOutputMode === 'merge' ? 0 : -1; } - _setPopupVisibleOverride(visible) { - return api.broadcastTab('popupSetVisibleOverride', {visible}); - } - _getEntry(index) { const entries = this._container.querySelectorAll('.entry'); return index >= 0 && index < entries.length ? entries[index] : null; -- cgit v1.2.3