summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lang/gjs/src/gobject.ts20
1 files changed, 10 insertions, 10 deletions
diff --git a/lang/gjs/src/gobject.ts b/lang/gjs/src/gobject.ts
index d37ac69..aeb3d9e 100644
--- a/lang/gjs/src/gobject.ts
+++ b/lang/gjs/src/gobject.ts
@@ -4,6 +4,7 @@ export { default as GLib } from "gi://GLib?version=2.0"
export { GObject, GObject as default }
const meta = Symbol("meta")
+const priv = Symbol("priv")
const { ParamSpec, ParamFlags } = GObject
@@ -55,28 +56,27 @@ export function property(declaration: PropertyDeclaration = Object) {
const name = kebabify(prop)
if (!desc) {
- let value = defaultValue(declaration)
-
Object.defineProperty(target, prop, {
get() {
- return value
+ return this[priv]?.[prop] ?? defaultValue(declaration)
},
- set(v) {
- if (v !== value) {
- value = v
+ set(v: any) {
+ if (v !== this[prop]) {
+ this[priv] ??= {}
+ this[priv][prop] = v
this.notify(name)
}
},
})
Object.defineProperty(target, `set_${name.replace("-", "_")}`, {
- value: function (v: any) {
+ value(v: any) {
this[prop] = v
},
})
Object.defineProperty(target, `get_${name.replace("-", "_")}`, {
- value: function () {
+ value() {
return this[prop]
},
})
@@ -95,10 +95,10 @@ export function property(declaration: PropertyDeclaration = Object) {
}
export function signal(...params: Array<{ $gtype: GObject.GType } | typeof Object>):
-(target: any, signal: any, desc?: PropertyDescriptor) => void
+ (target: any, signal: any, desc?: PropertyDescriptor) => void
export function signal(declaration?: SignalDeclaration):
-(target: any, signal: any, desc?: PropertyDescriptor) => void
+ (target: any, signal: any, desc?: PropertyDescriptor) => void
export function signal(
declaration?: SignalDeclaration | { $gtype: GObject.GType } | typeof Object,