mirror of
https://github.com/xsghetti/HyprCrux.git
synced 2025-07-03 13:50:38 -04:00
67 lines
1.8 KiB
JavaScript
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();
|
|
}
|