Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
gnome-shell.1083
gnome-shell-background-image-change.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-shell-background-image-change.patch of Package gnome-shell.1083
diff -Npur gnome-shell-3.10.4/js/ui/background.js gnome-shell-3.10.4-new/js/ui/background.js --- gnome-shell-3.10.4/js/ui/background.js 2014-07-22 02:50:59.681192579 +0800 +++ gnome-shell-3.10.4-new/js/ui/background.js 2014-07-23 06:56:16.767305520 +0800 @@ -40,6 +40,7 @@ const BackgroundCache = new Lang.Class({ this._images = []; this._pendingFileLoads = []; this._fileMonitors = {}; + this._animations = []; }, getPatternContent: function(params) { @@ -131,6 +132,25 @@ const BackgroundCache = new Lang.Class({ this._removeContent(this._images, content); }, + _attachCallerToFileLoad: function(caller, fileLoad) { + fileLoad.callers.push(caller); + + if (!caller.cancellable) + return; + + caller.cancellable.connect(Lang.bind(this, function() { + let idx = fileLoad.callers.indexOf(caller); + fileLoad.callers.splice(idx, 1); + + if (fileLoad.callers.length == 0) { + fileLoad.cancellable.cancel(); + + let idx = this._pendingFileLoads.indexOf(fileLoad); + this._pendingFileLoads.splice(idx, 1); + } + })); + }, + _loadImageContent: function(params) { params = Params.parse(params, { monitorIndex: 0, style: null, @@ -139,27 +159,27 @@ const BackgroundCache = new Lang.Class({ cancellable: null, onFinished: null }); + let caller = { monitorIndex: params.monitorIndex, + effects: params.effects, + cancellable: params.cancellable, + onFinished: params.onFinished }; + for (let i = 0; i < this._pendingFileLoads.length; i++) { - if (this._pendingFileLoads[i].filename == params.filename && - this._pendingFileLoads[i].style == params.style) { - this._pendingFileLoads[i].callers.push({ shouldCopy: true, - monitorIndex: params.monitorIndex, - effects: params.effects, - onFinished: params.onFinished }); + let fileLoad = this._pendingFileLoads[i]; + + if (fileLoad.filename == params.filename && + fileLoad.style == params.style) { + this._attachCallerToFileLoad(caller, fileLoad); return; } } + let fileLoad = { filename: params.filename, + style: params.style, + cancellable: new Gio.Cancellable(), + callers: [] }; + this._attachCallerToFileLoad(caller, fileLoad); - this._pendingFileLoads.push({ filename: params.filename, - style: params.style, - callers: [{ shouldCopy: false, - monitorIndex: params.monitorIndex, - effects: params.effects, - onFinished: params.onFinished }] }); - - let content = new Meta.Background({ meta_screen: global.screen, - monitor: params.monitorIndex, - effects: params.effects }); + let content = new Meta.Background({ meta_screen: global.screen }); content.load_file_async(params.filename, params.style, @@ -170,35 +190,26 @@ const BackgroundCache = new Lang.Class({ content.load_file_finish(result); this._monitorFile(params.filename); - this._images.push(content); } catch(e) { content = null; } - for (let i = 0; i < this._pendingFileLoads.length; i++) { - let pendingLoad = this._pendingFileLoads[i]; - if (pendingLoad.filename != params.filename || - pendingLoad.style != params.style) - continue; - - for (let j = 0; j < pendingLoad.callers.length; j++) { - if (pendingLoad.callers[j].onFinished) { - let newContent; - - if (content && pendingLoad.callers[j].shouldCopy) { - newContent = content.copy(pendingLoad.callers[j].monitorIndex, - pendingLoad.callers[j].effects); - this._images.push(newContent); - } else { - newContent = content; - } - - pendingLoad.callers[j].onFinished(newContent); + for (let i = 0; i < fileLoad.callers.length; i++) { + let caller = fileLoad.callers[i]; + if (caller.onFinished) { + let newContent; + + if (content) { + newContent = content.copy(caller.monitorIndex, caller.effects); + this._images.push(newContent); } - } - this._pendingFileLoads.splice(i, 1); + caller.onFinished(newContent); + } } + + let idx = this._pendingFileLoads.indexOf(fileLoad); + this._pendingFileLoads.splice(idx, 1); })); }, @@ -257,25 +268,34 @@ const BackgroundCache = new Lang.Class({ params = Params.parse(params, { filename: null, onLoaded: null }); - if (this._animationFilename == params.filename) { - if (params.onLoaded) { - GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { - params.onLoaded(this._animation); - })); + let i; + let animation = null; + for (i = 0; i < this._animations.length; i++) { + if (this._animations[i].filename == params.filename) { + animation = this._animations[i]; + if (params.onLoaded) { + let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { + params.onLoaded(this._animation); + return GLib.SOURCE_REMOVE; + })); + GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); + } } } - let animation = new Animation({ filename: params.filename }); - + if (animation == null) { + animation = new Animation({ filename: params.filename }); + this._animations.push(animation); + } animation.load(Lang.bind(this, function() { this._monitorFile(params.filename); - this._animationFilename = params.filename; - this._animation = animation; if (params.onLoaded) { - GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { - params.onLoaded(this._animation); + let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() { + params.onLoaded(animation); + return GLib.SOURCE_REMOVE; })); + GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded'); } })); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor