summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesús González <jgonzalez@gdr-sistemas.com>2015-01-05 21:36:36 +0100
committerJesús González <jgonzalez@gdr-sistemas.com>2015-01-05 21:36:36 +0100
commit850aad05441d414e9bdc9cd80cd8e8bca8bede2b (patch)
tree417cbac6626b1508f057201a54985f30cf455250 /src
parenta8ecb0045b165026df4e93e6d5b008584c3d6cac (diff)
parent1cc32b242f69372a3e24c956a8d5f974927791f7 (diff)
downloadlightdm-850aad05441d414e9bdc9cd80cd8e8bca8bede2b.tar.gz
Merged changes from parent branch
Diffstat (limited to 'src')
-rw-r--r--src/lightdm.c26
-rw-r--r--src/login1.c16
-rw-r--r--src/login1.h2
-rw-r--r--src/session-child.c8
4 files changed, 42 insertions, 10 deletions
diff --git a/src/lightdm.c b/src/lightdm.c
index fdebd682..48a44ab5 100644
--- a/src/lightdm.c
+++ b/src/lightdm.c
@@ -1078,6 +1078,23 @@ login1_can_graphical_changed_cb (Login1Seat *login1_seat)
}
static void
+login1_active_session_changed_cb (Login1Seat *login1_seat, const gchar *login1_session_id)
+{
+ g_debug ("Seat %s changes active session to %s", login1_seat_get_id (login1_seat), login1_session_id);
+}
+
+static gboolean
+login1_add_seat (Login1Seat *login1_seat)
+{
+ if (config_get_boolean (config_get_instance (), "LightDM", "logind-check-graphical"))
+ g_signal_connect (login1_seat, "can-graphical-changed", G_CALLBACK (login1_can_graphical_changed_cb), NULL);
+
+ g_signal_connect (login1_seat, LOGIN1_SIGNAL_ACTIVE_SESION_CHANGED, G_CALLBACK (login1_active_session_changed_cb), NULL);
+
+ return update_login1_seat (login1_seat);
+}
+
+static void
login1_service_seat_added_cb (Login1Service *service, Login1Seat *login1_seat)
{
if (login1_seat_get_can_graphical (login1_seat))
@@ -1085,9 +1102,7 @@ login1_service_seat_added_cb (Login1Service *service, Login1Seat *login1_seat)
else
g_debug ("Seat %s added from logind without graphical output", login1_seat_get_id (login1_seat));
- if (config_get_boolean (config_get_instance (), "LightDM", "logind-check-graphical"))
- g_signal_connect (login1_seat, LOGIN1_SEAT_SIGNAL_CAN_GRAPHICAL_CHANGED, G_CALLBACK (login1_can_graphical_changed_cb), NULL);
- update_login1_seat (login1_seat);
+ login1_add_seat (login1_seat);
}
static void
@@ -1095,6 +1110,7 @@ login1_service_seat_removed_cb (Login1Service *service, Login1Seat *login1_seat)
{
g_debug ("Seat %s removed from logind", login1_seat_get_id (login1_seat));
g_signal_handlers_disconnect_matched (login1_seat, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, login1_can_graphical_changed_cb, NULL);
+ g_signal_handlers_disconnect_matched (login1_seat, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, login1_active_session_changed_cb, NULL);
remove_login1_seat (login1_seat);
}
@@ -1442,9 +1458,7 @@ main (int argc, char **argv)
for (link = login1_service_get_seats (login1_service_get_instance ()); link; link = link->next)
{
Login1Seat *login1_seat = link->data;
- if (config_get_boolean (config_get_instance (), "LightDM", "logind-check-graphical"))
- g_signal_connect (login1_seat, LOGIN1_SEAT_SIGNAL_CAN_GRAPHICAL_CHANGED, G_CALLBACK (login1_can_graphical_changed_cb), NULL);
- if (!update_login1_seat (login1_seat))
+ if (!login1_add_seat (login1_seat))
return EXIT_FAILURE;
}
}
diff --git a/src/login1.c b/src/login1.c
index 83d64b6e..8e8340de 100644
--- a/src/login1.c
+++ b/src/login1.c
@@ -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);
}
diff --git a/src/login1.h b/src/login1.h
index c266e23d..e34e806b 100644
--- a/src/login1.h
+++ b/src/login1.h
@@ -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;
diff --git a/src/session-child.c b/src/session-child.c
index c6f8a7ce..535aab9a 100644
--- a/src/session-child.c
+++ b/src/session-child.c
@@ -243,7 +243,7 @@ session_child_run (int argc, char **argv)
XAuthority *x_authority = NULL;
gchar *x_authority_filename;
GDBusConnection *bus;
- const gchar *login1_session = NULL;
+ const gchar *login1_session_id = NULL;
gchar *console_kit_cookie = NULL;
const gchar *locale_value;
gchar *locale_var;
@@ -545,10 +545,10 @@ session_child_run (int argc, char **argv)
}
/* Check what logind session we are, or fallback to ConsoleKit */
- login1_session = pam_getenv (pam_handle, "XDG_SESSION_ID");
- if (login1_session)
+ login1_session_id = pam_getenv (pam_handle, "XDG_SESSION_ID");
+ if (login1_session_id)
{
- write_string (login1_session);
+ write_string (login1_session_id);
if (version >= 2)
write_string (NULL);
}