Commit 7059e31f authored by Marco Trevisan's avatar Marco Trevisan 🎺 Committed by Marco Trevisan

background: Group 'changed' signal emission

Background is monitoring the whole `org.gnome.desktop.background` gsettings keys
for changes connecting to the non-specialized 'changed' signal and re-emitting
this as-is.
This means that when the background is changed via control-center, we get
multiple 'changed' signal events from GSettings, and for each one of this we
recreate a Background and a BackgroundActor.

Avoid this by using an idle to delay the emission of the 'changed' signal
grouping the events.

!558
parent a9234f76
Pipeline #88295 passed with stages
in 3 minutes and 28 seconds
......@@ -257,9 +257,8 @@ var Background = class Background {
this._refreshAnimation();
});
this._settingsChangedSignalId = this._settings.connect('changed', () => {
this.emit('changed');
});
this._settingsChangedSignalId =
this._settings.connect('changed', this._emitChangedSignal.bind(this));
this._load();
}
......@@ -290,6 +289,22 @@ var Background = class Background {
if (this._settingsChangedSignalId != 0)
this._settings.disconnect(this._settingsChangedSignalId);
this._settingsChangedSignalId = 0;
if (this._changedIdleId) {
GLib.source_remove(this._changedIdleId);
this._changedIdleId = 0;
}
}
_emitChangedSignal() {
if (this._changedIdleId)
return;
this._changedIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
this._changedIdleId = 0;
this.emit('changed');
return GLib.SOURCE_REMOVE;
});
}
updateResolution() {
......@@ -345,7 +360,7 @@ var Background = class Background {
if (changedFile.equal(file)) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
this.emit('changed');
this._emitChangedSignal();
}
});
this._fileWatches[key] = signalId;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment