diff options
author | Jesús González <jgonzalez@gdr-sistemas.com> | 2015-01-05 21:36:36 +0100 |
---|---|---|
committer | Jesús González <jgonzalez@gdr-sistemas.com> | 2015-01-05 21:36:36 +0100 |
commit | 850aad05441d414e9bdc9cd80cd8e8bca8bede2b (patch) | |
tree | 417cbac6626b1508f057201a54985f30cf455250 /src | |
parent | a8ecb0045b165026df4e93e6d5b008584c3d6cac (diff) | |
parent | 1cc32b242f69372a3e24c956a8d5f974927791f7 (diff) | |
download | lightdm-850aad05441d414e9bdc9cd80cd8e8bca8bede2b.tar.gz |
Merged changes from parent branch
Diffstat (limited to 'src')
-rw-r--r-- | src/lightdm.c | 26 | ||||
-rw-r--r-- | src/login1.c | 16 | ||||
-rw-r--r-- | src/login1.h | 2 | ||||
-rw-r--r-- | src/session-child.c | 8 |
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); } |