diff options
author | Eric Koegel <eric.koegel@gmail.com> | 2016-02-14 21:23:21 +0300 |
---|---|---|
committer | Eric Koegel <eric.koegel@gmail.com> | 2016-02-14 21:27:11 +0300 |
commit | 033782190153e5e933c65455b9ab7877d79b617f (patch) | |
tree | e3818daf2b3f01c33b25f1cfb32ce59056535497 /src/ck-manager.c | |
parent | a97550bbb4e0f32ce94591ae55eb7f99fe7740bb (diff) | |
download | ConsoleKit2-033782190153e5e933c65455b9ab7877d79b617f.tar.gz |
Add a 'Seats' section to the CK database
This way applications can know which seats are available and can
easily walk the list to gather whatever information they need.
The section will be something like
[Seats]
seats=/org/freedesktop/ConsoleKit/Seat1 /org/freedesktop/ConsoleKit/Seat2
Diffstat (limited to 'src/ck-manager.c')
-rw-r--r-- | src/ck-manager.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ck-manager.c b/src/ck-manager.c index a72d5a1..1dbb52a 100644 --- a/src/ck-manager.c +++ b/src/ck-manager.c @@ -141,6 +141,27 @@ static gpointer manager_object = NULL; G_DEFINE_TYPE_WITH_CODE (CkManager, ck_manager, CONSOLE_KIT_TYPE_MANAGER_SKELETON, G_IMPLEMENT_INTERFACE (CONSOLE_KIT_TYPE_MANAGER, ck_manager_iface_init)); static void +dump_manager_seat_iter (char *id, + CkSeat *seat, + GString *str) +{ + char *seat_id; + GError *error; + + error = NULL; + if (! ck_seat_get_id (seat, &seat_id, &error)) { + g_warning ("Cannot get seat id from manager: %s", error->message); + g_error_free (error); + } else { + if (str->len > 0) { + g_string_append_c (str, ' '); + } + g_string_append (str, seat_id); + g_free (seat_id); + } +} + +static void dump_state_seat_iter (char *id, CkSeat *seat, GKeyFile *key_file) @@ -169,7 +190,9 @@ do_dump (CkManager *manager, int fd) { char *str; + char *s; gsize str_len; + GString *seats_string; GKeyFile *key_file; GError *error; gboolean ret; @@ -180,6 +203,13 @@ do_dump (CkManager *manager, key_file = g_key_file_new (); + /* Create the [seats] section listing all the seats */ + seats_string = g_string_new (NULL); + g_hash_table_foreach (manager->priv->seats, (GHFunc) dump_manager_seat_iter, seats_string); + s = g_string_free (seats_string, FALSE); + g_key_file_set_string (key_file, "Seats", "seats", s); + g_free (s); + g_hash_table_foreach (manager->priv->seats, (GHFunc) dump_state_seat_iter, key_file); g_hash_table_foreach (manager->priv->sessions, (GHFunc) dump_state_session_iter, key_file); g_hash_table_foreach (manager->priv->leaders, (GHFunc) dump_state_leader_iter, key_file); |