[gjs/wip/gobj-kitchen-sink: 26/26] GObject: Move the 'on_'-prefixed signal auto-connections to 'SignalImpls'



commit 6a1b1938cd89d7b48cfbdcb3559bb01b3df3c0a5
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Sat Jan 28 04:01:01 2012 -0500

    GObject: Move the 'on_'-prefixed signal auto-connections to 'SignalImpls'
    
    For parity with the vfunc overrides, move the magic 'on_' signal
    auto-connections to a new hash, 'SignalImpls'

 modules/overrides/GObject.js |   26 +++++++++++++-------------
 test/js/testGObjectClass.js  |   14 ++++++++------
 2 files changed, 21 insertions(+), 19 deletions(-)
---
diff --git a/modules/overrides/GObject.js b/modules/overrides/GObject.js
index 153d526..8ca0781 100644
--- a/modules/overrides/GObject.js
+++ b/modules/overrides/GObject.js
@@ -41,11 +41,13 @@ const GObjectMeta = new Lang.Class({
         let signals = params.Signals;
         let ifaces = params.Implements;
         let vfuncImpls = params.VFuncImpls;
+        let signalImpls = params.SignalImpls;
 
         delete params.Properties;
         delete params.Signals;
         delete params.Implements;
         delete params.VFuncImpls;
+        delete params.SignalImpls;
 
         if (properties) {
             for (let prop in properties) {
@@ -83,19 +85,17 @@ const GObjectMeta = new Lang.Class({
             }
         }
 
-        for (let prop in params) {
-            let value = this.prototype[prop];
-            if (typeof value === 'function') {
-                if (prop.slice(0, 3) == 'on_') {
-                    let id = GObject.signal_lookup(prop.slice(3).replace('_', '-'), this.$gtype);
-                    if (id != 0) {
-                        GObject.signal_override_class_closure(id, this.$gtype, function() {
-                            let argArray = Array.prototype.slice.call(arguments);
-                            let emitter = argArray.shift();
-
-                            value.apply(emitter, argArray);
-                        });
-                    }
+        if (signalImpls) {
+            for (let prop in signalImpls) {
+                let value = this.wrapFunction(prop, signalImpls[prop]);
+                let id = GObject.signal_lookup(prop.replace('_', '-'), this);
+                if (id != 0) {
+                    GObject.signal_override_class_closure(id, this, function() {
+                        let argArray = Array.prototype.slice.call(arguments);
+                        let emitter = argArray.shift();
+
+                        value.apply(emitter, argArray);
+                    });
                 }
             }
         }
diff --git a/test/js/testGObjectClass.js b/test/js/testGObjectClass.js
index 2b3efa3..c94bc12 100644
--- a/test/js/testGObjectClass.js
+++ b/test/js/testGObjectClass.js
@@ -107,12 +107,14 @@ const MyObject = new GObject.Class({
         this.emit('run-last');
     },
 
-    on_run_last: function() {
-        this._run_last_callback();
-    },
+    SignalImpls: {
+        run_last: function() {
+            this._run_last_callback();
+        },
 
-    on_empty: function() {
-        this.empty_called = true;
+        empty: function() {
+            this.empty_called = true;
+        }
     }
 });
 



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