[gjs: 1/2] overrides: Add convenience g_object_set() replacement
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs: 1/2] overrides: Add convenience g_object_set() replacement
- Date: Mon, 23 Jul 2018 23:10:36 +0000 (UTC)
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]