summaryrefslogtreecommitdiff
path: root/lang/gjs/src
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-12-19 21:32:48 +0100
committerAylur <[email protected]>2024-12-19 21:32:48 +0100
commit61637d6333bd812021763039ceea61e7f7d29dbf (patch)
treebebdc24df1d5d0a9c7bf2c2f98376c1be341ee80 /lang/gjs/src
parent64150c7739049e3cc9b6b931eba58a635cbc24df (diff)
parentc12fb05408c1cd1b1bca545fec636abda52f6755 (diff)
Merge branch 'main' into feat/tray-gtk4
Diffstat (limited to 'lang/gjs/src')
-rw-r--r--lang/gjs/src/_app.ts1
-rw-r--r--lang/gjs/src/gobject.ts2
-rw-r--r--lang/gjs/src/gtk3/jsx-runtime.ts3
-rw-r--r--lang/gjs/src/index.ts1
-rw-r--r--lang/gjs/src/overrides.ts84
5 files changed, 89 insertions, 2 deletions
diff --git a/lang/gjs/src/_app.ts b/lang/gjs/src/_app.ts
index 82e8bb5..3dadd04 100644
--- a/lang/gjs/src/_app.ts
+++ b/lang/gjs/src/_app.ts
@@ -1,3 +1,4 @@
+import "./overrides.js"
import { setConsoleLogDomain } from "console"
import { exit, programArgs } from "system"
import IO from "gi://AstalIO"
diff --git a/lang/gjs/src/gobject.ts b/lang/gjs/src/gobject.ts
index b744cfb..6bd9969 100644
--- a/lang/gjs/src/gobject.ts
+++ b/lang/gjs/src/gobject.ts
@@ -178,7 +178,7 @@ function defaultValue(declaration: PropertyDeclaration) {
switch (declaration) {
case String:
- return "default-string"
+ return ""
case Number:
return 0
case Boolean:
diff --git a/lang/gjs/src/gtk3/jsx-runtime.ts b/lang/gjs/src/gtk3/jsx-runtime.ts
index 10b3bcf..19a3b7d 100644
--- a/lang/gjs/src/gtk3/jsx-runtime.ts
+++ b/lang/gjs/src/gtk3/jsx-runtime.ts
@@ -10,7 +10,8 @@ export function Fragment({ children = [], child }: {
child?: BindableChild
children?: Array<BindableChild>
}) {
- return mergeBindings([...children, child])
+ if (child) children.push(child)
+ return mergeBindings(children)
}
export function jsx(
diff --git a/lang/gjs/src/index.ts b/lang/gjs/src/index.ts
index cabc961..8fe8d01 100644
--- a/lang/gjs/src/index.ts
+++ b/lang/gjs/src/index.ts
@@ -1,3 +1,4 @@
+import "./overrides.js"
export { default as AstalIO } from "gi://AstalIO?version=0.1"
export * from "./process.js"
export * from "./time.js"
diff --git a/lang/gjs/src/overrides.ts b/lang/gjs/src/overrides.ts
new file mode 100644
index 0000000..0d09e7b
--- /dev/null
+++ b/lang/gjs/src/overrides.ts
@@ -0,0 +1,84 @@
+/**
+ * Workaround for "Can't convert non-null pointer to JS value "
+ */
+
+export { }
+
+const snakeify = (str: string) => str
+ .replace(/([a-z])([A-Z])/g, "$1_$2")
+ .replaceAll("-", "_")
+ .toLowerCase()
+
+async function suppress<T>(mod: Promise<{ default: T }>, patch: (m: T) => void) {
+ return mod.then(m => patch(m.default)).catch(() => void 0)
+}
+
+function patch<P extends object>(proto: P, prop: Extract<keyof P, string>) {
+ Object.defineProperty(proto, prop, {
+ get() { return this[`get_${snakeify(prop)}`]() },
+ })
+}
+
+await suppress(import("gi://AstalApps"), ({ Apps, Application }) => {
+ patch(Apps.prototype, "list")
+ patch(Application.prototype, "keywords")
+ patch(Application.prototype, "categories")
+})
+
+await suppress(import("gi://AstalBattery"), ({ UPower }) => {
+ patch(UPower.prototype, "devices")
+})
+
+await suppress(import("gi://AstalBluetooth"), ({ Adapter, Bluetooth, Device }) => {
+ patch(Adapter.prototype, "uuids")
+ patch(Bluetooth.prototype, "adapters")
+ patch(Bluetooth.prototype, "devices")
+ patch(Device.prototype, "uuids")
+})
+
+await suppress(import("gi://AstalHyprland"), ({ Hyprland, Monitor, Workspace }) => {
+ patch(Hyprland.prototype, "monitors")
+ patch(Hyprland.prototype, "workspaces")
+ patch(Hyprland.prototype, "clients")
+ patch(Monitor.prototype, "availableModes")
+ patch(Monitor.prototype, "available_modes")
+ patch(Workspace.prototype, "clients")
+})
+
+await suppress(import("gi://AstalMpris"), ({ Mpris, Player }) => {
+ patch(Mpris.prototype, "players")
+ patch(Player.prototype, "supported_uri_schemes")
+ patch(Player.prototype, "supportedUriSchemes")
+ patch(Player.prototype, "supported_mime_types")
+ patch(Player.prototype, "supportedMimeTypes")
+ patch(Player.prototype, "comments")
+})
+
+await suppress(import("gi://AstalNetwork"), ({ Wifi }) => {
+ patch(Wifi.prototype, "access_points")
+ patch(Wifi.prototype, "accessPoints")
+})
+
+await suppress(import("gi://AstalNotifd"), ({ Notifd, Notification }) => {
+ patch(Notifd.prototype, "notifications")
+ patch(Notification.prototype, "actions")
+})
+
+await suppress(import("gi://AstalPowerProfiles"), ({ PowerProfiles }) => {
+ patch(PowerProfiles.prototype, "actions")
+})
+
+await suppress(import("gi://AstalWp"), ({ Wp, Audio, Video }) => {
+ patch(Wp.prototype, "endpoints")
+ patch(Wp.prototype, "devices")
+ patch(Audio.prototype, "streams")
+ patch(Audio.prototype, "recorders")
+ patch(Audio.prototype, "microphones")
+ patch(Audio.prototype, "speakers")
+ patch(Audio.prototype, "devices")
+ patch(Video.prototype, "streams")
+ patch(Video.prototype, "recorders")
+ patch(Video.prototype, "sinks")
+ patch(Video.prototype, "sources")
+ patch(Video.prototype, "devices")
+})