summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/guide/getting-started/installation.md4
-rw-r--r--docs/guide/libraries/apps.md4
-rw-r--r--docs/guide/libraries/battery.md4
-rw-r--r--docs/guide/libraries/bluetooth.md4
-rw-r--r--docs/guide/libraries/greet.md4
-rw-r--r--docs/guide/libraries/hyprland.md4
-rw-r--r--docs/guide/libraries/mpris.md4
-rw-r--r--docs/guide/libraries/network.md4
-rw-r--r--docs/guide/libraries/notifd.md4
-rw-r--r--docs/guide/libraries/powerprofiles.md4
-rw-r--r--docs/guide/libraries/wireplumber.md2
-rw-r--r--examples/js/simple-bar/widget/Bar.tsx18
-rw-r--r--examples/lua/simple-bar/widget/Bar.lua22
-rw-r--r--examples/py/simple-bar/widget/Bar.py5
-rw-r--r--examples/vala/simple-bar/widget/Bar.vala8
-rw-r--r--lang/gjs/src/binding.ts2
-rw-r--r--lib/astal/io/process.vala76
-rw-r--r--lib/cava/cava.c4
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:
*