From 1c8057a783bac524ab35c0f2b9f6887dacb0bc8a Mon Sep 17 00:00:00 2001 From: rpm-build Date: Sep 25 2020 17:45:22 +0000 Subject: fix-invalid-access-warnings.patch patch_name: fix-invalid-access-warnings.patch present_in_specfile: true location_in_specfile: 30 --- diff --git a/js/ui/tweener.js b/js/ui/tweener.js index bb9ea55..c04cede 100644 --- a/js/ui/tweener.js +++ b/js/ui/tweener.js @@ -63,30 +63,67 @@ function _getTweenState(target) { return target.__ShellTweenerState; } +function _ensureHandlers(target) { + if (!target.__ShellTweenerHandlers) + target.__ShellTweenerHandlers = {}; + return target.__ShellTweenerHandlers; +} + function _resetTweenState(target) { let state = target.__ShellTweenerState; if (state) { - if (state.destroyedId) + if (state.destroyedId) { state.actor.disconnect(state.destroyedId); + delete state.destroyedId; + } } + _removeHandler(target, 'onComplete', _tweenCompleted); target.__ShellTweenerState = {}; } function _addHandler(target, params, name, handler) { - if (params[name]) { - let oldHandler = params[name]; - let oldScope = params[name + 'Scope']; - let oldParams = params[name + 'Params']; - let eventScope = oldScope ? oldScope : target; - - params[name] = () => { - oldHandler.apply(eventScope, oldParams); - handler(target); - }; - } else - params[name] = () => { handler(target); }; + let wrapperNeeded = false; + let tweenerHandlers = _ensureHandlers(target); + + if (!(name in tweenerHandlers)) { + tweenerHandlers[name] = []; + wrapperNeeded = true; + } + + let handlers = tweenerHandlers[name]; + handlers.push(handler); + + if (wrapperNeeded) { + if (params[name]) { + let oldHandler = params[name]; + let oldScope = params[name + 'Scope']; + let oldParams = params[name + 'Params']; + let eventScope = oldScope ? oldScope : target; + + params[name] = () => { + oldHandler.apply(eventScope, oldParams); + handlers.forEach((h) => h(target)); + }; + } else { + params[name] = () => { handlers.forEach((h) => h(target)); }; + } + } +} + +function _removeHandler(target, name, handler) { + let tweenerHandlers = _ensureHandlers(target); + + if (name in tweenerHandlers) { + let handlers = tweenerHandlers[name]; + let handlerIndex = handlers.indexOf(handler); + + while (handlerIndex > -1) { + handlers.splice(handlerIndex, 1); + handlerIndex = handlers.indexOf(handler); + } + } } function _actorDestroyed(target) { diff --git a/js/ui/windowAttentionHandler.js b/js/ui/windowAttentionHandler.js index abdb8a4..a9a7111 100644 --- a/js/ui/windowAttentionHandler.js +++ b/js/ui/windowAttentionHandler.js @@ -69,8 +69,6 @@ var Source = class WindowAttentionSource extends MessageTray.Source { () => { this.destroy(); })); this.signalIDs.push(this._window.connect('unmanaged', () => { this.destroy(); })); - - this.connect('destroy', this._onDestroy.bind(this)); } _sync() { @@ -79,13 +77,6 @@ var Source = class WindowAttentionSource extends MessageTray.Source { this.destroy(); } - _onDestroy() { - for(let i = 0; i < this.signalIDs.length; i++) { - this._window.disconnect(this.signalIDs[i]); - } - this.signalIDs = []; - } - _createPolicy() { if (this._app && this._app.get_app_info()) { let id = this._app.get_id().replace(/\.desktop$/,''); @@ -99,6 +90,14 @@ var Source = class WindowAttentionSource extends MessageTray.Source { return this._app.create_icon_texture(size); } + destroy(params) { + for (let i = 0; i < this.signalIDs.length; i++) + this._window.disconnect(this.signalIDs[i]); + this.signalIDs = []; + + super.destroy(params); + } + open() { Main.activateWindow(this._window); }