Skip to content

Add connectObject()/disconnectObject() convenience methods

Florian Müllner requested to merge fmuellner/gnome-shell:signal-tracker into main

This is a small experiment to make dealing with signals a bit more automatic and convenient.

Quoting the main commit:

signalTracker: Provide monkey-patching for (dis)connectObject()

The module exports a `addObjectSignalMethods()` method that extends
the provided prototype with `connectObject()` and `disconnectObject()`
methods.

In its simplest form, `connectObject()` looks like the regular
`connect()` method, except for an additional parameter:

```js
    this._button.connectObject('clicked',
        () => this._onButtonClicked(), this);
```

The additional object can be used to disconnect all handlers on the
instance that were connected with that object, similar to
`g_signal_handlers_disconnect_by_data()` (which cannot be used
from introspection).

For objects that are subclasses of Clutter.Actor, that will happen
automatically when the actor is destroyed, similar to
`g_signal_connect_object()`.

Finally, `connectObject()` allows to conveniently connect multiple
signals at once, similar to `g_object_connect()`:

```js
    this._toggleButton.connect(
        'clicked', () => this._onClicked(),
        'notify::checked', () => this._onChecked(), this);
```

The second commit adapts popupMenu.js to use the new methods, to see how it works out in practice.

Last but not least: Whereever this goes, it's not 41 material.

Edited by Florian Müllner

Merge request reports