1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
From 0a1b9867fcf5065a72e782e05fea858883bf2cdc Mon Sep 17 00:00:00 2001
From: Adel Gadllah <adel.gadllah@gmail.com>
Date: Thu, 15 Aug 2013 19:51:46 +0000
Subject: Revert "background: fix asynchronous management of background loading operations"
This reverts commit 1020d8a0f8523a04d8336b1348388b8b242e414f.
https://bugzilla.gnome.org/show_bug.cgi?id=704646
---
diff --git a/js/ui/background.js b/js/ui/background.js
index 13343c6..1d9ab7c 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -142,40 +142,33 @@ const BackgroundCache = new Lang.Class({
cancellable: null,
onFinished: null });
- let fileLoad = { filename: params.filename,
- style: params.style,
- shouldCopy: false,
- monitorIndex: params.monitorIndex,
- effects: params.effects,
- onFinished: params.onFinished,
- cancellable: new Gio.Cancellable(), };
- this._pendingFileLoads.push(fileLoad);
-
- if (params.cancellable) {
- params.cancellable.connect(Lang.bind(this, function(c) {
- fileLoad.cancellable.cancel();
- }));
+ 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;
+ }
}
+ 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 });
content.load_file_async(params.filename,
params.style,
- fileLoad.cancellable,
+ params.cancellable,
Lang.bind(this,
function(object, result) {
- if (fileLoad.cancellable.is_cancelled()) {
- if (params.cancellable && params.cancellable.is_cancelled()) {
- if (params.onFinished)
- params.onFinished(null);
- this._removePendingFileLoad(fileLoad);
- return;
- }
- return;
- }
-
try {
content.load_file_finish(result);
@@ -185,25 +178,22 @@ const BackgroundCache = new Lang.Class({
content = null;
}
- let needsCopy = false;
for (let i = 0; i < this._pendingFileLoads.length; i++) {
let pendingLoad = this._pendingFileLoads[i];
if (pendingLoad.filename != params.filename ||
pendingLoad.style != params.style)
continue;
- if (pendingLoad.cancellable.is_cancelled())
- continue;
+ for (let j = 0; j < pendingLoad.callers.length; j++) {
+ if (pendingLoad.callers[j].onFinished) {
+ if (content && pendingLoad.callers[j].shouldCopy) {
+ content = object.copy(pendingLoad.callers[j].monitorIndex,
+ pendingLoad.callers[j].effects);
- pendingLoad.cancellable.cancel();
- if (pendingLoad.onFinished) {
- if (content && needsCopy) {
- content = object.copy(pendingLoad.monitorIndex,
- pendingLoad.effects);
- }
+ }
- needsCopy = true;
- pendingLoad.onFinished(content);
+ pendingLoad.callers[j].onFinished(content);
+ }
}
this._pendingFileLoads.splice(i, 1);
@@ -211,15 +201,6 @@ const BackgroundCache = new Lang.Class({
}));
},
- _removePendingFileLoad: function(fileLoad) {
- for (let i = 0; i < this._pendingFileLoads.length; i++) {
- if (this._pendingFileLoads[i].cancellable == fileLoad.cancellable) {
- this._pendingFileLoads.splice(i, 1);
- break;
- }
- }
- },
-
getImageContent: function(params) {
params = Params.parse(params, { monitorIndex: 0,
style: null,
--
cgit v0.9.2
|