hyprcrux/.config/ags/old/lib/experiments.js
2024-04-11 00:21:35 -04:00

67 lines
1.8 KiB
JavaScript

// these are functionalities that I might include in ags
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Variable } from "resource:///com/github/Aylur/ags/variable.js"
import { App } from "resource:///com/github/Aylur/ags/app.js"
import GObject from "gi://GObject?version=2.0"
// eslint-disable-next-line max-len
// export function watch(init, objs, callback)
// export function watch(init, obj, callback)
export function pwatch(
init,
objs,
sigOrFn,
callback,
) {
const v = new Variable(init)
const f = typeof sigOrFn === "function" ? sigOrFn : callback ?? (() => v.value)
const set = () => v.value = f()
if (Array.isArray(objs)) {
// multiple objects
for (const obj of objs) {
if (Array.isArray(obj)) {
// obj signal pair
const [o, s = "changed"] = obj
o.connect(s, set)
} else {
// obj on changed
obj.connect("changed", set)
}
}
} else {
// watch single object
const signal = typeof sigOrFn === "string" ? sigOrFn : "changed"
objs.connect(signal, set)
}
return v.bind()
}
export function watch(init, objs, sigOrFn, callback) {
print(objs)
const v = new Variable(init);
const f = typeof sigOrFn === "function" ? sigOrFn : (callback || (() => v.value));
const set = () => { v.value = f(); };
if (Array.isArray(objs)) {
// multiple objects
for (const obj of objs) {
if (Array.isArray(obj)) {
// obj signal pair
const [o, s = "changed"] = obj;
o.connect(s, set);
} else {
// obj on changed
obj.connect("changed", set);
}
}
} else {
// watch single object
const signal = typeof sigOrFn === "string" ? sigOrFn : "changed";
objs.connect(signal, set);
}
return v.bind();
}