update to final revision of background bug fix from upstream (BGO #722149)
This commit is contained in:
parent
2e63a4b65a
commit
efa69b10e9
@ -0,0 +1,72 @@
|
|||||||
|
From ec6facb9e76c916b3faa78af568424694c8da133 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2014 14:35:38 -0500
|
||||||
|
Subject: [PATCH 1/4] background: always copy background content when loading
|
||||||
|
into cache
|
||||||
|
|
||||||
|
Copying is actually a lightweight operation, so trying to avoid it just adds
|
||||||
|
code complexity for little gain.
|
||||||
|
|
||||||
|
Based on work from Jasper St. Pierre <jstpierre@macheye.net>
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
||||||
|
---
|
||||||
|
js/ui/background.js | 15 ++++-----------
|
||||||
|
1 file changed, 4 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/background.js b/js/ui/background.js
|
||||||
|
index 3a7541c..3fe279d 100644
|
||||||
|
--- a/js/ui/background.js
|
||||||
|
+++ b/js/ui/background.js
|
||||||
|
@@ -143,8 +143,7 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
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,
|
||||||
|
+ this._pendingFileLoads[i].callers.push({ monitorIndex: params.monitorIndex,
|
||||||
|
effects: params.effects,
|
||||||
|
onFinished: params.onFinished });
|
||||||
|
return;
|
||||||
|
@@ -153,14 +152,11 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
|
||||||
|
this._pendingFileLoads.push({ filename: params.filename,
|
||||||
|
style: params.style,
|
||||||
|
- callers: [{ shouldCopy: false,
|
||||||
|
- monitorIndex: params.monitorIndex,
|
||||||
|
+ callers: [{ 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,
|
||||||
|
@@ -171,7 +167,6 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
content.load_file_finish(result);
|
||||||
|
|
||||||
|
this._monitorFile(params.filename);
|
||||||
|
- this._images.push(content);
|
||||||
|
} catch(e) {
|
||||||
|
content = null;
|
||||||
|
}
|
||||||
|
@@ -186,12 +181,10 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
if (pendingLoad.callers[j].onFinished) {
|
||||||
|
let newContent;
|
||||||
|
|
||||||
|
- if (content && pendingLoad.callers[j].shouldCopy) {
|
||||||
|
+ if (content) {
|
||||||
|
newContent = content.copy(pendingLoad.callers[j].monitorIndex,
|
||||||
|
pendingLoad.callers[j].effects);
|
||||||
|
this._images.push(newContent);
|
||||||
|
- } else {
|
||||||
|
- newContent = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
pendingLoad.callers[j].onFinished(newContent);
|
||||||
|
--
|
||||||
|
1.9.0
|
||||||
|
|
70
0002-background-refactor-file-loading.patch
Normal file
70
0002-background-refactor-file-loading.patch
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
From e917b7ce0f1dca31683534e1980477b0b88da0de Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2014 15:13:21 -0500
|
||||||
|
Subject: [PATCH 2/4] background: refactor file loading
|
||||||
|
|
||||||
|
This commit moves the code around a bit such that the
|
||||||
|
caller gets allocated up front and then a file load is either
|
||||||
|
found or created to attach the caller to.
|
||||||
|
|
||||||
|
Functionally, the code is the same, it's just now factored in a way
|
||||||
|
that will make it easier to fix a bug with cancellation later.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
||||||
|
---
|
||||||
|
js/ui/background.js | 27 +++++++++++++++++----------
|
||||||
|
1 file changed, 17 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/background.js b/js/ui/background.js
|
||||||
|
index 3fe279d..396309a 100644
|
||||||
|
--- a/js/ui/background.js
|
||||||
|
+++ b/js/ui/background.js
|
||||||
|
@@ -132,6 +132,10 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
this._removeContent(this._images, content);
|
||||||
|
},
|
||||||
|
|
||||||
|
+ _attachCallerToFileLoad: function(caller, fileLoad) {
|
||||||
|
+ fileLoad.callers.push(caller);
|
||||||
|
+ },
|
||||||
|
+
|
||||||
|
_loadImageContent: function(params) {
|
||||||
|
params = Params.parse(params, { monitorIndex: 0,
|
||||||
|
style: null,
|
||||||
|
@@ -140,21 +144,24 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
cancellable: null,
|
||||||
|
onFinished: null });
|
||||||
|
|
||||||
|
+ let caller = { monitorIndex: params.monitorIndex,
|
||||||
|
+ effects: params.effects,
|
||||||
|
+ 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({ 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- this._pendingFileLoads.push({ filename: params.filename,
|
||||||
|
- style: params.style,
|
||||||
|
- callers: [{ monitorIndex: params.monitorIndex,
|
||||||
|
- effects: params.effects,
|
||||||
|
- onFinished: params.onFinished }] });
|
||||||
|
+ let fileLoad = { filename: params.filename,
|
||||||
|
+ style: params.style,
|
||||||
|
+ callers: [] };
|
||||||
|
+ this._attachCallerToFileLoad(caller, fileLoad);
|
||||||
|
|
||||||
|
let content = new Meta.Background({ meta_screen: global.screen });
|
||||||
|
|
||||||
|
--
|
||||||
|
1.9.0
|
||||||
|
|
@ -0,0 +1,67 @@
|
|||||||
|
From fdf264ff64cd0e67fc5310f6720ea4586b72890d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2014 16:09:26 -0500
|
||||||
|
Subject: [PATCH 3/4] background: get rid of nested loop when finishing file
|
||||||
|
loading
|
||||||
|
|
||||||
|
At the moment when a file is loaded, we iterate through the list of
|
||||||
|
pending file loads and ignore any unrelated to the file, then iterate
|
||||||
|
all the callers of the related file loads and finish them.
|
||||||
|
|
||||||
|
In fact, there can only ever be one pending file load related to the
|
||||||
|
file, and we already know it, so we can avoid the ugly nested loops.
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
||||||
|
---
|
||||||
|
js/ui/background.js | 32 +++++++++++++-------------------
|
||||||
|
1 file changed, 13 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/js/ui/background.js b/js/ui/background.js
|
||||||
|
index 396309a..506fe59 100644
|
||||||
|
--- a/js/ui/background.js
|
||||||
|
+++ b/js/ui/background.js
|
||||||
|
@@ -178,28 +178,22 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
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) {
|
||||||
|
- newContent = content.copy(pendingLoad.callers[j].monitorIndex,
|
||||||
|
- pendingLoad.callers[j].effects);
|
||||||
|
- this._images.push(newContent);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- 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);
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
--
|
||||||
|
1.9.0
|
||||||
|
|
73
0004-background-fix-cancellable-issue.patch
Normal file
73
0004-background-fix-cancellable-issue.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
From 55d1c7e2ab9fb675f8f5a6e4c03ff17093a01cff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Wed, 26 Feb 2014 15:45:14 -0500
|
||||||
|
Subject: [PATCH 4/4] background: fix cancellable issue
|
||||||
|
|
||||||
|
If we have the following sequence:
|
||||||
|
|
||||||
|
cache.getImageContent({ filename: "foo", cancellable: cancellable1 });
|
||||||
|
cache.getImageContent({ filename: "foo", cancellable: cancellable2 });
|
||||||
|
cancellable1.cancel();
|
||||||
|
|
||||||
|
Then the second load will complete with "null" as its content, even though
|
||||||
|
it was never cancelled, and we'll see a blank image. Meanwhile, since the
|
||||||
|
second load simply appends to the list of callers for the second load,
|
||||||
|
cancellable2 does absolutely nothing: cancelling it won't stop the load,
|
||||||
|
and it will still receive onFinished handling.
|
||||||
|
|
||||||
|
To prevent this from happening, give the actual load operation its own
|
||||||
|
Gio.Cancellable, which is "ref-counted" -- only cancel it when all the other
|
||||||
|
possible callers cancel.
|
||||||
|
|
||||||
|
Based on work from Jasper St. Pierre <jstpierre@macheye.net>
|
||||||
|
|
||||||
|
https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
||||||
|
---
|
||||||
|
js/ui/background.js | 17 +++++++++++++++++
|
||||||
|
1 file changed, 17 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/js/ui/background.js b/js/ui/background.js
|
||||||
|
index 506fe59..b1eb57a 100644
|
||||||
|
--- a/js/ui/background.js
|
||||||
|
+++ b/js/ui/background.js
|
||||||
|
@@ -134,6 +134,21 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
|
||||||
|
_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) {
|
||||||
|
@@ -146,6 +161,7 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
|
||||||
|
let caller = { monitorIndex: params.monitorIndex,
|
||||||
|
effects: params.effects,
|
||||||
|
+ cancellable: params.cancellable,
|
||||||
|
onFinished: params.onFinished };
|
||||||
|
|
||||||
|
for (let i = 0; i < this._pendingFileLoads.length; i++) {
|
||||||
|
@@ -160,6 +176,7 @@ const BackgroundCache = new Lang.Class({
|
||||||
|
|
||||||
|
let fileLoad = { filename: params.filename,
|
||||||
|
style: params.style,
|
||||||
|
+ cancellable: new Gio.Cancellable(),
|
||||||
|
callers: [] };
|
||||||
|
this._attachCallerToFileLoad(caller, fileLoad);
|
||||||
|
|
||||||
|
--
|
||||||
|
1.9.0
|
||||||
|
|
@ -1,183 +0,0 @@
|
|||||||
From b5d7bd02b514b9862203ff30435b6c98766143ef Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
|
|
||||||
Date: Mon, 13 Jan 2014 18:42:32 -0500
|
|
||||||
Subject: [PATCH] background: Fix cancellable issues
|
|
||||||
|
|
||||||
If we have the following sequence:
|
|
||||||
|
|
||||||
cache.getImageContent({ filename: "foo", cancellable: cancellable1 });
|
|
||||||
cache.getImageContent({ filename: "foo", cancellable: cancellable2 });
|
|
||||||
cancellable1.cancel();
|
|
||||||
|
|
||||||
Then the second load will complete with "null" as its content, even though
|
|
||||||
it was never cancelled, and we'll see a blank image. Meanwhile, since the
|
|
||||||
second load simply appends to the list of callers for the second load,
|
|
||||||
cancellable2 does absolutely nothing: cancelling it won't stop the load,
|
|
||||||
and it will still receive onFinished handling.
|
|
||||||
|
|
||||||
To prevent this from happening, give the actual load operation its own
|
|
||||||
Gio.Cancellable, which is "ref-counted" -- only cancel it when all the other
|
|
||||||
possible callers cancel.
|
|
||||||
|
|
||||||
Additionally, clean up the large nested loops by splitting out duplicated
|
|
||||||
code and other stuff.
|
|
||||||
|
|
||||||
https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
|
||||||
---
|
|
||||||
js/ui/background.js | 120 ++++++++++++++++++++++++++++------------------------
|
|
||||||
1 file changed, 65 insertions(+), 55 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/js/ui/background.js b/js/ui/background.js
|
|
||||||
index 3a7541c..a3224f5 100644
|
|
||||||
--- a/js/ui/background.js
|
|
||||||
+++ b/js/ui/background.js
|
|
||||||
@@ -132,6 +132,46 @@ const BackgroundCache = new Lang.Class({
|
|
||||||
this._removeContent(this._images, content);
|
|
||||||
},
|
|
||||||
|
|
||||||
+ _loadImageContentInternal: function(filename, style) {
|
|
||||||
+ let cancellable = new Gio.Cancellable();
|
|
||||||
+ let content = new Meta.Background({ meta_screen: global.screen });
|
|
||||||
+
|
|
||||||
+ let info = { filename: filename,
|
|
||||||
+ style: style,
|
|
||||||
+ cancellable: cancellable,
|
|
||||||
+ callers: [] };
|
|
||||||
+
|
|
||||||
+ content.load_file_async(filename, style, cancellable, Lang.bind(this, function(object, result) {
|
|
||||||
+ if (cancellable.is_cancelled())
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ try {
|
|
||||||
+ content.load_file_finish(result);
|
|
||||||
+ } catch(e) {
|
|
||||||
+ content = null;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (content) {
|
|
||||||
+ this._monitorFile(filename);
|
|
||||||
+ info.callers.forEach(Lang.bind(this, function(caller) {
|
|
||||||
+ let newContent = content.copy(caller.monitorIndex, caller.effects);
|
|
||||||
+ this._images.push(newContent);
|
|
||||||
+ caller.onFinished(newContent);
|
|
||||||
+ }));
|
|
||||||
+ } else {
|
|
||||||
+ info.callers.forEach(Lang.bind(this, function(caller) {
|
|
||||||
+ caller.onFinished(null);
|
|
||||||
+ }));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ let idx = this._pendingFileLoads.indexOf(info);
|
|
||||||
+ this._pendingFileLoads.splice(idx, 1);
|
|
||||||
+ }));
|
|
||||||
+
|
|
||||||
+ this._pendingFileLoads.push(info);
|
|
||||||
+ return info;
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
_loadImageContent: function(params) {
|
|
||||||
params = Params.parse(params, { monitorIndex: 0,
|
|
||||||
style: null,
|
|
||||||
@@ -140,67 +180,38 @@ const BackgroundCache = new Lang.Class({
|
|
||||||
cancellable: null,
|
|
||||||
onFinished: null });
|
|
||||||
|
|
||||||
+ let caller = { monitorIndex: params.monitorIndex,
|
|
||||||
+ effects: params.effects,
|
|
||||||
+ cancellable: params.cancellable,
|
|
||||||
+ onFinished: params.onFinished };
|
|
||||||
+
|
|
||||||
+ let info = null;
|
|
||||||
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 });
|
|
||||||
- return;
|
|
||||||
+ let pendingLoad = this._pendingFileLoads[i];
|
|
||||||
+ if (pendingLoad.filename == params.filename && pendingLoad.style == params.style) {
|
|
||||||
+ info = pendingLoad;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- this._pendingFileLoads.push({ filename: params.filename,
|
|
||||||
- style: params.style,
|
|
||||||
- callers: [{ shouldCopy: false,
|
|
||||||
- monitorIndex: params.monitorIndex,
|
|
||||||
- effects: params.effects,
|
|
||||||
- onFinished: params.onFinished }] });
|
|
||||||
+ if (!info)
|
|
||||||
+ info = this._loadImageContentInternal(params.filename, params.style);
|
|
||||||
|
|
||||||
- let content = new Meta.Background({ meta_screen: global.screen,
|
|
||||||
- monitor: params.monitorIndex,
|
|
||||||
- effects: params.effects });
|
|
||||||
+ info.callers.push(caller);
|
|
||||||
|
|
||||||
- content.load_file_async(params.filename,
|
|
||||||
- params.style,
|
|
||||||
- params.cancellable,
|
|
||||||
- Lang.bind(this,
|
|
||||||
- function(object, result) {
|
|
||||||
- try {
|
|
||||||
- content.load_file_finish(result);
|
|
||||||
-
|
|
||||||
- this._monitorFile(params.filename);
|
|
||||||
- this._images.push(content);
|
|
||||||
- } catch(e) {
|
|
||||||
- content = null;
|
|
||||||
- }
|
|
||||||
+ if (caller.cancellable) {
|
|
||||||
+ caller.cancellable.connect(Lang.bind(this, function() {
|
|
||||||
+ let idx = info.callers.indexOf(caller);
|
|
||||||
+ info.callers.splice(idx, 1);
|
|
||||||
|
|
||||||
- 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);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- this._pendingFileLoads.splice(i, 1);
|
|
||||||
- }
|
|
||||||
- }));
|
|
||||||
+ if (info.callers.length == 0) {
|
|
||||||
+ info.cancellable.cancel();
|
|
||||||
+
|
|
||||||
+ let idx = this._pendingFileLoads.indexOf(info);
|
|
||||||
+ this._pendingFileLoads.splice(idx, 1);
|
|
||||||
+ }
|
|
||||||
+ }));
|
|
||||||
+ }
|
|
||||||
},
|
|
||||||
|
|
||||||
getImageContent: function(params) {
|
|
||||||
@@ -250,7 +261,6 @@ const BackgroundCache = new Lang.Class({
|
|
||||||
monitorIndex: params.monitorIndex,
|
|
||||||
cancellable: params.cancellable,
|
|
||||||
onFinished: params.onFinished });
|
|
||||||
-
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
--
|
|
||||||
1.8.5.3
|
|
@ -1,6 +1,6 @@
|
|||||||
Name: gnome-shell
|
Name: gnome-shell
|
||||||
Version: 3.11.91
|
Version: 3.11.91
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: Window management and application launching for GNOME
|
Summary: Window management and application launching for GNOME
|
||||||
|
|
||||||
Group: User Interface/Desktops
|
Group: User Interface/Desktops
|
||||||
@ -14,7 +14,11 @@ Source0: http://download.gnome.org/sources/gnome-shell/3.11/%{name}-%{ver
|
|||||||
Patch1: gnome-shell-favourite-apps-firefox.patch
|
Patch1: gnome-shell-favourite-apps-firefox.patch
|
||||||
|
|
||||||
# https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
# https://bugzilla.gnome.org/show_bug.cgi?id=722149
|
||||||
Patch2: gnome-shell-3.11.90-background.patch
|
# Patch series all backported from upstream git master, will be in 3.11.92
|
||||||
|
Patch2: 0001-background-always-copy-background-content-when-loadi.patch
|
||||||
|
Patch3: 0002-background-refactor-file-loading.patch
|
||||||
|
Patch4: 0003-background-get-rid-of-nested-loop-when-finishing-fil.patch
|
||||||
|
Patch5: 0004-background-fix-cancellable-issue.patch
|
||||||
|
|
||||||
%define clutter_version 1.13.4
|
%define clutter_version 1.13.4
|
||||||
%define gnome_bluetooth_version 1:3.9.0
|
%define gnome_bluetooth_version 1:3.9.0
|
||||||
@ -119,7 +123,10 @@ easy to use experience.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch1 -p1 -b .firefox
|
%patch1 -p1 -b .firefox
|
||||||
%patch2 -p1 -b .background
|
%patch2 -p1 -b .background1
|
||||||
|
%patch3 -p1 -b .background2
|
||||||
|
%patch4 -p1 -b .background3
|
||||||
|
%patch5 -p1 -b .background4
|
||||||
|
|
||||||
%build
|
%build
|
||||||
(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; fi;
|
(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; fi;
|
||||||
@ -179,6 +186,9 @@ glib-compile-schemas --allow-any-name %{_datadir}/glib-2.0/schemas &> /dev/null
|
|||||||
%exclude %{_datadir}/gtk-doc
|
%exclude %{_datadir}/gtk-doc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 12 2014 Adam Williamson <awilliam@redhat.com> - 3.11.91-2
|
||||||
|
- update to final revision of background bug fix from upstream (BGO #722149)
|
||||||
|
|
||||||
* Thu Mar 06 2014 Florian Müllner <fmuellner@redhat.com> - 3.11.91-1
|
* Thu Mar 06 2014 Florian Müllner <fmuellner@redhat.com> - 3.11.91-1
|
||||||
- Update to 3.11.91
|
- Update to 3.11.91
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user