diff options
-rw-r--r-- | docs/guide/getting-started/installation.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/apps.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/battery.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/bluetooth.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/greet.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/hyprland.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/mpris.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/network.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/notifd.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/powerprofiles.md | 4 | ||||
-rw-r--r-- | docs/guide/libraries/wireplumber.md | 2 | ||||
-rw-r--r-- | examples/js/simple-bar/widget/Bar.tsx | 18 | ||||
-rw-r--r-- | examples/lua/simple-bar/widget/Bar.lua | 22 | ||||
-rw-r--r-- | examples/py/simple-bar/widget/Bar.py | 5 | ||||
-rw-r--r-- | examples/vala/simple-bar/widget/Bar.vala | 8 | ||||
-rw-r--r-- | lang/gjs/src/binding.ts | 2 | ||||
-rw-r--r-- | lib/astal/io/process.vala | 76 | ||||
-rw-r--r-- | lib/cava/cava.c | 4 |
18 files changed, 112 insertions, 65 deletions
diff --git a/docs/guide/getting-started/installation.md b/docs/guide/getting-started/installation.md index a942315..cc81d1e 100644 --- a/docs/guide/getting-started/installation.md +++ b/docs/guide/getting-started/installation.md @@ -29,7 +29,7 @@ Read more about it on the [nix page](./nix#astal) :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala gtk3 gtk-layer-shell gobject-introspection +sudo pacman -Syu meson vala valadoc gtk3 gtk-layer-shell gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -37,7 +37,7 @@ sudo dnf install meson vala valadoc gtk3-devel gtk-layer-shell-devel gobject-int ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libgtk-3-dev libgtk-layer-shell-dev gobject-introspection libgirepository1.0-dev +sudo apt install meson valac valadoc libgtk-3-dev libgtk-layer-shell-dev gobject-introspection libgirepository1.0-dev ``` ::: diff --git a/docs/guide/libraries/apps.md b/docs/guide/libraries/apps.md index f1748db..4dba9ba 100644 --- a/docs/guide/libraries/apps.md +++ b/docs/guide/libraries/apps.md @@ -80,7 +80,7 @@ foreach (var app in apps.fuzzy_query("firefox")) { :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -88,7 +88,7 @@ sudo dnf install meson vala valadoc json-glib-devel gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/battery.md b/docs/guide/libraries/battery.md index 7e6fe24..0a06532 100644 --- a/docs/guide/libraries/battery.md +++ b/docs/guide/libraries/battery.md @@ -53,7 +53,7 @@ print(battery.percentage) :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -61,7 +61,7 @@ sudo dnf install meson vala valadoc json-glib-devel gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/bluetooth.md b/docs/guide/libraries/bluetooth.md index 9a3e5b8..e1e7508 100644 --- a/docs/guide/libraries/bluetooth.md +++ b/docs/guide/libraries/bluetooth.md @@ -60,7 +60,7 @@ end :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala gobject-introspection +sudo pacman -Syu meson vala valadoc gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -68,7 +68,7 @@ sudo dnf install meson vala valadoc gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac gobject-introspection +sudo apt install meson valac valadoc gobject-introspection ``` ::: diff --git a/docs/guide/libraries/greet.md b/docs/guide/libraries/greet.md index 47f98b9..9c2f1b7 100644 --- a/docs/guide/libraries/greet.md +++ b/docs/guide/libraries/greet.md @@ -61,7 +61,7 @@ try { :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -69,7 +69,7 @@ sudo dnf install meson vala valadoc json-glib-devel gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/hyprland.md b/docs/guide/libraries/hyprland.md index 82d9e9d..5eefa2e 100644 --- a/docs/guide/libraries/hyprland.md +++ b/docs/guide/libraries/hyprland.md @@ -58,7 +58,7 @@ end :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -66,7 +66,7 @@ sudo dnf install meson vala valadoc json-glib-devel gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/mpris.md b/docs/guide/libraries/mpris.md index c2283cc..768bb45 100644 --- a/docs/guide/libraries/mpris.md +++ b/docs/guide/libraries/mpris.md @@ -61,7 +61,7 @@ end :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala gvfs json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc gvfs json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -69,7 +69,7 @@ sudo dnf install meson vala valadoc gvfs json-glib-devel gobject-introspection-d ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac gvfs libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc gvfs libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/network.md b/docs/guide/libraries/network.md index 79a217c..0d9d6a8 100644 --- a/docs/guide/libraries/network.md +++ b/docs/guide/libraries/network.md @@ -55,7 +55,7 @@ print(network.wifi.ssid) :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala libnm gobject-introspection +sudo pacman -Syu meson vala valadoc libnm gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -63,7 +63,7 @@ sudo dnf install meson vala valadoc NetworkManager-libnm-devel gobject-introspec ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libnm-dev gobject-introspection +sudo apt install meson valac valadoc libnm-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/notifd.md b/docs/guide/libraries/notifd.md index 1d61099..4112f94 100644 --- a/docs/guide/libraries/notifd.md +++ b/docs/guide/libraries/notifd.md @@ -67,7 +67,7 @@ end :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala gdk-pixbuf2 json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc gdk-pixbuf2 json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -75,7 +75,7 @@ sudo dnf install meson vala valadoc gdk-pixbuf2-devel json-glib-devel gobject-in ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libgdk-pixbuf-2.0-dev libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libgdk-pixbuf-2.0-dev libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/powerprofiles.md b/docs/guide/libraries/powerprofiles.md index b42d7c6..a9e7559 100644 --- a/docs/guide/libraries/powerprofiles.md +++ b/docs/guide/libraries/powerprofiles.md @@ -53,7 +53,7 @@ print(powerprofiles.active_profile) :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala json-glib gobject-introspection +sudo pacman -Syu meson vala valadoc json-glib gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] @@ -61,7 +61,7 @@ sudo dnf install meson vala valadoc json-glib-devel gobject-introspection-devel ``` ```sh [<i class="devicon-ubuntu-plain"></i> Ubuntu] -sudo apt install meson valac libjson-glib-dev gobject-introspection +sudo apt install meson valac valadoc libjson-glib-dev gobject-introspection ``` ::: diff --git a/docs/guide/libraries/wireplumber.md b/docs/guide/libraries/wireplumber.md index d6faea1..b3dbf6d 100644 --- a/docs/guide/libraries/wireplumber.md +++ b/docs/guide/libraries/wireplumber.md @@ -55,7 +55,7 @@ print(audio.default_speaker.volume) :::code-group ```sh [<i class="devicon-archlinux-plain"></i> Arch] -sudo pacman -Syu meson vala wireplumber gobject-introspection +sudo pacman -Syu meson vala valadoc wireplumber gobject-introspection ``` ```sh [<i class="devicon-fedora-plain"></i> Fedora] diff --git a/examples/js/simple-bar/widget/Bar.tsx b/examples/js/simple-bar/widget/Bar.tsx index c109aec..b08ea27 100644 --- a/examples/js/simple-bar/widget/Bar.tsx +++ b/examples/js/simple-bar/widget/Bar.tsx @@ -25,13 +25,19 @@ function SysTray() { } function Wifi() { - const { wifi } = Network.get_default() + const network = Network.get_default() + const wifi = bind(network, "wifi") + + return <box visible={wifi.as(Boolean)}> + {wifi.as(wifi => wifi && ( + <icon + tooltipText={bind(wifi, "ssid").as(String)} + className="Wifi" + icon={bind(wifi, "iconName")} + /> + ))} + </box> - return <icon - tooltipText={bind(wifi, "ssid").as(String)} - className="Wifi" - icon={bind(wifi, "iconName")} - /> } function AudioSlider() { diff --git a/examples/lua/simple-bar/widget/Bar.lua b/examples/lua/simple-bar/widget/Bar.lua index e0d8b20..155b9b8 100644 --- a/examples/lua/simple-bar/widget/Bar.lua +++ b/examples/lua/simple-bar/widget/Bar.lua @@ -15,7 +15,7 @@ local function SysTray() local tray = Tray.get_default() return Widget.Box({ - class_name = "SysTray", + class_name = "SysTray", bind(tray, "items"):as(function(items) return map(items, function(item) return Widget.MenuButton({ @@ -50,12 +50,20 @@ local function FocusedClient() end local function Wifi() - local wifi = Network.get_default().wifi + local network = Network.get_default() + local wifi = bind(network, "wifi") - return Widget.Icon({ - tooltip_text = bind(wifi, "ssid"):as(tostring), - class_name = "Wifi", - icon = bind(wifi, "icon-name"), + return Widget.Box({ + visible = wifi:as(function(v) + return v ~= nil + end), + wifi:as(function(w) + return Widget.Icon({ + tooltip_text = bind(w, "ssid"):as(tostring), + class_name = "Wifi", + icon = bind(w, "icon-name"), + }) + end), }) end @@ -179,7 +187,7 @@ return function(gdkmonitor) }), Widget.Box({ halign = "END", - SysTray(), + SysTray(), Wifi(), AudioSlider(), BatteryLevel(), diff --git a/examples/py/simple-bar/widget/Bar.py b/examples/py/simple-bar/widget/Bar.py index c6902b4..c2fa9e0 100644 --- a/examples/py/simple-bar/widget/Bar.py +++ b/examples/py/simple-bar/widget/Bar.py @@ -147,8 +147,9 @@ class Wifi(Astal.Icon): super().__init__() Astal.widget_set_class_names(self, ["Wifi"]) wifi = Network.get_default().get_wifi() - wifi.bind_property("ssid", self, "tooltip-text", SYNC) - wifi.bind_property("icon-name", self, "icon", SYNC) + if wifi: + wifi.bind_property("ssid", self, "tooltip-text", SYNC) + wifi.bind_property("icon-name", self, "icon", SYNC) class AudioSlider(Gtk.Box): diff --git a/examples/vala/simple-bar/widget/Bar.vala b/examples/vala/simple-bar/widget/Bar.vala index 295a3b7..28b32ef 100644 --- a/examples/vala/simple-bar/widget/Bar.vala +++ b/examples/vala/simple-bar/widget/Bar.vala @@ -143,9 +143,11 @@ class SysTray : Gtk.Box { class Wifi : Astal.Icon { public Wifi() { Astal.widget_set_class_names(this, {"Wifi"}); - var wifi = AstalNetwork.get_default().wifi; - wifi.bind_property("ssid", this, "tooltip-text", BindingFlags.SYNC_CREATE); - wifi.bind_property("icon-name", this, "icon", BindingFlags.SYNC_CREATE); + var wifi = AstalNetwork.get_default().get_wifi(); + if (wifi != null) { + wifi.bind_property("ssid", this, "tooltip-text", BindingFlags.SYNC_CREATE); + wifi.bind_property("icon-name", this, "icon", BindingFlags.SYNC_CREATE); + } } } diff --git a/lang/gjs/src/binding.ts b/lang/gjs/src/binding.ts index 19a55cf..616c53b 100644 --- a/lang/gjs/src/binding.ts +++ b/lang/gjs/src/binding.ts @@ -46,7 +46,7 @@ export class Binding<Value> { return `Binding<${this.#emitter}${this.#prop ? `, "${this.#prop}"` : ""}>` } - as<T>(fn: (v: Value) => T | Binding<T>): Binding<T> { + as<T>(fn: (v: Value) => T): Binding<T> { const bind = new Binding(this.#emitter, this.#prop) bind.transformFn = (v: Value) => fn(this.transformFn(v)) return bind as unknown as Binding<T> diff --git a/lib/astal/io/process.vala b/lib/astal/io/process.vala index 4b77aee..53e1bce 100644 --- a/lib/astal/io/process.vala +++ b/lib/astal/io/process.vala @@ -2,20 +2,22 @@ * `Process` provides shortcuts for [[email protected]] with sane defaults. */ public class AstalIO.Process : Object { + public string[] argv { construct; get; } + private void read_stream(DataInputStream stream, bool err) { stream.read_line_utf8_async.begin(Priority.DEFAULT, null, (_, res) => { try { var output = stream.read_line_utf8_async.end(res); if (output != null) { - if (err) + if (err) { stdout(output.strip()); - else + } else { stderr(output.strip()); - + } read_stream(stream, err); } } catch (Error err) { - printerr("%s\n", err.message); + critical(err.message); } }); } @@ -24,20 +26,27 @@ public class AstalIO.Process : Object { private DataInputStream err_stream; private DataOutputStream in_stream; private Subprocess process; - public string[] argv { construct; get; } + /** + * When the underlying subprocess writes to its stdout. + * + * @param out Line written to stdout + */ + public signal void stdout(string out); /** - * When the underlying subprocess writes to its stdout - * this signal is emitted with that line. + * When the underlying subprocess writes to its stderr. + * + * @param err Line written to stderr */ - public signal void stdout (string out); + public signal void stderr(string err); /** - * When the underlying subprocess writes to its stderr - * this signal is emitted with that line. + * When the underlying subprocess exits or is terminated. + * + * @param code Exit code or signal number if terminated */ - public signal void stderr (string err); + public signal void exit(int code, bool terminated); /** * Force quit the subprocess. @@ -48,6 +57,8 @@ public class AstalIO.Process : Object { /** * Send a signal to the subprocess. + * + * @param signal_num Signal number to be sent */ public void signal(int signal_num) { process.send_signal(signal_num); @@ -55,6 +66,8 @@ public class AstalIO.Process : Object { /** * Write a line to the subprocess' stdin synchronously. + *What is the issue + * @param in String to be written to stdin */ public void write(string in) throws Error { in_stream.put_string(in); @@ -62,6 +75,8 @@ public class AstalIO.Process : Object { /** * Write a line to the subprocess' stdin asynchronously. + * + * @param in String to be written to stdin */ public async void write_async(string in) { try { @@ -71,23 +86,38 @@ public class AstalIO.Process : Object { } } - /** - * Start a new subprocess with the given command. - * - * The first element of the vector is executed with the remaining elements as the argument list. - */ + /** See [[email protected]] */ public Process(string[] cmd) throws Error { Object(argv: cmd); - process = new Subprocess.newv(cmd, + process = new Subprocess.newv( + cmd, SubprocessFlags.STDIN_PIPE | SubprocessFlags.STDERR_PIPE | SubprocessFlags.STDOUT_PIPE ); + out_stream = new DataInputStream(process.get_stdout_pipe()); err_stream = new DataInputStream(process.get_stderr_pipe()); in_stream = new DataOutputStream(process.get_stdin_pipe()); + read_stream(out_stream, true); read_stream(err_stream, false); + + process.wait_async.begin(null, (_, res) => { + try { + process.wait_async.end(res); + } catch (Error err) { + // ignore + } + + if (process.get_if_exited()) { + exit(process.get_exit_status(), false); + } + + if (process.get_if_signaled()) { + exit(process.get_term_sig(), true); + } + }); } /** @@ -125,11 +155,11 @@ public class AstalIO.Process : Object { string err_str, out_str; process.communicate_utf8(null, null, out out_str, out err_str); var success = process.get_successful(); - process.dispose(); - if (success) + if (success) { return out_str.strip(); - else + } else { throw new IOError.FAILED(err_str.strip()); + } } /** @@ -160,11 +190,11 @@ public class AstalIO.Process : Object { string err_str, out_str; yield process.communicate_utf8_async(null, null, out out_str, out err_str); var success = process.get_successful(); - process.dispose(); - if (success) + if (success) { return out_str.strip(); - else + } else { throw new IOError.FAILED(err_str.strip()); + } } /** diff --git a/lib/cava/cava.c b/lib/cava/cava.c index 1c5ef66..2934335 100644 --- a/lib/cava/cava.c +++ b/lib/cava/cava.c @@ -440,7 +440,7 @@ static void astal_cava_cava_get_property(GObject* object, guint property_id, GVa g_value_set_int(value, self->bars); break; case ASTAL_CAVA_CAVA_PROP_VALUES: - g_value_set_pointer(value, self->values); + g_value_set_boxed(value, self->values); break; case ASTAL_CAVA_CAVA_PROP_AUTOSENS: g_value_set_boolean(value, self->autosens); @@ -558,7 +558,7 @@ static void astal_cava_cava_class_init(AstalCavaCavaClass* class) { * be 0. */ astal_cava_cava_properties[ASTAL_CAVA_CAVA_PROP_VALUES] = - g_param_spec_pointer("values", "values", "a list of values", G_PARAM_READABLE); + g_param_spec_boxed("values", "values", "a list of values", G_TYPE_ARRAY, G_PARAM_READABLE); /** * AstalCavaCava:active: * |