summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosselin Mouette <joss@debian.org>2014-12-12 21:57:11 +0100
committerMichael Biebl <biebl@debian.org>2015-09-07 06:51:42 +0200
commit8a4c86263362c0b2d2f87b21b8f783ccc5690bf8 (patch)
tree2507f9bab90050cde3778633a9faba56af41963b
parent785c90f4b85478b690de71c4448f640a27425c41 (diff)
downloadgnome-shell-8a4c86263362c0b2d2f87b21b8f783ccc5690bf8.tar.gz
background: fix a race condition when loading several animations
When loading several animations at the same time, the last call overrides the result for all of them. This commit caches all animations separately based on the source's schemas. https://bugzilla.gnome.org/show_bug.cgi?id=741453
-rw-r--r--js/ui/background.js12
1 files changed, 7 insertions, 5 deletions
diff --git a/js/ui/background.js b/js/ui/background.js
index a4634526c..e2f9a473b 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({
this._pendingFileLoads = [];
this._fileMonitors = {};
this._backgroundSources = {};
+ this._animations = {};
},
monitorFile: function(file) {
@@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({
getAnimation: function(params) {
params = Params.parse(params, { file: null,
+ settingsSchema: null,
onLoaded: null });
- if (_fileEqual0(this._animationFile, params.file)) {
+ if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) {
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
- params.onLoaded(this._animation);
+ params.onLoaded(this._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({
let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() {
- this._animationFile = params.file;
- this._animation = animation;
+ this._animations[params.settingsSchema] = animation;
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
- params.onLoaded(this._animation);
+ params.onLoaded(this._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -403,6 +404,7 @@ const Background = new Lang.Class({
_loadAnimation: function(file) {
this._cache.getAnimation({ file: file,
+ settingsSchema: this._settings.schema_id,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;