X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fsystemadm.vala;h=3a01efd3c386c0f7ebb5e7f5fddee45db5214639;hp=3610e2b8f42a31ff8fa8fb199341a2db0a6c7c3f;hb=7838dc3ae1297d37c2a75a48f429bb415c1eed22;hpb=d3d91d10c9ca3782c5936c630e87730e3bf9c32d diff --git a/src/systemadm.vala b/src/systemadm.vala index 3610e2b8f..3a01efd3c 100644 --- a/src/systemadm.vala +++ b/src/systemadm.vala @@ -22,7 +22,7 @@ using GLib; using DBus; using Pango; -static bool session = false; +static bool user = false; public class LeftLabel : Label { public LeftLabel(string? text = null) { @@ -103,7 +103,7 @@ public class MainWindow : Window { private ComboBox unit_type_combo_box; public MainWindow() throws DBus.Error { - title = session ? "systemd Session Manager" : "systemd System Manager"; + title = user ? "systemd User Service Manager" : "systemd System Manager"; position = WindowPosition.CENTER; set_default_size(1000, 700); set_border_width(12); @@ -297,7 +297,7 @@ public class MainWindow : Window { bbox.pack_start(cancel_button, false, true, 0); - bus = DBus.Bus.get(session ? DBus.BusType.SESSION : DBus.BusType.SYSTEM); + bus = DBus.Bus.get(user ? DBus.BusType.SESSION : DBus.BusType.SYSTEM); manager = bus.get_object( "org.freedesktop.systemd1", @@ -325,13 +325,19 @@ public class MainWindow : Window { foreach (var i in list) { TreeIter iter; + Properties p = bus.get_object( + "org.freedesktop.systemd1", + i.unit_path, + "org.freedesktop.DBus.Properties") as Properties; + + + p.properties_changed.connect(on_unit_changed); + Unit u = bus.get_object( "org.freedesktop.systemd1", i.unit_path, "org.freedesktop.systemd1.Unit") as Unit; - u.changed.connect(on_unit_changed); - unit_model.append(out iter); unit_model.set(iter, 0, i.id, @@ -352,13 +358,18 @@ public class MainWindow : Window { foreach (var i in list) { TreeIter iter; + Properties p = bus.get_object( + "org.freedesktop.systemd1", + i.job_path, + "org.freedesktop.DBus.Properties") as Properties; + + p.properties_changed.connect(on_job_changed); + Job j = bus.get_object( "org.freedesktop.systemd1", i.job_path, "org.freedesktop.systemd1.Job") as Job; - j.changed.connect(on_job_changed); - job_model.append(out iter); job_model.set(iter, 0, "%u".printf(i.id), @@ -672,15 +683,21 @@ public class MainWindow : Window { } public void on_unit_new(string id, ObjectPath path) { - Unit u = bus.get_object( + Properties p = bus.get_object( "org.freedesktop.systemd1", path, - "org.freedesktop.systemd1.Unit") as Unit; + "org.freedesktop.DBus.Properties") as Properties; - u.changed.connect(on_unit_changed); + p.properties_changed.connect(on_unit_changed); TreeIter iter; unit_model.append(out iter); + + Unit u = bus.get_object( + "org.freedesktop.systemd1", + path, + "org.freedesktop.systemd1.Unit") as Unit; + update_unit_iter(iter, id, u); } @@ -695,15 +712,22 @@ public class MainWindow : Window { } public void on_job_new(uint32 id, ObjectPath path) { - Job j = bus.get_object( + + Properties p = bus.get_object( "org.freedesktop.systemd1", path, - "org.freedesktop.systemd1.Job") as Job; + "org.freedesktop.DBus.Properties") as Properties; - j.changed.connect(on_job_changed); + p.properties_changed.connect(on_job_changed); TreeIter iter; job_model.append(out iter); + + Job j = bus.get_object( + "org.freedesktop.systemd1", + path, + "org.freedesktop.systemd1.Job") as Job; + update_job_iter(iter, id, j); } @@ -750,10 +774,15 @@ public class MainWindow : Window { } while (job_model.iter_next(ref iter)); } - public void on_unit_changed(Unit u) { + public void on_unit_changed(Properties p, string iface, HashTable changed_properties, string[] invalidated_properties) { TreeIter iter; string id; + Unit u = bus.get_object( + p.get_bus_name(), + p.get_path(), + "org.freedesktop.systemd1.Unit") as Unit; + if (!(unit_model.get_iter_first(out iter))) return; @@ -776,10 +805,15 @@ public class MainWindow : Window { } while (unit_model.iter_next(ref iter)); } - public void on_job_changed(Job j) { + public void on_job_changed(Properties p, string iface, HashTable changed_properties, string[] invalidated_properties) { TreeIter iter; uint32 id; + Job j = bus.get_object( + p.get_bus_name(), + p.get_path(), + "org.freedesktop.systemd1.Job") as Job; + if (!(job_model.get_iter_first(out iter))) return; @@ -933,8 +967,8 @@ public class MainWindow : Window { } static const OptionEntry entries[] = { - { "session", 0, 0, OptionArg.NONE, out session, "Connect to session bus", null }, - { "system", 0, OptionFlags.REVERSE, OptionArg.NONE, out session, "Connect to system bus", null }, + { "user", 0, 0, OptionArg.NONE, out user, "Connect to user service manager", null }, + { "system", 0, OptionFlags.REVERSE, OptionArg.NONE, out user, "Connect to system manager", null }, { null } }; @@ -944,7 +978,7 @@ void show_error(string e) { m.destroy(); } -int main (string[] args) { +int main(string[] args) { try { Gtk.init_with_args(ref args, "[OPTION...]", entries, "systemadm");