Merge ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic into ~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic
- Git
- lp:~3v1n0/ubuntu/+source/gnome-shell
- ubuntu/bionic
- Merge into ubuntu/bionic
Proposed by
Marco Trevisan (Treviño)
Status: | Merged |
---|---|
Merge reported by: | Iain Lane |
Merged at revision: | 7d48524cf3055aa3e23d7762d81b730c5261be78 |
Proposed branch: | ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic |
Merge into: | ~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic |
Diff against target: |
439 lines (+102/-210) 3 files modified
debian/changelog (+3/-1) debian/patches/js-fix-invalid-access-errors.patch (+81/-172) debian/patches/workspace-fix-repositioned-windows-in-activities.patch (+18/-37) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Iain Lane | Approve | ||
Review via email: mp+350755@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/debian/changelog b/debian/changelog | |||
2 | index 8468ec3..6839363 100644 | |||
3 | --- a/debian/changelog | |||
4 | +++ b/debian/changelog | |||
5 | @@ -9,7 +9,9 @@ gnome-shell (3.28.3-0ubuntu0.18.04.1) bionic; urgency=medium | |||
6 | 9 | debian/patches/ui-Theme-lookup-should-respect-XDG_DATA_DIRS.patch: | 9 | debian/patches/ui-Theme-lookup-should-respect-XDG_DATA_DIRS.patch: |
7 | 10 | - Drop patches applied on the 3.28 branch | 10 | - Drop patches applied on the 3.28 branch |
8 | 11 | * debian/patches/js-fix-invalid-access-errors.patch: | 11 | * debian/patches/js-fix-invalid-access-errors.patch: |
10 | 12 | - Refreshed to reflect upstream changes | 12 | - Updated to include upstream requested changes |
11 | 13 | * debian/patches/workspace-fix-repositioned-windows-in-activities.patch: | ||
12 | 14 | - Cherry-pick from upstream 3.28 branch | ||
13 | 13 | 15 | ||
14 | 14 | -- Marco Trevisan (Treviño) <marco@ubuntu.com> Tue, 24 Jul 2018 12:46:27 +0100 | 16 | -- Marco Trevisan (Treviño) <marco@ubuntu.com> Tue, 24 Jul 2018 12:46:27 +0100 |
15 | 15 | 17 | ||
16 | diff --git a/debian/patches/js-fix-invalid-access-errors.patch b/debian/patches/js-fix-invalid-access-errors.patch | |||
17 | index c86fc8b..a272d79 100644 | |||
18 | --- a/debian/patches/js-fix-invalid-access-errors.patch | |||
19 | +++ b/debian/patches/js-fix-invalid-access-errors.patch | |||
20 | @@ -24,47 +24,37 @@ Remove duplicated handler on 'destroy' and just use a generic one. | |||
21 | 24 | 24 | ||
22 | 25 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 | 25 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 |
23 | 26 | 26 | ||
28 | 27 | workspaceThumbnail: Disconnect from window signals on destruction | 27 | automountManager: remove allowAutorun expire timeout on volume removal |
29 | 28 | 28 | ||
30 | 29 | Avoid to try to destroy the window clone content more than once | 29 | If the volume is removed before AUTORUN_EXPIRE_TIMEOUT_SECS seconds, we can stop |
31 | 30 | when a window is destroyed, and do it in proper order. | 30 | the timeout earlier as there's nothing to unset, while the volume instance |
32 | 31 | won't be valid anymore. | ||
33 | 31 | 32 | ||
34 | 32 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 | 33 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 |
35 | 33 | 34 | ||
42 | 34 | workspaceThumbnail: Remove WindowClone's from _windows when destroyed | 35 | messageList: stop syncing if closeButton has been destroyed |
37 | 35 | |||
38 | 36 | A WindowClone might be destroyed earlier than its MetaWindow counterpart | ||
39 | 37 | as its WindowActor could be destroyed earlier, thus when happens it's safer | ||
40 | 38 | to remove the clone from the windows list, without waiting for the workspace | ||
41 | 39 | to request to do so. | ||
43 | 40 | 36 | ||
49 | 41 | WindowClone now emits a 'destroy' signals earlier enough and this now | 37 | The _sync function for Message only updates the close button visibility, |
50 | 42 | triggers a _doRemoveWindow on WorkspaceThumbnail which will lead | 38 | so we can safely stop doing that if the close button get get destroyed earlier |
51 | 43 | to the proper cleanup; keeping track of the signal connections, in | 39 | (as it happens when clicking on it). |
47 | 44 | order to avoid callback loops (not really harmful in this case, but | ||
48 | 45 | good practice). | ||
52 | 46 | 40 | ||
53 | 47 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 | 41 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 |
54 | 48 | 42 | ||
56 | 49 | workspace: Disconnect from window signals on destruction | 43 | workspaceThumbnail: Don't keep stale clones in list |
57 | 50 | 44 | ||
60 | 51 | Avoid to try to destroy the window clone content more than once | 45 | If a clone gets destroyed before the corresponding MetaWindow is |
61 | 52 | when a window is destroyed, and do it in proper order. | 46 | removed from the workspace, we will still find it in the list of |
62 | 47 | clones and try to destroy it again. Avoid the resulting warnings | ||
63 | 48 | by updating the list of clones immediately when a clone is destroyed. | ||
64 | 53 | 49 | ||
65 | 54 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 | 50 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 |
66 | 55 | 51 | ||
73 | 56 | workspace: Remove WindowClone's from _windows when destroyed | 52 | workspace: Don't keep stale clones in list |
68 | 57 | |||
69 | 58 | A WindowClone might be destroyed earlier than its MetaWindow counterpart | ||
70 | 59 | as its WindowActor could be destroyed earlier, thus when happens it's safer | ||
71 | 60 | to remove the clone from the windows list, without waiting for the workspace | ||
72 | 61 | to request to do so. | ||
74 | 62 | 53 | ||
80 | 63 | WindowClone now emits a 'destroy' signals earlier enough and this now | 54 | If a clone gets destroyed before the corresponding MetaWindow is |
81 | 64 | triggers a _doRemoveWindow on WorkspaceThumbnail which will lead | 55 | removed from the workspace, we will still find it in the list of |
82 | 65 | to the proper cleanup; keeping track of the signal connections, in | 56 | clones and try to destroy it again. Avoid the resulting warnings |
83 | 66 | order to avoid callback loops (not really harmful in this case, but | 57 | by updating the list of clones immediately when a clone is destroyed. |
79 | 67 | good practice). | ||
84 | 68 | 58 | ||
85 | 69 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 | 59 | https://bugzilla.gnome.org/show_bug.cgi?id=791233 |
86 | 70 | 60 | ||
87 | @@ -72,12 +62,52 @@ Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=791233 | |||
88 | 72 | Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/bionic/+source/gnome-shell/+bug/1747566 | 62 | Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/bionic/+source/gnome-shell/+bug/1747566 |
89 | 73 | Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4 | 63 | Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4 |
90 | 74 | --- | 64 | --- |
96 | 75 | js/ui/dnd.js | 65 +++++++++++++++++++++++++++------------------ | 65 | js/ui/calendar.js | 2 ++ |
97 | 76 | js/ui/tweener.js | 64 +++++++++++++++++++++++++++++++++++--------- | 66 | js/ui/components/automountManager.js | 6 ++++ |
98 | 77 | js/ui/workspace.js | 26 +++++++++++------- | 67 | js/ui/dnd.js | 65 +++++++++++++++++++++--------------- |
99 | 78 | js/ui/workspaceThumbnail.js | 21 ++++++++++----- | 68 | js/ui/messageList.js | 3 +- |
100 | 79 | 4 files changed, 122 insertions(+), 54 deletions(-) | 69 | js/ui/tweener.js | 63 ++++++++++++++++++++++++++-------- |
101 | 70 | 5 files changed, 99 insertions(+), 40 deletions(-) | ||
102 | 80 | 71 | ||
103 | 72 | diff --git a/js/ui/calendar.js b/js/ui/calendar.js | ||
104 | 73 | index 651aac6..fd133cc 100644 | ||
105 | 74 | --- a/js/ui/calendar.js | ||
106 | 75 | +++ b/js/ui/calendar.js | ||
107 | 76 | @@ -802,6 +802,8 @@ var NotificationMessage = new Lang.Class({ | ||
108 | 77 | }, | ||
109 | 78 | |||
110 | 79 | _onDestroy() { | ||
111 | 80 | + this.parent(); | ||
112 | 81 | + | ||
113 | 82 | if (this._updatedId) | ||
114 | 83 | this.notification.disconnect(this._updatedId); | ||
115 | 84 | this._updatedId = 0; | ||
116 | 85 | diff --git a/js/ui/components/automountManager.js b/js/ui/components/automountManager.js | ||
117 | 86 | index 2d8f3f8..a6cd857 100644 | ||
118 | 87 | --- a/js/ui/components/automountManager.js | ||
119 | 88 | +++ b/js/ui/components/automountManager.js | ||
120 | 89 | @@ -210,6 +210,10 @@ var AutomountManager = new Lang.Class({ | ||
121 | 90 | }, | ||
122 | 91 | |||
123 | 92 | _onVolumeRemoved(monitor, volume) { | ||
124 | 93 | + if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) { | ||
125 | 94 | + Mainloop.source_remove(volume._allowAutorunExpireId); | ||
126 | 95 | + delete volume._allowAutorunExpireId; | ||
127 | 96 | + } | ||
128 | 97 | this._volumeQueue = | ||
129 | 98 | this._volumeQueue.filter(element => (element != volume)); | ||
130 | 99 | }, | ||
131 | 100 | @@ -234,8 +238,10 @@ var AutomountManager = new Lang.Class({ | ||
132 | 101 | _allowAutorunExpire(volume) { | ||
133 | 102 | let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => { | ||
134 | 103 | volume.allowAutorun = false; | ||
135 | 104 | + delete volume._allowAutorunExpireId; | ||
136 | 105 | return GLib.SOURCE_REMOVE; | ||
137 | 106 | }); | ||
138 | 107 | + volume._allowAutorunExpireId = id; | ||
139 | 108 | GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun'); | ||
140 | 109 | } | ||
141 | 110 | }); | ||
142 | 81 | diff --git a/js/ui/dnd.js b/js/ui/dnd.js | 111 | diff --git a/js/ui/dnd.js b/js/ui/dnd.js |
143 | 82 | index a38607c..431c60d 100644 | 112 | index a38607c..431c60d 100644 |
144 | 83 | --- a/js/ui/dnd.js | 113 | --- a/js/ui/dnd.js |
145 | @@ -275,11 +305,25 @@ index a38607c..431c60d 100644 | |||
146 | 275 | currentDraggable = null; | 305 | currentDraggable = null; |
147 | 276 | } | 306 | } |
148 | 277 | }); | 307 | }); |
149 | 308 | diff --git a/js/ui/messageList.js b/js/ui/messageList.js | ||
150 | 309 | index aff201e..2d397c1 100644 | ||
151 | 310 | --- a/js/ui/messageList.js | ||
152 | 311 | +++ b/js/ui/messageList.js | ||
153 | 312 | @@ -362,7 +362,8 @@ var Message = new Lang.Class({ | ||
154 | 313 | this.setBody(body); | ||
155 | 314 | |||
156 | 315 | this._closeButton.connect('clicked', this.close.bind(this)); | ||
157 | 316 | - this.actor.connect('notify::hover', this._sync.bind(this)); | ||
158 | 317 | + let actorHoverId = this.actor.connect('notify::hover', this._sync.bind(this)); | ||
159 | 318 | + this._closeButton.connect('destroy', this.actor.disconnect.bind(this.actor, actorHoverId)); | ||
160 | 319 | this.actor.connect('clicked', this._onClicked.bind(this)); | ||
161 | 320 | this.actor.connect('destroy', this._onDestroy.bind(this)); | ||
162 | 321 | this._sync(); | ||
163 | 278 | diff --git a/js/ui/tweener.js b/js/ui/tweener.js | 322 | diff --git a/js/ui/tweener.js b/js/ui/tweener.js |
165 | 279 | index 1a85e2f..663b97b 100644 | 323 | index 1a85e2f..22818ba 100644 |
166 | 280 | --- a/js/ui/tweener.js | 324 | --- a/js/ui/tweener.js |
167 | 281 | +++ b/js/ui/tweener.js | 325 | +++ b/js/ui/tweener.js |
169 | 282 | @@ -69,30 +69,68 @@ function _getTweenState(target) { | 326 | @@ -69,30 +69,67 @@ function _getTweenState(target) { |
170 | 283 | return target.__ShellTweenerState; | 327 | return target.__ShellTweenerState; |
171 | 284 | } | 328 | } |
172 | 285 | 329 | ||
173 | @@ -320,8 +364,7 @@ index 1a85e2f..663b97b 100644 | |||
174 | 320 | + let wrapperNeeded = false; | 364 | + let wrapperNeeded = false; |
175 | 321 | + let tweenerHandlers = _ensureHandlers(target); | 365 | + let tweenerHandlers = _ensureHandlers(target); |
176 | 322 | + | 366 | + |
179 | 323 | + if (!(name in tweenerHandlers)) | 367 | + if (!(name in tweenerHandlers)) { |
178 | 324 | + { | ||
180 | 325 | + tweenerHandlers[name] = []; | 368 | + tweenerHandlers[name] = []; |
181 | 326 | + wrapperNeeded = true; | 369 | + wrapperNeeded = true; |
182 | 327 | + } | 370 | + } |
183 | @@ -361,137 +404,3 @@ index 1a85e2f..663b97b 100644 | |||
184 | 361 | } | 404 | } |
185 | 362 | 405 | ||
186 | 363 | function _actorDestroyed(target) { | 406 | function _actorDestroyed(target) { |
187 | 364 | diff --git a/js/ui/workspace.js b/js/ui/workspace.js | ||
188 | 365 | index 8b56932..c148ccb 100644 | ||
189 | 366 | --- a/js/ui/workspace.js | ||
190 | 367 | +++ b/js/ui/workspace.js | ||
191 | 368 | @@ -139,14 +139,8 @@ var WindowClone = new Lang.Class({ | ||
192 | 369 | |||
193 | 370 | this._windowClone._updateId = this.metaWindow.connect('size-changed', | ||
194 | 371 | this._onRealWindowSizeChanged.bind(this)); | ||
195 | 372 | - this._windowClone._destroyId = | ||
196 | 373 | - this.realWindow.connect('destroy', () => { | ||
197 | 374 | - // First destroy the clone and then destroy everything | ||
198 | 375 | - // This will ensure that we never see it in the | ||
199 | 376 | - // _disconnectSignals loop | ||
200 | 377 | - this._windowClone.destroy(); | ||
201 | 378 | - this.destroy(); | ||
202 | 379 | - }); | ||
203 | 380 | + this._windowClone._destroyId = this.realWindow.connect('destroy', | ||
204 | 381 | + this.destroy.bind(this)); | ||
205 | 382 | |||
206 | 383 | this._updateAttachedDialogs(); | ||
207 | 384 | this._computeBoundingBox(); | ||
208 | 385 | @@ -310,6 +304,14 @@ var WindowClone = new Lang.Class({ | ||
209 | 386 | }, | ||
210 | 387 | |||
211 | 388 | destroy() { | ||
212 | 389 | + this.emit('destroy'); | ||
213 | 390 | + | ||
214 | 391 | + // First destroy the clone and then destroy everything | ||
215 | 392 | + // This will ensure that we never see it in the _disconnectSignals loop | ||
216 | 393 | + this.metaWindow.disconnect(this._windowClone._updateId); | ||
217 | 394 | + this.realWindow.disconnect(this._windowClone._destroyId); | ||
218 | 395 | + this._windowClone.destroy(); | ||
219 | 396 | + | ||
220 | 397 | this.actor.destroy(); | ||
221 | 398 | }, | ||
222 | 399 | |||
223 | 400 | @@ -1131,6 +1133,7 @@ var Workspace = new Lang.Class({ | ||
224 | 401 | // Create clones for windows that should be | ||
225 | 402 | // visible in the Overview | ||
226 | 403 | this._windows = []; | ||
227 | 404 | + this._windowsDestroyedIds = []; | ||
228 | 405 | this._windowOverlays = []; | ||
229 | 406 | for (let i = 0; i < windows.length; i++) { | ||
230 | 407 | if (this._isOverviewWindow(windows[i])) { | ||
231 | 408 | @@ -1428,7 +1431,7 @@ var Workspace = new Lang.Class({ | ||
232 | 409 | return GLib.SOURCE_REMOVE; | ||
233 | 410 | }, | ||
234 | 411 | |||
235 | 412 | - _doRemoveWindow(metaWin) { | ||
236 | 413 | + _doRemoveWindow(metaWin, {cloneDestroy}={cloneDestroy: true}) { | ||
237 | 414 | let win = metaWin.get_compositor_private(); | ||
238 | 415 | |||
239 | 416 | let clone = this._removeWindowClone(metaWin); | ||
240 | 417 | @@ -1792,7 +1795,11 @@ var Workspace = new Lang.Class({ | ||
241 | 418 | this._actualGeometryLater = 0; | ||
242 | 419 | } | ||
243 | 420 | |||
244 | 421 | + for (let index = 0; index < this._windows.length; ++index) | ||
245 | 422 | + this._windows[index].disconnect(this._windowsDestroyedIds[index]); | ||
246 | 423 | + | ||
247 | 424 | this._windows = []; | ||
248 | 425 | + this._windowsDestroyedIds = []; | ||
249 | 426 | }, | ||
250 | 427 | |||
251 | 428 | // Sets this.leavingOverview flag to false. | ||
252 | 429 | @@ -1859,6 +1866,7 @@ var Workspace = new Lang.Class({ | ||
253 | 430 | clone.setStackAbove(this._windows[this._windows.length - 1].actor); | ||
254 | 431 | |||
255 | 432 | this._windows.push(clone); | ||
256 | 433 | + this._windowsDestroyedIds.push(cloneDestroyedId); | ||
257 | 434 | this._windowOverlays.push(overlay); | ||
258 | 435 | |||
259 | 436 | return [clone, overlay]; | ||
260 | 437 | diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js | ||
261 | 438 | index 381169e..016dda6 100644 | ||
262 | 439 | --- a/js/ui/workspaceThumbnail.js | ||
263 | 440 | +++ b/js/ui/workspaceThumbnail.js | ||
264 | 441 | @@ -70,12 +70,7 @@ var WindowClone = new Lang.Class({ | ||
265 | 442 | |||
266 | 443 | this.clone._updateId = this.metaWindow.connect('position-changed', | ||
267 | 444 | this._onPositionChanged.bind(this)); | ||
268 | 445 | - this.clone._destroyId = this.realWindow.connect('destroy', () => { | ||
269 | 446 | - // First destroy the clone and then destroy everything | ||
270 | 447 | - // This will ensure that we never see it in the _disconnectSignals loop | ||
271 | 448 | - this.clone.destroy(); | ||
272 | 449 | - this.destroy(); | ||
273 | 450 | - }); | ||
274 | 451 | + this.clone._destroyId = this.realWindow.connect('destroy', this.destroy.bind(this)); | ||
275 | 452 | this._onPositionChanged(); | ||
276 | 453 | |||
277 | 454 | this.actor.connect('button-release-event', | ||
278 | 455 | @@ -142,6 +137,14 @@ var WindowClone = new Lang.Class({ | ||
279 | 456 | }, | ||
280 | 457 | |||
281 | 458 | destroy() { | ||
282 | 459 | + this.emit('destroy'); | ||
283 | 460 | + | ||
284 | 461 | + // First destroy the clone and then destroy everything | ||
285 | 462 | + // This will ensure that we never see it in the _disconnectSignals loop | ||
286 | 463 | + this.metaWindow.disconnect(this.clone._updateId); | ||
287 | 464 | + this.realWindow.disconnect(this.clone._destroyId); | ||
288 | 465 | + this.clone.destroy(); | ||
289 | 466 | + | ||
290 | 467 | this.actor.destroy(); | ||
291 | 468 | }, | ||
292 | 469 | |||
293 | 470 | @@ -285,6 +288,7 @@ var WorkspaceThumbnail = new Lang.Class({ | ||
294 | 471 | |||
295 | 472 | // Create clones for windows that should be visible in the Overview | ||
296 | 473 | this._windows = []; | ||
297 | 474 | + this._windowsDestroyedIds = []; | ||
298 | 475 | this._allWindows = []; | ||
299 | 476 | this._minimizedChangedIds = []; | ||
300 | 477 | for (let i = 0; i < windows.length; i++) { | ||
301 | 478 | @@ -493,7 +497,11 @@ var WorkspaceThumbnail = new Lang.Class({ | ||
302 | 479 | this._bgManager = null; | ||
303 | 480 | } | ||
304 | 481 | |||
305 | 482 | + for (let index = 0; index < this._windows.length; ++index) | ||
306 | 483 | + this._windows[index].disconnect(this._windowsDestroyedIds[index]); | ||
307 | 484 | + | ||
308 | 485 | this._windows = []; | ||
309 | 486 | + this._windowsDestroyedIds = []; | ||
310 | 487 | this.actor = null; | ||
311 | 488 | }, | ||
312 | 489 | |||
313 | 490 | @@ -537,6 +545,7 @@ var WorkspaceThumbnail = new Lang.Class({ | ||
314 | 491 | clone.setStackAbove(this._windows[this._windows.length - 1].actor); | ||
315 | 492 | |||
316 | 493 | this._windows.push(clone); | ||
317 | 494 | + this._windowsDestroyedIds.push(cloneDestroyedId); | ||
318 | 495 | |||
319 | 496 | return clone; | ||
320 | 497 | }, | ||
321 | diff --git a/debian/patches/workspace-fix-repositioned-windows-in-activities.patch b/debian/patches/workspace-fix-repositioned-windows-in-activities.patch | |||
322 | index 5ff0ae2..7da103a 100644 | |||
323 | --- a/debian/patches/workspace-fix-repositioned-windows-in-activities.patch | |||
324 | +++ b/debian/patches/workspace-fix-repositioned-windows-in-activities.patch | |||
325 | @@ -20,12 +20,12 @@ Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=776588 | |||
326 | 20 | Bug-Ubuntu: https://bugs.launchpad.net/gnome-shell/+bug/1653153 | 20 | Bug-Ubuntu: https://bugs.launchpad.net/gnome-shell/+bug/1653153 |
327 | 21 | Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/8 | 21 | Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/8 |
328 | 22 | --- | 22 | --- |
332 | 23 | js/ui/workspace.js | 28 +++++++++++++++------------- | 23 | js/ui/workspace.js | 25 +++++++++++++------------ |
333 | 24 | js/ui/workspaceThumbnail.js | 9 ++++----- | 24 | js/ui/workspaceThumbnail.js | 7 +++---- |
334 | 25 | 2 files changed, 19 insertions(+), 18 deletions(-) | 25 | 2 files changed, 16 insertions(+), 16 deletions(-) |
335 | 26 | 26 | ||
336 | 27 | diff --git a/js/ui/workspace.js b/js/ui/workspace.js | 27 | diff --git a/js/ui/workspace.js b/js/ui/workspace.js |
338 | 28 | index 8836537..f06b78e 100644 | 28 | index 8b56932..112c54e 100644 |
339 | 29 | --- a/js/ui/workspace.js | 29 | --- a/js/ui/workspace.js |
340 | 30 | +++ b/js/ui/workspace.js | 30 | +++ b/js/ui/workspace.js |
341 | 31 | @@ -137,8 +137,10 @@ var WindowClone = new Lang.Class({ | 31 | @@ -137,8 +137,10 @@ var WindowClone = new Lang.Class({ |
342 | @@ -38,10 +38,10 @@ index 8836537..f06b78e 100644 | |||
343 | 38 | + this._onMetaWindowSizeChanged.bind(this)); | 38 | + this._onMetaWindowSizeChanged.bind(this)); |
344 | 39 | + this._windowClone._posChangedId = this.metaWindow.connect('position-changed', | 39 | + this._windowClone._posChangedId = this.metaWindow.connect('position-changed', |
345 | 40 | + this._computeBoundingBox.bind(this)); | 40 | + this._computeBoundingBox.bind(this)); |
350 | 41 | this._windowClone._destroyId = this.realWindow.connect('destroy', | 41 | this._windowClone._destroyId = |
351 | 42 | this.destroy.bind(this)); | 42 | this.realWindow.connect('destroy', () => { |
352 | 43 | 43 | // First destroy the clone and then destroy everything | |
353 | 44 | @@ -200,8 +202,7 @@ var WindowClone = new Lang.Class({ | 44 | @@ -206,8 +208,7 @@ var WindowClone = new Lang.Class({ |
354 | 45 | 45 | ||
355 | 46 | addAttachedDialog(win) { | 46 | addAttachedDialog(win) { |
356 | 47 | this._doAddAttachedDialog(win, win.get_compositor_private()); | 47 | this._doAddAttachedDialog(win, win.get_compositor_private()); |
357 | @@ -51,7 +51,7 @@ index 8836537..f06b78e 100644 | |||
358 | 51 | }, | 51 | }, |
359 | 52 | 52 | ||
360 | 53 | hasAttachedDialogs() { | 53 | hasAttachedDialogs() { |
362 | 54 | @@ -210,15 +211,14 @@ var WindowClone = new Lang.Class({ | 54 | @@ -216,15 +217,14 @@ var WindowClone = new Lang.Class({ |
363 | 55 | 55 | ||
364 | 56 | _doAddAttachedDialog(metaWin, realWin) { | 56 | _doAddAttachedDialog(metaWin, realWin) { |
365 | 57 | let clone = new Clutter.Clone({ source: realWin }); | 57 | let clone = new Clutter.Clone({ source: realWin }); |
366 | @@ -68,21 +68,11 @@ index 8836537..f06b78e 100644 | |||
367 | 68 | 68 | ||
368 | 69 | - this._computeBoundingBox(); | 69 | - this._computeBoundingBox(); |
369 | 70 | - this.emit('size-changed'); | 70 | - this.emit('size-changed'); |
371 | 71 | + this._onMetaWindowSizeChanged.bind(this); | 71 | + this._onMetaWindowSizeChanged(); |
372 | 72 | }); | 72 | }); |
373 | 73 | this.actor.add_child(clone); | 73 | this.actor.add_child(clone); |
374 | 74 | }, | 74 | }, |
386 | 75 | @@ -308,7 +308,8 @@ var WindowClone = new Lang.Class({ | 75 | @@ -321,12 +321,13 @@ var WindowClone = new Lang.Class({ |
376 | 76 | |||
377 | 77 | // First destroy the clone and then destroy everything | ||
378 | 78 | // This will ensure that we never see it in the _disconnectSignals loop | ||
379 | 79 | - this.metaWindow.disconnect(this._windowClone._updateId); | ||
380 | 80 | + this.metaWindow.disconnect(this._windowClone._sizeChangedId); | ||
381 | 81 | + this.metaWindow.disconnect(this._windowClone._posChangedId); | ||
382 | 82 | this.realWindow.disconnect(this._windowClone._destroyId); | ||
383 | 83 | this._windowClone.destroy(); | ||
384 | 84 | |||
385 | 85 | @@ -323,12 +324,13 @@ var WindowClone = new Lang.Class({ | ||
387 | 86 | else | 76 | else |
388 | 87 | realWindow = child.source; | 77 | realWindow = child.source; |
389 | 88 | 78 | ||
390 | @@ -99,7 +89,7 @@ index 8836537..f06b78e 100644 | |||
391 | 99 | this.emit('size-changed'); | 89 | this.emit('size-changed'); |
392 | 100 | }, | 90 | }, |
393 | 101 | diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js | 91 | diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js |
395 | 102 | index 0c72e74..4db8c19 100644 | 92 | index 381169e..417296d 100644 |
396 | 103 | --- a/js/ui/workspaceThumbnail.js | 93 | --- a/js/ui/workspaceThumbnail.js |
397 | 104 | +++ b/js/ui/workspaceThumbnail.js | 94 | +++ b/js/ui/workspaceThumbnail.js |
398 | 105 | @@ -68,7 +68,7 @@ var WindowClone = new Lang.Class({ | 95 | @@ -68,7 +68,7 @@ var WindowClone = new Lang.Class({ |
399 | @@ -109,27 +99,18 @@ index 0c72e74..4db8c19 100644 | |||
400 | 109 | - this.clone._updateId = this.metaWindow.connect('position-changed', | 99 | - this.clone._updateId = this.metaWindow.connect('position-changed', |
401 | 110 | + this.clone._updateId = this.realWindow.connect('notify::position', | 100 | + this.clone._updateId = this.realWindow.connect('notify::position', |
402 | 111 | this._onPositionChanged.bind(this)); | 101 | this._onPositionChanged.bind(this)); |
415 | 112 | this.clone._destroyId = this.realWindow.connect('destroy', this.destroy.bind(this)); | 102 | this.clone._destroyId = this.realWindow.connect('destroy', () => { |
416 | 113 | this._onPositionChanged(); | 103 | // First destroy the clone and then destroy everything |
417 | 114 | @@ -141,7 +141,7 @@ var WindowClone = new Lang.Class({ | 104 | @@ -153,7 +153,7 @@ var WindowClone = new Lang.Class({ |
406 | 115 | |||
407 | 116 | // First destroy the clone and then destroy everything | ||
408 | 117 | // This will ensure that we never see it in the _disconnectSignals loop | ||
409 | 118 | - this.metaWindow.disconnect(this.clone._updateId); | ||
410 | 119 | + this.realWindow.disconnect(this.clone._updateId); | ||
411 | 120 | this.realWindow.disconnect(this.clone._destroyId); | ||
412 | 121 | this.clone.destroy(); | ||
413 | 122 | |||
414 | 123 | @@ -156,7 +156,7 @@ var WindowClone = new Lang.Class({ | ||
418 | 124 | let clone = new Clutter.Clone({ source: realDialog }); | 105 | let clone = new Clutter.Clone({ source: realDialog }); |
419 | 125 | this._updateDialogPosition(realDialog, clone); | 106 | this._updateDialogPosition(realDialog, clone); |
420 | 126 | 107 | ||
421 | 127 | - clone._updateId = metaDialog.connect('position-changed', dialog => { | 108 | - clone._updateId = metaDialog.connect('position-changed', dialog => { |
423 | 128 | + clone._updateId = metaDialog.connect('notify::position', dialog => { | 109 | + clone._updateId = realDialog.connect('notify::position', dialog => { |
424 | 129 | this._updateDialogPosition(dialog, clone); | 110 | this._updateDialogPosition(dialog, clone); |
425 | 130 | }); | 111 | }); |
426 | 131 | clone._destroyId = realDialog.connect('destroy', () => { | 112 | clone._destroyId = realDialog.connect('destroy', () => { |
428 | 132 | @@ -174,7 +174,6 @@ var WindowClone = new Lang.Class({ | 113 | @@ -171,7 +171,6 @@ var WindowClone = new Lang.Class({ |
429 | 133 | }, | 114 | }, |
430 | 134 | 115 | ||
431 | 135 | _onPositionChanged() { | 116 | _onPositionChanged() { |
432 | @@ -137,7 +118,7 @@ index 0c72e74..4db8c19 100644 | |||
433 | 137 | this.actor.set_position(this.realWindow.x, this.realWindow.y); | 118 | this.actor.set_position(this.realWindow.x, this.realWindow.y); |
434 | 138 | }, | 119 | }, |
435 | 139 | 120 | ||
437 | 140 | @@ -182,7 +181,7 @@ var WindowClone = new Lang.Class({ | 121 | @@ -179,7 +178,7 @@ var WindowClone = new Lang.Class({ |
438 | 141 | this.actor.get_children().forEach(child => { | 122 | this.actor.get_children().forEach(child => { |
439 | 142 | let realWindow = child.source; | 123 | let realWindow = child.source; |
440 | 143 | 124 |
Thanks.
Since the previous SRU was uploaded + tagged, I rebased this on top of the ubuntu/bionic branch and made a new changelog entry for .2. I checked the diff vs. the upload that went to cosmic just now and there's nothing in the content, just metadata.
This is merged but since there was a rebase Launchpad isn't going to know that.