summaryrefslogtreecommitdiff
path: root/src/ck-manager.c
diff options
context:
space:
mode:
authorEric Koegel <eric.koegel@gmail.com>2016-02-14 21:23:21 +0300
committerEric Koegel <eric.koegel@gmail.com>2016-02-14 21:27:11 +0300
commit033782190153e5e933c65455b9ab7877d79b617f (patch)
treee3818daf2b3f01c33b25f1cfb32ce59056535497 /src/ck-manager.c
parenta97550bbb4e0f32ce94591ae55eb7f99fe7740bb (diff)
downloadConsoleKit2-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.c30
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);