diff options
Diffstat (limited to 'daemon/gdm-session-relay.c')
-rw-r--r-- | daemon/gdm-session-relay.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/daemon/gdm-session-relay.c b/daemon/gdm-session-relay.c index 6e15f75f..3bf8ed70 100644 --- a/daemon/gdm-session-relay.c +++ b/daemon/gdm-session-relay.c @@ -247,6 +247,14 @@ gdm_session_relay_accredit (GdmSession *session, } static void +gdm_session_relay_open_session (GdmSession *session, + const char *service_name) +{ + GdmSessionRelay *impl = GDM_SESSION_RELAY (session); + send_dbus_string_signal (impl, "OpenSession", service_name); +} + +static void gdm_session_relay_answer_query (GdmSession *session, const char *service_name, const char *text) @@ -678,6 +686,61 @@ handle_accreditation_failed (GdmSessionRelay *session_relay, return DBUS_HANDLER_RESULT_HANDLED; } +static DBusHandlerResult +handle_session_opened (GdmSessionRelay *session_relay, + DBusConnection *connection, + DBusMessage *message) +{ + DBusMessage *reply; + DBusError error; + char *service_name; + + dbus_error_init (&error); + if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &service_name, + DBUS_TYPE_INVALID)) { + g_warning ("ERROR: %s", error.message); + } + dbus_error_free (&error); + + g_debug ("GdmSessionRelay: Session Opened"); + + reply = dbus_message_new_method_return (message); + dbus_connection_send (connection, reply, NULL); + dbus_message_unref (reply); + + _gdm_session_session_opened (GDM_SESSION (session_relay), service_name); + + return DBUS_HANDLER_RESULT_HANDLED; +} + +static DBusHandlerResult +handle_session_open_failed (GdmSessionRelay *session_relay, + DBusConnection *connection, + DBusMessage *message) +{ + DBusMessage *reply; + DBusError error; + char *service_name; + + dbus_error_init (&error); + if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &service_name, + DBUS_TYPE_INVALID)) { + g_warning ("ERROR: %s", error.message); + } + dbus_error_free (&error); + + g_debug ("GdmSessionRelay: Session Open Failed"); + + reply = dbus_message_new_method_return (message); + dbus_connection_send (connection, reply, NULL); + dbus_message_unref (reply); + + _gdm_session_session_open_failed (GDM_SESSION (session_relay), service_name, NULL); + + return DBUS_HANDLER_RESULT_HANDLED; +} static DBusHandlerResult handle_session_started (GdmSessionRelay *session_relay, @@ -794,6 +857,10 @@ session_handle_child_message (DBusConnection *connection, return handle_accredited (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "AccreditationFailed")) { return handle_accreditation_failed (session_relay, connection, message); + } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionOpened")) { + return handle_session_opened (session_relay, connection, message); + } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionOpenFailed")) { + return handle_session_open_failed (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionStarted")) { return handle_session_started (session_relay, connection, message); } else if (dbus_message_is_method_call (message, GDM_SESSION_RELAY_DBUS_INTERFACE, "SessionStopped")) { @@ -1193,6 +1260,7 @@ gdm_session_iface_init (GdmSessionIface *iface) iface->authenticate = gdm_session_relay_authenticate; iface->authorize = gdm_session_relay_authorize; iface->accredit = gdm_session_relay_accredit; + iface->open_session = gdm_session_relay_open_session; iface->close = gdm_session_relay_close; iface->cancel = gdm_session_relay_cancel; |