[gjs: 1/2] overrides: Add convenience g_object_set() replacement



commit 337c31546f91597f2ab8e16a28d9c0617dac40e0
Author: Florian Müllner <fmuellner gnome org>
Date:   Mon Jul 23 16:18:10 2018 +0200

    overrides: Add convenience g_object_set() replacement
    
    Object.assign() can be used to set multiple properties at once, similar
    to g_object_set() in C code. It doesn't looks quite as nice though, so
    add a small wrapper that replaces the non-introspectable g_object_set().
    
    There's no g_object_get() replacement, first because it is harder, but
    also not least because it is hard to beat the following anyway:
    
      let { someProp, notherProp } = obj;
    
    https://gitlab.gnome.org/GNOME/gjs/merge_requests/213

 installed-tests/js/testEverythingBasic.js | 7 +++++++
 modules/overrides/GObject.js              | 5 +++++
 2 files changed, 12 insertions(+)
---
diff --git a/installed-tests/js/testEverythingBasic.js b/installed-tests/js/testEverythingBasic.js
index ed191f9b..c4eaa108 100644
--- a/installed-tests/js/testEverythingBasic.js
+++ b/installed-tests/js/testEverythingBasic.js
@@ -415,6 +415,13 @@ describe('Life, the Universe and Everything', function () {
         expect(Regress.TestEnum.param(Regress.TestEnum.VALUE4)).toEqual('value4');
     });
 
+    it('can be answered with GObject.set()', function() {
+        let o = new Regress.TestObj();
+        o.set({ string: 'Answer', int: 42 });
+        expect(o.string).toBe('Answer');
+        expect(o.int).toBe(42);
+    });
+
     describe('Object-valued GProperty', function () {
         let o1, t1, t2;
         beforeEach(function () {
diff --git a/modules/overrides/GObject.js b/modules/overrides/GObject.js
index 167942ca..15bbea8f 100644
--- a/modules/overrides/GObject.js
+++ b/modules/overrides/GObject.js
@@ -452,6 +452,11 @@ function _init() {
     GObject.properties = properties;
     GObject.signals = signals;
 
+    // Replacement for non-introspectable g_object_set()
+    GObject.Object.prototype.set = function(params) {
+        Object.assign(this, params);
+    };
+
     // fake enum for signal accumulators, keep in sync with gi/object.c
     GObject.AccumulatorType = {
         NONE: 0,


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