[gjs: 5/9] Gtk: Provide better message when forgetting a template signal handler



commit d59c8c24c4cd25675c99f507b64008321991df71
Author: Philip Chimento <philip endlessm com>
Date:   Tue Aug 27 12:07:33 2019 +0300

    Gtk: Provide better message when forgetting a template signal handler
    
    The old message was not very enlightening: "this[handlerName] is
    undefined".

 installed-tests/js/testLegacyGtk.js |  2 ++
 modules/overrides/Gtk.js            | 12 ++++++++----
 2 files changed, 10 insertions(+), 4 deletions(-)
---
diff --git a/installed-tests/js/testLegacyGtk.js b/installed-tests/js/testLegacyGtk.js
index 97cc8899..b1dbe72e 100644
--- a/installed-tests/js/testLegacyGtk.js
+++ b/installed-tests/js/testLegacyGtk.js
@@ -65,6 +65,8 @@ const MyComplexGtkSubclassFromResource = new Lang.Class({
         expect(this.label_child2).toEqual(jasmine.anything());
         expect(this._internal_label_child).toEqual(jasmine.anything());
     },
+
+    templateCallback() {},
 });
 
 function validateTemplate(description, ClassName) {
diff --git a/modules/overrides/Gtk.js b/modules/overrides/Gtk.js
index 2a7c860c..7d0fdacc 100644
--- a/modules/overrides/Gtk.js
+++ b/modules/overrides/Gtk.js
@@ -45,14 +45,18 @@ function _init() {
     Gtk.Widget.prototype._init = function (params) {
         if (this.constructor[Gtk.template]) {
             Gtk.Widget.set_connect_func.call(this.constructor, (builder, obj, signalName, handlerName, 
connectObj, flags) => {
-                if (connectObj !== null)
+                if (connectObj !== null) {
                     throw new Error('Unsupported template signal attribute "object"');
-                else if (flags & GObject.ConnectFlags.SWAPPED)
+                } else if (flags & GObject.ConnectFlags.SWAPPED) {
                     throw new Error('Unsupported template signal flag "swapped"');
-                else if (flags & GObject.ConnectFlags.AFTER)
+                } else if (typeof this[handlerName] === 'undefined') {
+                    throw new Error(`A handler called ${handlerName} was not ` +
+                        `defined for signal ${signalName} on ${this}`);
+                } else if (flags & GObject.ConnectFlags.AFTER) {
                     obj.connect_after(signalName, this[handlerName].bind(this));
-                else
+                } else {
                     obj.connect(signalName, this[handlerName].bind(this));
+                }
             });
         }
 


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