[gjs: 1/3] signals: Add _signalHandlerIsConnected method



commit b73d065f8ad22068d922214a364a2da4798e71dc
Author: Jason Hicks <jaszhix gmail com>
Date:   Mon Nov 12 21:11:05 2018 -0600

    signals: Add _signalHandlerIsConnected method

 installed-tests/js/testSignals.js |  7 +++++++
 modules/signals.js                | 21 +++++++++++++++++++++
 2 files changed, 28 insertions(+)
---
diff --git a/installed-tests/js/testSignals.js b/installed-tests/js/testSignals.js
index 58d35309..8a031b33 100644
--- a/installed-tests/js/testSignals.js
+++ b/installed-tests/js/testSignals.js
@@ -92,6 +92,13 @@ function testSignals(klass) {
         expect(bonk).not.toHaveBeenCalled();
     });
 
+    it('determines if a signal is connected on a JS object', function () {
+        let id = foo.connect('bar', bar);
+        expect(foo.signalHandlerIsConnected(id)).toEqual(true);
+        foo.disconnect(id);
+        expect(foo.signalHandlerIsConnected(id)).toEqual(false);
+    });
+
     describe('with exception in signal handler', function () {
         let bar2;
         beforeEach(function () {
diff --git a/modules/signals.js b/modules/signals.js
index 6a1bae62..d08c7fd1 100644
--- a/modules/signals.js
+++ b/modules/signals.js
@@ -78,6 +78,25 @@ function _disconnect(id) {
     throw new Error("No signal connection " + id + " found");
 }
 
+function _signalHandlerIsConnected(id) {
+    if (!('_signalConnections' in this))
+        return false;
+
+    let i;
+    let length = this._signalConnections.length;
+    for (i = 0; i < length; ++i) {
+        let connection = this._signalConnections[i];
+        if (connection.id == id) {
+            if (connection.disconnected) {
+                return false;
+            }
+            return true;
+        }
+    }
+
+    return false;
+}
+
 function _disconnectAll() {
     if ('_signalConnections' in this) {
         while (this._signalConnections.length > 0) {
@@ -154,6 +173,7 @@ function addSignalMethods(proto) {
     _addSignalMethod(proto, "connect", _connect);
     _addSignalMethod(proto, "disconnect", _disconnect);
     _addSignalMethod(proto, "emit", _emit);
+    _addSignalMethod(proto, 'signalHandlerIsConnected', _signalHandlerIsConnected)
     // this one is not in GObject, but useful
     _addSignalMethod(proto, "disconnectAll", _disconnectAll);
 }
@@ -163,5 +183,6 @@ var WithSignals = new Lang.Interface({
     connect: _connect,
     disconnect: _disconnect,
     emit: _emit,
+    signalHandlerIsConnected: _signalHandlerIsConnected,
     disconnectAll: _disconnectAll,
 });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]