diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js index fb6587be0..d7077a063 100644 --- a/js/ui/osdWindow.js +++ b/js/ui/osdWindow.js @@ -118,15 +118,30 @@ var OsdWindow = new Lang.Class({ this._hideTimeoutId = 0; this._reset(); - Main.layoutManager.connect('monitors-changed', - this._relayout.bind(this)); + this.actor.connect('destroy', this._onDestroy.bind(this)); + + this._monitorsChangedId = + Main.layoutManager.connect('monitors-changed', + this._relayout.bind(this)); let themeContext = St.ThemeContext.get_for_stage(global.stage); - themeContext.connect('notify::scale-factor', - this._relayout.bind(this)); + this._scaleChangedId = + themeContext.connect('notify::scale-factor', + this._relayout.bind(this)); this._relayout(); Main.uiGroup.add_child(this.actor); }, + _onDestroy() { + if (this._monitorsChangedId) + Main.layoutManager.disconnect(this._monitorsChangedId); + this._monitorsChangedId = 0; + + let themeContext = St.ThemeContext.get_for_stage(global.stage); + if (this._scaleChangedId) + themeContext.disconnect(this._scaleChangedId); + this._scaleChangedId = 0; + }, + setIcon(icon) { this._icon.gicon = icon; },