js: Use (dis)connectObject()
Start using the new methods to simplify signal cleanup. For now, focus on replacing existing cleanups; in most cases this means signals connected in the constructor and disconnected on destroy, but also other cases with a similarly defined lifetime (say: from show to hide). This doesn't change signal connections that only exist for a short time (say: once), handlers that are connected on-demand (say: the first time a particular method is called), or connections that aren't tracked (read: disconnected) at all. We will eventually replace the latter with connectObject() as well - especially from actor subclasses - but the changeset is already big enough as-is :-) Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1953>
This commit is contained in:

committed by
Marge Bot

parent
f45ccc9143
commit
26235bbe54
@ -40,8 +40,8 @@ class WorkspaceGroup extends Clutter.Actor {
|
||||
this._createWindows();
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
this._restackedId = global.display.connect('restacked',
|
||||
this._syncStacking.bind(this));
|
||||
global.display.connectObject('restacked',
|
||||
this._syncStacking.bind(this), this);
|
||||
}
|
||||
|
||||
get workspace() {
|
||||
@ -99,26 +99,23 @@ class WorkspaceGroup extends Clutter.Actor {
|
||||
|
||||
const record = { windowActor, clone };
|
||||
|
||||
record.windowDestroyId = windowActor.connect('destroy', () => {
|
||||
windowActor.connectObject('destroy', () => {
|
||||
clone.destroy();
|
||||
this._windowRecords.splice(this._windowRecords.indexOf(record), 1);
|
||||
});
|
||||
}, this);
|
||||
|
||||
this._windowRecords.push(record);
|
||||
}
|
||||
}
|
||||
|
||||
_removeWindows() {
|
||||
for (const record of this._windowRecords) {
|
||||
record.windowActor.disconnect(record.windowDestroyId);
|
||||
for (const record of this._windowRecords)
|
||||
record.clone.destroy();
|
||||
}
|
||||
|
||||
this._windowRecords = [];
|
||||
}
|
||||
|
||||
_onDestroy() {
|
||||
global.display.disconnect(this._restackedId);
|
||||
this._removeWindows();
|
||||
|
||||
if (this._workspace)
|
||||
|
Reference in New Issue
Block a user