diff options
author | Florian Müllner <fmuellner@gnome.org> | 2022-03-04 23:32:24 +0100 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2022-03-05 00:12:27 +0000 |
commit | cf29ec2f2231a897d25b67fac151e49da451eaeb (patch) | |
tree | 1cd5405d7b9a7744c5edffa867fcd5896ba01624 /tests | |
parent | 7b0a94b246a241d17891ab4f8a49df2072fbfc98 (diff) | |
download | gnome-shell-cf29ec2f2231a897d25b67fac151e49da451eaeb.tar.gz |
signalTracker: Add TransientSignalHolder class
There are cases where we want to connect to a number of signals
for the lifetime of an object, but also other signals for a
limited period (say: between show and hide).
It is currently not possible to use disconnectObject() for the
latter, because it will disconnect all signals.
To address this use case, add a small class that can be used as
a transient signal holder, while still benefiting from autocleanup
by proxying the real owner.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2221>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/signalTracker.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/unit/signalTracker.js b/tests/unit/signalTracker.js index f13327ec1..40398c0b8 100644 --- a/tests/unit/signalTracker.js +++ b/tests/unit/signalTracker.js @@ -8,6 +8,8 @@ const JsUnit = imports.jsUnit; const Signals = imports.signals; const Environment = imports.ui.environment; +const { TransientSignalHolder } = imports.misc.signalTracker; + Environment.init(); const Destroyable = GObject.registerClass({ @@ -77,3 +79,39 @@ emitter1.emit('signal'); emitter2.emit('signal'); JsUnit.assertEquals(count, 10); + +emitter1.connectObject('signal', handler, tracked1); +emitter2.connectObject('signal', handler, tracked1); + +transientHolder = new TransientSignalHolder(tracked1); + +emitter1.connectObject('signal', handler, transientHolder); +emitter2.connectObject('signal', handler, transientHolder); + +emitter1.emit('signal'); +emitter2.emit('signal'); + +JsUnit.assertEquals(count, 14); + +transientHolder.destroy(); + +emitter1.emit('signal'); +emitter2.emit('signal'); + +JsUnit.assertEquals(count, 16); + +transientHolder = new TransientSignalHolder(tracked1); + +emitter1.connectObject('signal', handler, transientHolder); +emitter2.connectObject('signal', handler, transientHolder); + +emitter1.emit('signal'); +emitter2.emit('signal'); + +JsUnit.assertEquals(count, 20); + +tracked1.emit('destroy'); +emitter1.emit('signal'); +emitter2.emit('signal'); + +JsUnit.assertEquals(count, 20); |