diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-08-23 15:18:41 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-23 15:18:41 -0400 |
commit | 773e28aa3c23c1cb93d5b19b10c49fcec19487a9 (patch) | |
tree | fcf3c775c3f97d1852848253149a47b55fa0a753 /ext/fg/js/popup.js | |
parent | 934355dd09aa8b7e8993759b678af063b56b9fc6 (diff) |
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
Diffstat (limited to 'ext/fg/js/popup.js')
-rw-r--r-- | ext/fg/js/popup.js | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/ext/fg/js/popup.js b/ext/fg/js/popup.js index bbf39c4e..f644ee98 100644 --- a/ext/fg/js/popup.js +++ b/ext/fg/js/popup.js @@ -34,8 +34,7 @@ class Popup extends EventDispatcher { this._childrenSupported = true; this._injectPromise = null; this._injectPromiseComplete = false; - this._visible = false; - this._visibleOverride = null; + this._visible = new DynamicProperty(false); this._options = null; this._optionsContext = null; this._contentScale = 1.0; @@ -96,11 +95,12 @@ class Popup extends EventDispatcher { // Public functions prepare() { - this._updateVisibility(); this._frame.addEventListener('mousedown', (e) => e.stopPropagation()); this._frame.addEventListener('scroll', (e) => e.stopPropagation()); this._frame.addEventListener('load', this._onFrameLoad.bind(this)); + this._visible.on('change', this._onVisibleChange.bind(this)); yomichan.on('extensionUnloaded', this._onExtensionUnloaded.bind(this)); + this._onVisibleChange({value: this.isVisibleSync()}); } async setOptionsContext(optionsContext, source) { @@ -131,9 +131,12 @@ class Popup extends EventDispatcher { return this.isVisibleSync(); } - setVisibleOverride(visible) { - this._visibleOverride = visible; - this._updateVisibility(); + async setVisibleOverride(value, priority) { + return this._visible.setOverride(value, priority); + } + + async clearVisibleOverride(token) { + return this._visible.clearOverride(token); } async containsPoint(x, y) { @@ -177,7 +180,7 @@ class Popup extends EventDispatcher { } isVisibleSync() { - return (this._visibleOverride !== null ? this._visibleOverride : this._visible); + return this._visible.value; } updateTheme() { @@ -392,12 +395,11 @@ class Popup extends EventDispatcher { } _setVisible(visible) { - this._visible = visible; - this._updateVisibility(); + this._visible.defaultValue = visible; } - _updateVisibility() { - this._frame.style.setProperty('visibility', this.isVisibleSync() ? 'visible' : 'hidden', 'important'); + _onVisibleChange({value}) { + this._frame.style.setProperty('visibility', value ? 'visible' : 'hidden', 'important'); } _focusParent() { |