]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Detect active session changes from logind (currently not connected to anything)
authorJesús González <jgonzalez@gdr-sistemas.com>
Thu, 11 Dec 2014 23:37:15 +0000 (12:37 +1300)
committerRobert Ancell <robert.ancell@canonical.com>
Thu, 11 Dec 2014 23:37:15 +0000 (12:37 +1300)
src/login1.c
src/login1.h

index 83d64b6ef3705425ebb76a9aaf6a8d3e3f8d1c05..8e8340de3a27e54df02d6fcdbecb8ebec7be837a 100644 (file)
@@ -43,6 +43,7 @@ struct Login1ServicePrivate
 
 enum {
     CAN_GRAPHICAL_CHANGED,
+    ACTIVE_SESSION_CHANGED,
     LAST_SEAT_SIGNAL
 };
 static guint seat_signals[LAST_SEAT_SIGNAL] = { 0 };
@@ -89,6 +90,12 @@ update_property (Login1Seat *seat, const gchar *name, GVariant *value)
         seat->priv->can_graphical = g_variant_get_boolean (value);
         g_signal_emit (seat, seat_signals[CAN_GRAPHICAL_CHANGED], 0);
     }
+    else if (strcmp (name, "ActiveSession") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE ("(so)")))
+    {
+        const gchar *login1_session_id;
+        g_variant_get (value, "(&so)", &login1_session_id, NULL);
+        g_signal_emit (seat, seat_signals[ACTIVE_SESSION_CHANGED], 0, login1_session_id);
+    }
 }
 
 static void
@@ -531,4 +538,13 @@ login1_seat_class_init (Login1SeatClass *klass)
                       NULL, NULL,
                       NULL,
                       G_TYPE_NONE, 0);
+
+    seat_signals[ACTIVE_SESSION_CHANGED] =
+        g_signal_new (LOGIN1_SIGNAL_ACTIVE_SESION_CHANGED,
+                      G_TYPE_FROM_CLASS (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (Login1SeatClass, active_session_changed),
+                      NULL, NULL,
+                      NULL,
+                      G_TYPE_NONE, 1, G_TYPE_STRING);
 }
index c266e23ddcb35c261e72f72fd398f3e1122d053e..e34e806bcffd4927387a195fc550714ffa38dc59 100644 (file)
@@ -26,6 +26,7 @@ G_BEGIN_DECLS
 #define LOGIN1_SERVICE_SIGNAL_SEAT_REMOVED "seat-removed"
 
 #define LOGIN1_SEAT_SIGNAL_CAN_GRAPHICAL_CHANGED "can-graphical-changed"
+#define LOGIN1_SIGNAL_ACTIVE_SESION_CHANGED "active-session-changed"
 
 typedef struct Login1SeatPrivate Login1SeatPrivate;
 
@@ -39,6 +40,7 @@ typedef struct
 {
     GObjectClass parent_class;
     void (*can_graphical_changed)(Login1Seat *seat);
+    void (*active_session_changed)(Login1Seat *seat, const gchar *login1_session_id);
 } Login1SeatClass;
 
 typedef struct Login1ServicePrivate Login1ServicePrivate;