gdm r5968 - in trunk: . daemon gui/simple-greeter
- From: halfline svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r5968 - in trunk: . daemon gui/simple-greeter
- Date: Sun, 9 Mar 2008 21:27:33 +0000 (GMT)
Author: halfline
Date: Sun Mar 9 21:27:33 2008
New Revision: 5968
URL: http://svn.gnome.org/viewvc/gdm?rev=5968&view=rev
Log:
2008-03-09 Ray Strode <rstrode redhat com>
* daemon/gdm-simple-slave.c:
(GdmSimpleSlavePrivate),
(gdm_simple_slave_accredit_when_ready),
(on_start_session_when_ready),
(on_start_session_later),
(setup_server):
* daemon/gdm-greeter-server.[ch]:
(handle_start_session_when_ready):
(greeter_handle_child_message):
(do_introspect):
(gdm_greeter_server_class_init):
* gui/simple-greeter/gdm-greeter-client.[ch]:
(gdm_greeter_client_call_start_session_when_ready):
After successfully verifying the user, wait until
the greeter gives the go ahead before starting the
user's session
Modified:
trunk/ChangeLog
trunk/daemon/gdm-greeter-server.c
trunk/daemon/gdm-greeter-server.h
trunk/daemon/gdm-simple-slave.c
trunk/gui/simple-greeter/gdm-greeter-client.c
trunk/gui/simple-greeter/gdm-greeter-client.h
Modified: trunk/daemon/gdm-greeter-server.c
==============================================================================
--- trunk/daemon/gdm-greeter-server.c (original)
+++ trunk/daemon/gdm-greeter-server.c Sun Mar 9 21:27:33 2008
@@ -80,6 +80,8 @@
CANCELLED,
CONNECTED,
DISCONNECTED,
+ START_SESSION_WHEN_READY,
+ START_SESSION_LATER,
LAST_SIGNAL
};
@@ -546,6 +548,38 @@
}
static DBusHandlerResult
+handle_start_session_when_ready (GdmGreeterServer *greeter_server,
+ DBusConnection *connection,
+ DBusMessage *message)
+{
+ DBusMessage *reply;
+ DBusError error;
+ gboolean should_start_session;
+
+ dbus_error_init (&error);
+ if (! dbus_message_get_args (message, &error,
+ DBUS_TYPE_BOOLEAN, &should_start_session,
+ DBUS_TYPE_INVALID)) {
+ g_warning ("ERROR: %s", error.message);
+ }
+
+ g_debug ("GreeterServer: %sStartSessionWhenReady",
+ should_start_session? "" : "Don't ");
+
+ reply = dbus_message_new_method_return (message);
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
+
+ if (should_start_session) {
+ g_signal_emit (greeter_server, signals [START_SESSION_WHEN_READY], 0);
+ } else {
+ g_signal_emit (greeter_server, signals [START_SESSION_LATER] ,0);
+ }
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static DBusHandlerResult
greeter_handle_child_message (DBusConnection *connection,
DBusMessage *message,
void *user_data)
@@ -574,6 +608,8 @@
return handle_disconnect (greeter_server, connection, message);
} else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "GetDisplayId")) {
return handle_get_display_id (greeter_server, connection, message);
+ } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "StartSessionWhenReady")) {
+ return handle_start_session_when_ready (greeter_server, connection, message);
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -630,6 +666,9 @@
" <method name=\"GetDisplayId\">\n"
" <arg name=\"id\" direction=\"out\" type=\"o\"/>\n"
" </method>\n"
+ " <method name=\"StartSessionWhenReady\">\n"
+ " <arg name=\"should_start_session\" type=\"b\"/>\n"
+ " </method>\n"
" <signal name=\"Info\">\n"
" <arg name=\"text\" type=\"s\"/>\n"
" </signal>\n"
@@ -1128,6 +1167,28 @@
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
+
+ signals [START_SESSION_WHEN_READY] =
+ g_signal_new ("start-session-when-ready",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmGreeterServerClass, start_session_when_ready),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ signals [START_SESSION_LATER] =
+ g_signal_new ("start-session-later",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmGreeterServerClass, start_session_later),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
}
static void
Modified: trunk/daemon/gdm-greeter-server.h
==============================================================================
--- trunk/daemon/gdm-greeter-server.h (original)
+++ trunk/daemon/gdm-greeter-server.h Sun Mar 9 21:27:33 2008
@@ -62,6 +62,8 @@
void (* cancelled) (GdmGreeterServer *greeter_server);
void (* connected) (GdmGreeterServer *greeter_server);
void (* disconnected) (GdmGreeterServer *greeter_server);
+ void (* start_session_when_ready) (GdmGreeterServer *greeter_server);
+ void (* start_session_later) (GdmGreeterServer *greeter_server);
} GdmGreeterServerClass;
GType gdm_greeter_server_get_type (void);
Modified: trunk/daemon/gdm-simple-slave.c
==============================================================================
--- trunk/daemon/gdm-simple-slave.c (original)
+++ trunk/daemon/gdm-simple-slave.c Sun Mar 9 21:27:33 2008
@@ -77,6 +77,9 @@
GdmGreeterServer *greeter_server;
GdmGreeterSession *greeter;
GdmSessionDirect *session;
+
+ guint start_session_when_ready : 1;
+ guint waiting_to_start_session : 1;
};
enum {
@@ -204,14 +207,21 @@
}
static void
+gdm_simple_slave_accredit_when_ready (GdmSimpleSlave *slave)
+{
+ if (slave->priv->start_session_when_ready) {
+ gdm_session_accredit (GDM_SESSION (slave->priv->session),
+ GDM_SESSION_CRED_ESTABLISH);
+ } else {
+ slave->priv->waiting_to_start_session = TRUE;
+ }
+}
+
+static void
on_session_authorized (GdmSession *session,
GdmSimpleSlave *slave)
{
- int flag;
-
- flag = GDM_SESSION_CRED_ESTABLISH;
-
- gdm_session_accredit (session, flag);
+ gdm_simple_slave_accredit_when_ready (slave);
}
static void
@@ -676,6 +686,28 @@
}
static void
+on_start_session_when_ready (GdmGreeterServer *session,
+ GdmSimpleSlave *slave)
+{
+ g_debug ("GdmSimpleSlave: Will start session when ready");
+ slave->priv->start_session_when_ready = TRUE;
+
+ if (slave->priv->waiting_to_start_session) {
+ gdm_simple_slave_accredit_when_ready (slave);
+ }
+}
+
+static void
+on_start_session_later (GdmGreeterServer *session,
+ GdmSimpleSlave *slave)
+{
+ g_debug ("GdmSimpleSlave: Will start session when ready and told");
+ slave->priv->start_session_when_ready = FALSE;
+}
+
+
+
+static void
setup_server (GdmSimpleSlave *slave)
{
/* Set the busy cursor */
@@ -765,6 +797,16 @@
"cancelled",
G_CALLBACK (on_greeter_cancel),
slave);
+ g_signal_connect (slave->priv->greeter_server,
+ "start-session-when-ready",
+ G_CALLBACK (on_start_session_when_ready),
+ slave);
+
+ g_signal_connect (slave->priv->greeter_server,
+ "start-session-later",
+ G_CALLBACK (on_start_session_later),
+ slave);
+
gdm_greeter_server_start (slave->priv->greeter_server);
address = gdm_greeter_server_get_address (slave->priv->greeter_server);
Modified: trunk/gui/simple-greeter/gdm-greeter-client.c
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-client.c (original)
+++ trunk/gui/simple-greeter/gdm-greeter-client.c Sun Mar 9 21:27:33 2008
@@ -398,6 +398,15 @@
}
void
+gdm_greeter_client_call_start_session_when_ready (GdmGreeterClient *client,
+ gboolean should_start_session)
+{
+ send_dbus_bool_method (client->priv->connection,
+ "StartSessionWhenReady",
+ should_start_session);
+}
+
+void
gdm_greeter_client_call_select_session (GdmGreeterClient *client,
const char *text)
{
Modified: trunk/gui/simple-greeter/gdm-greeter-client.h
==============================================================================
--- trunk/gui/simple-greeter/gdm-greeter-client.h (original)
+++ trunk/gui/simple-greeter/gdm-greeter-client.h Sun Mar 9 21:27:33 2008
@@ -102,6 +102,9 @@
void gdm_greeter_client_call_answer_query (GdmGreeterClient *client,
const char *text);
+void gdm_greeter_client_call_start_session_when_ready (GdmGreeterClient *client,
+ gboolean should_start_session);
+
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]