59 lines
2.1 KiB
Diff
59 lines
2.1 KiB
Diff
From 952ad185cc54eea2e9915b8d93dded1ac0ddf8ac Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
Date: Sun, 23 Sep 2018 03:06:21 +0200
|
|
Subject: [PATCH] osdWindow: Disconnect signals on destroy
|
|
|
|
Since we started to show OSD windows on all monitors, OSD windows are
|
|
destroyed when the corresponding monitor is disconnected. We shouldn't
|
|
leave any signal handlers around in that case - they prevent the object
|
|
from being garbage collected, and trigger warnings for accessing proper-
|
|
ties of invalidated GObjects.
|
|
|
|
https://gitlab.gnome.org/GNOME/gnome-shell/issues/602
|
|
---
|
|
js/ui/osdWindow.js | 23 +++++++++++++++++++----
|
|
1 file changed, 19 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js
|
|
index a73912413..97e0498a7 100644
|
|
--- a/js/ui/osdWindow.js
|
|
+++ b/js/ui/osdWindow.js
|
|
@@ -108,15 +108,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;
|
|
},
|
|
--
|
|
2.20.1
|
|
|