diff options
author | Josselin Mouette <joss@debian.org> | 2014-12-12 21:57:11 +0100 |
---|---|---|
committer | Michael Biebl <biebl@debian.org> | 2015-09-07 06:51:42 +0200 |
commit | 8a4c86263362c0b2d2f87b21b8f783ccc5690bf8 (patch) | |
tree | 2507f9bab90050cde3778633a9faba56af41963b | |
parent | 785c90f4b85478b690de71c4448f640a27425c41 (diff) | |
download | gnome-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.js | 12 |
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; |