diff options
Diffstat (limited to 'daemon/gdm-greeter-server.c')
-rw-r--r-- | daemon/gdm-greeter-server.c | 134 |
1 files changed, 110 insertions, 24 deletions
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c index 287b3daf..c7501dbb 100644 --- a/daemon/gdm-greeter-server.c +++ b/daemon/gdm-greeter-server.c @@ -44,6 +44,7 @@ #include <dbus/dbus-glib-lowlevel.h> #include "gdm-common.h" +#include "gdm-marshal.h" #include "gdm-greeter-server.h" #define GDM_GREETER_SERVER_DBUS_PATH "/org/gnome/DisplayManager/GreeterServer" @@ -156,6 +157,46 @@ send_dbus_string_and_int_signal (GdmGreeterServer *greeter_server, } static void +send_dbus_string_string_signal (GdmGreeterServer *greeter_server, + const char *name, + const char *text1, + const char *text2) +{ + DBusMessage *message; + DBusMessageIter iter; + const char *str; + + g_return_if_fail (greeter_server != NULL); + + message = dbus_message_new_signal (GDM_GREETER_SERVER_DBUS_PATH, + GDM_GREETER_SERVER_DBUS_INTERFACE, + name); + + dbus_message_iter_init_append (message, &iter); + + if (text1 != NULL) { + str = text1; + } else { + str = ""; + } + dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &str); + + if (text2 != NULL) { + str = text2; + } else { + str = ""; + } + dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &str); + + g_debug ("GreeterServer: Sending %s (%s)", name, str); + if (! send_dbus_message (greeter_server->priv->greeter_connection, message)) { + g_debug ("GreeterServer: Could not send %s signal", name); + } + + dbus_message_unref (message); +} + +static void send_dbus_string_signal (GdmGreeterServer *greeter_server, const char *name, const char *text) @@ -208,34 +249,38 @@ send_dbus_void_signal (GdmGreeterServer *greeter_server, gboolean gdm_greeter_server_info_query (GdmGreeterServer *greeter_server, + const char *service_name, const char *text) { - send_dbus_string_signal (greeter_server, "InfoQuery", text); + send_dbus_string_string_signal (greeter_server, "InfoQuery", service_name, text); return TRUE; } gboolean gdm_greeter_server_secret_info_query (GdmGreeterServer *greeter_server, + const char *service_name, const char *text) { - send_dbus_string_signal (greeter_server, "SecretInfoQuery", text); + send_dbus_string_string_signal (greeter_server, "SecretInfoQuery", service_name, text); return TRUE; } gboolean gdm_greeter_server_info (GdmGreeterServer *greeter_server, + const char *service_name, const char *text) { - send_dbus_string_signal (greeter_server, "Info", text); + send_dbus_string_string_signal (greeter_server, "Info", service_name, text); return TRUE; } gboolean gdm_greeter_server_problem (GdmGreeterServer *greeter_server, + const char *service_name, const char *text) { - send_dbus_string_signal (greeter_server, "Problem", text); + send_dbus_string_string_signal (greeter_server, "Problem", service_name, text); return TRUE; } @@ -261,6 +306,14 @@ gdm_greeter_server_ready (GdmGreeterServer *greeter_server, return TRUE; } +gboolean +gdm_greeter_server_conversation_stopped (GdmGreeterServer *greeter_server, + const char *service_name) +{ + send_dbus_string_signal (greeter_server, "ConversationStopped", service_name); + return TRUE; +} + void gdm_greeter_server_selected_user_changed (GdmGreeterServer *greeter_server, const char *username) @@ -291,9 +344,10 @@ gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server, } void -gdm_greeter_server_session_opened (GdmGreeterServer *greeter_server) +gdm_greeter_server_session_opened (GdmGreeterServer *greeter_server, + const char *service_name) { - send_dbus_void_signal (greeter_server, "SessionOpened"); + send_dbus_string_signal (greeter_server, "SessionOpened", service_name); } /* Note: Use abstract sockets like dbus does by default on Linux. Abstract @@ -358,6 +412,16 @@ handle_begin_verification (GdmGreeterServer *greeter_server, DBusMessage *message) { DBusMessage *reply; + DBusError error; + const 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 ("GreeterServer: BeginVerification"); @@ -365,7 +429,7 @@ handle_begin_verification (GdmGreeterServer *greeter_server, dbus_connection_send (connection, reply, NULL); dbus_message_unref (reply); - g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION], 0); + g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION], 0, service_name); return DBUS_HANDLER_RESULT_HANDLED; } @@ -379,7 +443,6 @@ handle_begin_auto_login (GdmGreeterServer *greeter_server, DBusError error; const char *text; - dbus_error_init (&error); if (! dbus_message_get_args (message, &error, DBUS_TYPE_STRING, &text, @@ -406,13 +469,16 @@ handle_begin_verification_for_user (GdmGreeterServer *greeter_server, DBusMessage *reply; DBusError error; const char *text; + const char *service_name; dbus_error_init (&error); if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &service_name, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID)) { g_warning ("ERROR: %s", error.message); } + dbus_error_free (&error); g_debug ("GreeterServer: BeginVerificationForUser for '%s'", text); @@ -420,7 +486,7 @@ handle_begin_verification_for_user (GdmGreeterServer *greeter_server, dbus_connection_send (connection, reply, NULL); dbus_message_unref (reply); - g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION_FOR_USER], 0, text); + g_signal_emit (greeter_server, signals [BEGIN_VERIFICATION_FOR_USER], 0, service_name, text); return DBUS_HANDLER_RESULT_HANDLED; } @@ -433,13 +499,16 @@ handle_answer_query (GdmGreeterServer *greeter_server, DBusMessage *reply; DBusError error; const char *text; + const char *service_name; dbus_error_init (&error); if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &service_name, DBUS_TYPE_STRING, &text, DBUS_TYPE_INVALID)) { g_warning ("ERROR: %s", error.message); } + dbus_error_free (&error); g_debug ("GreeterServer: AnswerQuery"); @@ -447,7 +516,7 @@ handle_answer_query (GdmGreeterServer *greeter_server, dbus_connection_send (connection, reply, NULL); dbus_message_unref (reply); - g_signal_emit (greeter_server, signals [QUERY_ANSWER], 0, text); + g_signal_emit (greeter_server, signals [QUERY_ANSWER], 0, service_name, text); return DBUS_HANDLER_RESULT_HANDLED; } @@ -617,9 +686,11 @@ handle_start_session_when_ready (GdmGreeterServer *greeter_server, DBusMessage *reply; DBusError error; gboolean should_start_session; + char *service_name; dbus_error_init (&error); if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &service_name, DBUS_TYPE_BOOLEAN, &should_start_session, DBUS_TYPE_INVALID)) { g_warning ("ERROR: %s", error.message); @@ -633,9 +704,9 @@ handle_start_session_when_ready (GdmGreeterServer *greeter_server, dbus_message_unref (reply); if (should_start_session) { - g_signal_emit (greeter_server, signals [START_SESSION_WHEN_READY], 0); + g_signal_emit (greeter_server, signals [START_SESSION_WHEN_READY], 0, service_name); } else { - g_signal_emit (greeter_server, signals [START_SESSION_LATER] ,0); + g_signal_emit (greeter_server, signals [START_SESSION_LATER] ,0, service_name); } return DBUS_HANDLER_RESULT_HANDLED; @@ -705,14 +776,20 @@ do_introspect (DBusConnection *connection, " <method name=\"StartConversation\">\n" " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " </method>\n" + " <method name=\"StopConversation\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" + " </method>\n" " <method name=\"BeginVerification\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " </method>\n" " <method name=\"BeginTimedLogin\">\n" " </method>\n" " <method name=\"BeginVerificationForUser\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"username\" direction=\"in\" type=\"s\"/>\n" " </method>\n" " <method name=\"AnswerQuery\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"text\" direction=\"in\" type=\"s\"/>\n" " </method>\n" " <method name=\"SelectSession\">\n" @@ -735,18 +812,23 @@ do_introspect (DBusConnection *connection, " <arg name=\"id\" direction=\"out\" type=\"o\"/>\n" " </method>\n" " <method name=\"StartSessionWhenReady\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"should_start_session\" type=\"b\"/>\n" " </method>\n" " <signal name=\"Info\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"text\" type=\"s\"/>\n" " </signal>\n" " <signal name=\"Problem\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"text\" type=\"s\"/>\n" " </signal>\n" " <signal name=\"InfoQuery\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"text\" type=\"s\"/>\n" " </signal>\n" " <signal name=\"SecretInfoQuery\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " <arg name=\"text\" type=\"s\"/>\n" " </signal>\n" " <signal name=\"SelectedUserChanged\">\n" @@ -765,11 +847,15 @@ do_introspect (DBusConnection *connection, " <signal name=\"Ready\">\n" " <arg name=\"service-name\" type=\"s\"/>\n" " </signal>\n" + " <signal name=\"ConversationStopped\">\n" + " <arg name=\"service-name\" type=\"s\"/>\n" + " </signal>\n" " <signal name=\"Reset\">\n" " </signal>\n" " <signal name=\"AuthenticationFailed\">\n" " </signal>\n" " <signal name=\"SessionOpened\">\n" + " <arg name=\"service_name\" direction=\"in\" type=\"s\"/>\n" " </signal>\n" " </interface>\n"); @@ -1145,9 +1231,9 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_STRUCT_OFFSET (GdmGreeterServerClass, begin_verification), NULL, NULL, - g_cclosure_marshal_VOID__VOID, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, - 0); + 1, G_TYPE_STRING); signals [BEGIN_AUTO_LOGIN] = g_signal_new ("begin-auto-login", G_OBJECT_CLASS_TYPE (object_class), @@ -1166,10 +1252,10 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_STRUCT_OFFSET (GdmGreeterServerClass, begin_verification_for_user), NULL, NULL, - g_cclosure_marshal_VOID__STRING, + gdm_marshal_VOID__STRING_STRING, G_TYPE_NONE, - 1, - G_TYPE_STRING); + 2, + G_TYPE_STRING, G_TYPE_STRING); signals [QUERY_ANSWER] = g_signal_new ("query-answer", G_OBJECT_CLASS_TYPE (object_class), @@ -1177,10 +1263,10 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_STRUCT_OFFSET (GdmGreeterServerClass, query_answer), NULL, NULL, - g_cclosure_marshal_VOID__STRING, + gdm_marshal_VOID__STRING_STRING, G_TYPE_NONE, - 1, - G_TYPE_STRING); + 2, + G_TYPE_STRING, G_TYPE_STRING); signals [SESSION_SELECTED] = g_signal_new ("session-selected", G_OBJECT_CLASS_TYPE (object_class), @@ -1263,9 +1349,9 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_STRUCT_OFFSET (GdmGreeterServerClass, start_session_when_ready), NULL, NULL, - g_cclosure_marshal_VOID__VOID, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, - 0); + 1, G_TYPE_STRING); signals [START_SESSION_LATER] = g_signal_new ("start-session-later", @@ -1274,9 +1360,9 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_STRUCT_OFFSET (GdmGreeterServerClass, start_session_later), NULL, NULL, - g_cclosure_marshal_VOID__VOID, + g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, - 0); + 1, G_TYPE_STRING); } static void |