DOC_MODULE=ldmgreeter
-DOC_SOURCE_DIR=$(top_srcdir)/libldmgreeter
-
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+DOC_SOURCE_DIR=$(top_srcdir)/libldmgreeter
+
HFILE_GLOB=$(top_srcdir)/libldmgreeter/*.h
CFILE_GLOB=$(top_srcdir)/libldmgreeter/*.c
-I$(top_srcdir)/libldmgreeter
GTKDOC_LIBS = \
- $(LIBLDMGREETER_LIBS) \
- -L$(top_builddir)/libldmgreeter \
- -lldmgreeter
+ $(top_builddir)/libldmgreeter/libldmgreeter.la
+
+MKDB_OPTIONS=--sgml-mode --output-format=xml --name-space=ldm
include $(top_srcdir)/gtk-doc.make
-DISTCLEANFILES = $(DOC_MODULE)-docs.xml $(DOC_MODULE)-overrides.txt $(DOC_MODULE)-sections.txt $(DOC_MODULE).types
+DISTCLEANFILES = Makefile.in $(DOC_MODULE)-docs.xml $(DOC_MODULE)-overrides.txt $(DOC_MODULE).types
</bookinfo>
<part id="core">
- <title>Gnome Scan Core Reference</title>
+ <title>LightDM Greeter Core Reference</title>
<xi:include href="xml/greeter.xml"/>
+ <xi:include href="xml/session.xml"/>
+ <xi:include href="xml/user.xml"/>
</part>
</book>
--- /dev/null
+<SECTION>
+<FILE>user</FILE>
+<TITLE>LdmUser</TITLE>
+LdmUser
+ldm_user_get_name
+ldm_user_get_real_name
+ldm_user_get_display_name
+ldm_user_get_image
+ldm_user_get_logged_in
+<SUBSECTION Standard>
+LDM_USER
+LDM_IS_USER
+LDM_TYPE_USER
+ldm_user_get_type
+LDM_USER_CLASS
+LDM_IS_USER_CLASS
+LDM_USER_GET_CLASS
+<SUBSECTION Private>
+LdmUserPrivate
+ldm_user_new
+</SECTION>
+
+<SECTION>
+<FILE>session</FILE>
+<TITLE>LdmSession</TITLE>
+LdmSession
+ldm_session_get_key
+ldm_session_get_name
+ldm_session_get_comment
+<SUBSECTION Standard>
+LDM_SESSION
+LDM_IS_SESSION
+LDM_TYPE_SESSION
+ldm_session_get_type
+LDM_SESSION_CLASS
+LDM_IS_SESSION_CLASS
+LDM_SESSION_GET_CLASS
+<SUBSECTION Private>
+LdmSessionPrivate
+ldm_session_new
+</SECTION>
+
+<SECTION>
+<FILE>greeter</FILE>
+<TITLE>LdmGreeter</TITLE>
+LdmGreeter
+ldm_greeter_new
+ldm_greeter_connect
+ldm_greeter_get_num_users
+ldm_greeter_get_users
+ldm_greeter_get_sessions
+ldm_greeter_get_session
+ldm_greeter_set_session
+ldm_greeter_get_timed_login_user
+ldm_greeter_get_timed_login_delay
+ldm_greeter_cancel_timed_login
+ldm_greeter_start_authentication
+ldm_greeter_provide_secret
+ldm_greeter_cancel_authentication
+ldm_greeter_get_is_authenticated
+ldm_greeter_get_can_suspend
+ldm_greeter_suspend
+ldm_greeter_get_can_hibernate
+ldm_greeter_hibernate
+ldm_greeter_get_can_restart
+ldm_greeter_restart
+ldm_greeter_get_can_shutdown
+ldm_greeter_shutdown
+<SUBSECTION Standard>
+LDM_GREETER
+LDM_IS_GREETER
+LDM_TYPE_GREETER
+ldm_greeter_get_type
+LDM_GREETER_CLASS
+LDM_IS_GREETER_CLASS
+LDM_GREETER_GET_CLASS
+<SUBSECTION Private>
+LdmGreeterPrivate
+LdmGreeterClass
+</SECTION>
--- /dev/null
+<!-- ##### SECTION Title ##### -->
+LdmGreeter
+
+<!-- ##### SECTION Short_Description ##### -->
+LightDM greeter object
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+#LdmGreeter is an object that manages the connection to the LightDM server and provides common greeter functionality.
+</para>
+<para>
+To connect to the display manager instanciate a #LdmGreeter object from inside the greeter process:
+<example>
+<title>Connecting to the display manager</title>
+<programlisting><![CDATA[
+LdmGreeter *greeter = ldm_greeter_new ();
+if (!ldm_greeter_connect (LDM_GREETER (greeter))) {
+ // Log an error
+ exit (0);
+}
+]]></programlisting>
+</example>
+Information on how to connect to the display manager is passed using environment variables.
+</para>
+<para>
+Once connected, start an authentication conversation like this:
+<example>
+<title>Example Authorization Conversation</title>
+<programlisting><![CDATA[
+static void show_prompt_cb (LdmGreeter *greeter, const char *text)
+{
+ // Show the user the message and prompt for some response
+ gchar *secret = ask_user_question (text);
+
+ // Give the result to the user
+ ldm_greeter_provide_secret (greeter, secret);
+}
+
+static void authentication_complete_cb (LdmGreeter *greeter)
+{
+ if (ldm_greeter_get_is_authenticated (greeter)) {
+ // Log in to this session.
+ ldm_greeter_login (greeter);
+ }
+ else {
+ // Display a warning and reset the greeter
+ }
+}
+
+static void quit_cb (LdmGreeter *greeter)
+{
+ // Clean up
+ // ...
+
+ exit (0);
+}
+
+g_object_connect (G_OBJECT (greeter), "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
+g_object_connect (G_OBJECT (greeter), "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
+g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
+]]></programlisting>
+</example>
+</para>
+
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT LdmGreeter ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### SIGNAL LdmGreeter::authentication-complete ##### -->
+<para>
+
+</para>
+
+@ldmgreeter: the object which received the signal.
+
+<!-- ##### SIGNAL LdmGreeter::show-error ##### -->
+<para>
+
+</para>
+
+@ldmgreeter: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL LdmGreeter::show-message ##### -->
+<para>
+
+</para>
+
+@ldmgreeter: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL LdmGreeter::show-prompt ##### -->
+<para>
+
+</para>
+
+@ldmgreeter: the object which received the signal.
+@arg1:
+
+<!-- ##### SIGNAL LdmGreeter::timed-login ##### -->
+<para>
+
+</para>
+
+@ldmgreeter: the object which received the signal.
+@arg1:
+
+<!-- ##### ARG LdmGreeter:can-hibernate ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:can-restart ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:can-shutdown ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:can-suspend ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:is-authenticated ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:login-delay ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:num-users ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:session ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmGreeter:timed-login-user ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION ldm_greeter_new ##### -->
+<para>
+
+</para>
+
+@void:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_connect ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_num_users ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_users ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_sessions ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_session ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_set_session ##### -->
+<para>
+
+</para>
+
+@greeter:
+@session:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_timed_login_user ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_timed_login_delay ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_cancel_timed_login ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
+<!-- ##### FUNCTION ldm_greeter_start_authentication ##### -->
+<para>
+
+</para>
+
+@greeter:
+@username:
+
+
+<!-- ##### FUNCTION ldm_greeter_provide_secret ##### -->
+<para>
+
+</para>
+
+@greeter:
+@secret:
+
+
+<!-- ##### FUNCTION ldm_greeter_cancel_authentication ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_is_authenticated ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_can_suspend ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_suspend ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_can_hibernate ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_hibernate ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_can_restart ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_restart ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
+<!-- ##### FUNCTION ldm_greeter_get_can_shutdown ##### -->
+<para>
+
+</para>
+
+@greeter:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_greeter_shutdown ##### -->
+<para>
+
+</para>
+
+@greeter:
+
+
--- /dev/null
+<!-- ##### SECTION Title ##### -->
+LdmSession
+
+<!-- ##### SECTION Short_Description ##### -->
+Information about a session
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Object containing information about available sessions on this system. #LdmSession objects are not created by the user, but provided by the #LdmGreeter object.
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT LdmSession ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG LdmSession:comment ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmSession:key ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmSession:name ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION ldm_session_get_key ##### -->
+<para>
+
+</para>
+
+@session:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_session_get_name ##### -->
+<para>
+
+</para>
+
+@session:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_session_get_comment ##### -->
+<para>
+
+</para>
+
+@session:
+@Returns:
+
+
--- /dev/null
+<!-- ##### SECTION Title ##### -->
+LdmUser
+
+<!-- ##### SECTION Short_Description ##### -->
+Information about a user
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+Object containing information about a user present on this system. #LdmUser objects are not created by the user, but provided by the #LdmGreeter object.
+</para>
+<para>
+A user has the following properties:
+<itemizedlist>
+<listitem>
+ <para>The user name is used to refer to this user.</para>
+</listitem>
+<listitem>
+ <para>The real name is the name of the person that owns this user account.</para>
+</listitem>
+<listitem>
+ <para>The display name provides text to use for the user label.</para>
+</listitem>
+<listitem>
+ <para>The image URI provides an image to use for the user.</para>
+</listitem>
+</itemizedlist>
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### STRUCT LdmUser ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### ARG LdmUser:display-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmUser:image ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmUser:logged-in ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmUser:name ##### -->
+<para>
+
+</para>
+
+<!-- ##### ARG LdmUser:real-name ##### -->
+<para>
+
+</para>
+
+<!-- ##### FUNCTION ldm_user_get_name ##### -->
+<para>
+
+</para>
+
+@user:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_user_get_real_name ##### -->
+<para>
+
+</para>
+
+@user:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_user_get_display_name ##### -->
+<para>
+
+</para>
+
+@user:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_user_get_image ##### -->
+<para>
+
+</para>
+
+@user:
+@Returns:
+
+
+<!-- ##### FUNCTION ldm_user_get_logged_in ##### -->
+<para>
+
+</para>
+
+@user:
+@Returns:
+
+
authentication_complete_cb (LdmGreeter *greeter)
{
if (ldm_greeter_get_is_authenticated (greeter))
- gtk_main_quit ();
-
- gtk_widget_show (label);
- gtk_label_set_text (GTK_LABEL (label), "Failed to authenticate");
- gtk_entry_set_text (GTK_ENTRY (password_entry), "");
- gtk_widget_grab_focus (username_entry);
+ {
+ ldm_greeter_login (greeter);
+ }
+ else
+ {
+ gtk_widget_show (label);
+ gtk_label_set_text (GTK_LABEL (label), "Failed to authenticate");
+ gtk_entry_set_text (GTK_ENTRY (password_entry), "");
+ gtk_widget_grab_focus (username_entry);
+ }
}
static void
timed_login_cb (LdmGreeter *greeter, const gchar *username)
+{
+ ldm_greeter_login (greeter);
+}
+
+static void
+quit_cb (LdmGreeter *greeter, const gchar *username)
{
gtk_main_quit ();
}
g_signal_connect (G_OBJECT (greeter), "show-error", G_CALLBACK (show_message_cb), NULL);
g_signal_connect (G_OBJECT (greeter), "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
g_signal_connect (G_OBJECT (greeter), "timed-login", G_CALLBACK (timed_login_cb), NULL);
+ g_signal_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
ldm_greeter_connect (greeter);
}
static void
-timed_login_cb (LdmGreeter *greeter, const gchar *username)
+timed_login_cb (LdmGreeter *greeter, const gchar *username, WebKitWebView *view)
+{
+ gchar *command;
+
+ command = g_strdup_printf ("timed_login('%s')", username); // FIXME: Escape text
+ webkit_web_view_execute_script (view, command);
+ g_free (command);
+}
+
+static void
+quit_cb (LdmGreeter *greeter, const gchar *username)
{
gtk_main_quit ();
}
}
static JSValueRef
-close_cb (JSContextRef context,
+login_cb (JSContextRef context,
JSObjectRef function,
JSObjectRef thisObject,
size_t argumentCount,
const JSValueRef arguments[],
JSValueRef *exception)
{
+ LdmGreeter *greeter = JSObjectGetPrivate (thisObject);
+
// FIXME: Throw exception
if (argumentCount != 0)
return JSValueMakeNull (context);
- exit (0);
+ ldm_greeter_login (greeter);
+ return JSValueMakeNull (context);
}
static const JSStaticValue ldm_user_values[] =
{ "hibernate", hibernate_cb, kJSPropertyAttributeReadOnly },
{ "restart", restart_cb, kJSPropertyAttributeReadOnly },
{ "shutdown", shutdown_cb, kJSPropertyAttributeReadOnly },
- { "close", close_cb, kJSPropertyAttributeReadOnly },
+ { "login", login_cb, kJSPropertyAttributeReadOnly },
{ NULL, NULL, 0 }
};
g_signal_connect (G_OBJECT (greeter), "show-error", G_CALLBACK (show_message_cb), web_view);
g_signal_connect (G_OBJECT (greeter), "authentication-complete", G_CALLBACK (authentication_complete_cb), web_view);
g_signal_connect (G_OBJECT (greeter), "timed-login", G_CALLBACK (timed_login_cb), web_view);
+ g_signal_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), web_view);
webkit_web_view_load_uri (WEBKIT_WEB_VIEW (web_view), url);
ldm_greeter_connect (greeter);
session.c \
user.c
-libldmgreeterincludedir=$(includedir)/lightdm-1.0
+libldmgreeterincludedir=$(includedir)/lightdm-1.0/lightdm
if HAVE_INTROSPECTION
SHOW_ERROR,
AUTHENTICATION_COMPLETE,
TIMED_LOGIN,
+ QUIT,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
-struct LdmGreeterPrivate
+struct _LdmGreeterPrivate
{
DBusGConnection *lightdm_bus;
/**
* ldm_greeter_get_users:
- * @greeter:
+ * @greeter: A #LdmGreeter
+ *
+ * Get a list of users to present to the user. This list may be a subset of the
+ * available users and may be empty depending on the server configuration.
*
* Return value: A list of #LdmUser that should be presented to the user.
- */
+ **/
const GList *
ldm_greeter_get_users (LdmGreeter *greeter)
{
greeter->priv->have_sessions = TRUE;
}
+/**
+ * ldm_greeter_get_sessions:
+ * @greeter: A #LdmGreeter
+ *
+ * Get the available sessions.
+ *
+ * Return value: A list of #LdmSession
+ **/
const GList *
ldm_greeter_get_sessions (LdmGreeter *greeter)
{
return greeter->priv->sessions;
}
+/**
+ * ldm_greeter_set_session:
+ * @greeter: A #LdmGreeter
+ * @session: A session name.
+ *
+ * Set the session to log into.
+ **/
void
ldm_greeter_set_session (LdmGreeter *greeter, const gchar *session)
{
g_clear_error (&error);
}
+/**
+ * ldm_greeter_get_session:
+ * @greeter: A #LdmGreeter
+ *
+ * Get the session that will be logged into.
+ *
+ * Return value: The session name
+ **/
const gchar *
ldm_greeter_get_session (LdmGreeter *greeter)
{
return greeter->priv->session;
}
+/**
+ * ldm_greeter_get_timed_login_user:
+ * @greeter: A #LdmGreeter
+ *
+ * Get the user to log in by as default.
+ *
+ * Return value: A username
+ */
const gchar *
ldm_greeter_get_timed_login_user (LdmGreeter *greeter)
{
return greeter->priv->timed_user;
}
+/**
+ * ldm_greeter_get_timed_login_delay:
+ * @greeter: A #LdmGreeter
+ *
+ * Get the number of seconds to wait until logging in as the default user.
+ *
+ * Return value: The number of seconds before logging in as the default user
+ */
gint
ldm_greeter_get_timed_login_delay (LdmGreeter *greeter)
{
return greeter->priv->login_delay;
}
+/**
+ * ldm_greeter_cancel_timed_login:
+ * @greeter: A #LdmGreeter
+ *
+ * Cancel the login as the default user.
+ */
void
ldm_greeter_cancel_timed_login (LdmGreeter *greeter)
{
g_ptr_array_unref (array);
}
+/**
+ * ldm_greeter_start_authentication:
+ * @greeter: A #LdmGreeter
+ * @username: A username
+ *
+ * Starts the authentication procedure for a user.
+ **/
void
ldm_greeter_start_authentication (LdmGreeter *greeter, const char *username)
{
dbus_g_proxy_begin_call (greeter->priv->display_proxy, "StartAuthentication", auth_response_cb, greeter, NULL, G_TYPE_STRING, username, G_TYPE_INVALID);
}
+/**
+ * ldm_greeter_provide_secret:
+ * @greeter: A #LdmGreeter
+ * @secret: Response to a prompt
+ *
+ * Provide secret information from a prompt.
+ **/
void
ldm_greeter_provide_secret (LdmGreeter *greeter, const gchar *secret)
{
dbus_g_proxy_begin_call (greeter->priv->display_proxy, "ContinueAuthentication", auth_response_cb, greeter, NULL, G_TYPE_STRV, secrets, G_TYPE_INVALID);
}
+/**
+ * ldm_greeter_cancel_authentication:
+ * @greeter: A #LdmGreeter
+ *
+ * Cancel the current user authentication.
+ **/
void
ldm_greeter_cancel_authentication (LdmGreeter *greeter)
{
}
+/**
+ * ldm_greeter_get_is_authenticated:
+ * @greeter: A #LdmGreeter
+ *
+ * Checks if the greeter has successfully authenticated.
+ *
+ * Return value: TRUE if the greeter is authenticated for login.
+ **/
gboolean
ldm_greeter_get_is_authenticated (LdmGreeter *greeter)
{
return greeter->priv->is_authenticated;
}
+/**
+ * ldm_greeter_login:
+ * @greeter: A #LdmGreeter
+ *
+ * Login with the currently authenticated user.
+ **/
+void
+ldm_greeter_login (LdmGreeter *greeter)
+{
+ /* Quitting the greeter will cause the login to occur */
+ g_signal_emit (G_OBJECT (greeter), signals[QUIT], 0);
+}
+
/**
* ldm_greeter_get_can_suspend:
* @greeter: A #LdmGreeter
+ *
+ * Checks if the greeter is authorized to do a system suspend.
*
- * Return value: TRUE if the greeter can suspend the machine
+ * Return value: TRUE if the greeter can suspend the system
**/
gboolean
ldm_greeter_get_can_suspend (LdmGreeter *greeter)
return result;
}
+/**
+ * ldm_greeter_suspend:
+ * @greeter: A #LdmGreeter
+ *
+ * Triggers a system suspend.
+ **/
void
ldm_greeter_suspend (LdmGreeter *greeter)
{
g_object_unref (proxy);
}
+/**
+ * ldm_greeter_get_can_hibernate:
+ * @greeter: A #LdmGreeter
+ *
+ * Checks if the greeter is authorized to do a system hibernate.
+ *
+ * Return value: TRUE if the greeter can hibernate the system
+ **/
gboolean
ldm_greeter_get_can_hibernate (LdmGreeter *greeter)
{
return result;
}
+/**
+ * ldm_greeter_hibernate:
+ * @greeter: A #LdmGreeter
+ *
+ * Triggers a system hibernate.
+ **/
void
ldm_greeter_hibernate (LdmGreeter *greeter)
{
g_object_unref (proxy);
}
+/**
+ * ldm_greeter_get_can_restart:
+ * @greeter: A #LdmGreeter
+ *
+ * Checks if the greeter is authorized to do a system restart.
+ *
+ * Return value: TRUE if the greeter can restart the system
+ **/
gboolean
ldm_greeter_get_can_restart (LdmGreeter *greeter)
{
return result;
}
+/**
+ * ldm_greeter_restart:
+ * @greeter: A #LdmGreeter
+ *
+ * Triggers a system restart.
+ **/
void
ldm_greeter_restart (LdmGreeter *greeter)
{
g_object_unref (proxy);
}
+/**
+ * ldm_greeter_get_can_shutdown:
+ * @greeter: A #LdmGreeter
+ *
+ * Checks if the greeter is authorized to do a system shutdown.
+ *
+ * Return value: TRUE if the greeter can shutdown the system
+ **/
gboolean
ldm_greeter_get_can_shutdown (LdmGreeter *greeter)
{
return result;
}
+/**
+ * ldm_greeter_shutdown:
+ * @greeter: A #LdmGreeter
+ *
+ * Triggers a system shutdown.
+ **/
void
ldm_greeter_shutdown (LdmGreeter *greeter)
{
PROP_CAN_SUSPEND,
g_param_spec_boolean("can-suspend",
"can-suspend",
- "TRUE if allowed to suspend the machine",
+ "TRUE if allowed to suspend the system",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property(object_class,
PROP_CAN_HIBERNATE,
g_param_spec_boolean("can-hibernate",
"can-hibernate",
- "TRUE if allowed to hibernate the machine",
+ "TRUE if allowed to hibernate the system",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property(object_class,
PROP_CAN_RESTART,
g_param_spec_boolean("can-restart",
"can-restart",
- "TRUE if allowed to restart the machine",
+ "TRUE if allowed to restart the system",
FALSE,
G_PARAM_READABLE));
g_object_class_install_property(object_class,
PROP_CAN_SHUTDOWN,
g_param_spec_boolean("can-shutdown",
"can-shutdown",
- "TRUE if allowed to shutdown the machine",
+ "TRUE if allowed to shutdown the system",
FALSE,
G_PARAM_READABLE));
/**
* LdmGreeter::show-prompt:
- * @greeter: The greeter on which the signal is emitted
- * @text: The text to show in the prompt
+ * @greeter: A #LdmGreeter
+ * @text: Prompt text
*
- * The ::show-prompt signal gets emitted when the greeter
- * should show a prompt to the user.
+ * The ::show-prompt signal gets emitted when the greeter should show a
+ * prompt to the user. The given text should be displayed and an input
+ * field for the user to provide a response.
+ *
+ * Call ldm_greeter_provide_secret() with the resultant input or
+ * ldm_greeter_cancel_authentication() to abort the authentication.
**/
signals[SHOW_PROMPT] =
g_signal_new ("show-prompt",
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ /**
+ * LdmGreeter::show-message:
+ * @greeter: A #LdmGreeter
+ * @text: Message text
+ *
+ * The ::show-message signal gets emitted when the greeter
+ * should show an informational message to the user.
+ **/
signals[SHOW_MESSAGE] =
g_signal_new ("show-message",
G_TYPE_FROM_CLASS (klass),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ /**
+ * LdmGreeter::show-error:
+ * @greeter: A #LdmGreeter
+ * @text: Message text
+ *
+ * The ::show-error signal gets emitted when the greeter
+ * should show an error message to the user.
+ **/
signals[SHOW_ERROR] =
g_signal_new ("show-error",
G_TYPE_FROM_CLASS (klass),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ /**
+ * LdmGreeter::authentication-complete:
+ * @greeter: A #LdmGreeter
+ *
+ * The ::authentication-complete signal gets emitted when the greeter
+ * has completed authentication.
+ *
+ * Call ldm_greeter_get_is_authenticated() to check if the authentication
+ * was successful.
+ **/
signals[AUTHENTICATION_COMPLETE] =
g_signal_new ("authentication-complete",
G_TYPE_FROM_CLASS (klass),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ /**
+ * LdmGreeter::timed-login:
+ * @greeter: A #LdmGreeter
+ * @username: A username
+ *
+ * The ::timed-login signal gets emitted when the default user timer
+ * has expired.
+ **/
signals[TIMED_LOGIN] =
g_signal_new ("timed-login",
G_TYPE_FROM_CLASS (klass),
NULL, NULL,
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ /**
+ * LdmGreeter::quit:
+ * @greeter: A #LdmGreeter
+ *
+ * The ::quit signal gets emitted when the greeter should exit.
+ **/
+ signals[TIMED_LOGIN] =
+ g_signal_new ("timed-login",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LdmGreeterClass, quit),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
#define LDM_IS_GREETER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LDM_TYPE_GREETER))
#define LDM_GREETER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LDM_TYPE_GREETER, LdmGreeterClass))
+typedef struct _LdmGreeter LdmGreeter;
+typedef struct _LdmGreeterClass LdmGreeterClass;
+typedef struct _LdmGreeterPrivate LdmGreeterPrivate;
-/*<private>*/
-typedef struct LdmGreeterPrivate LdmGreeterPrivate;
-
-typedef struct
+struct _LdmGreeter
{
GObject parent_instance;
LdmGreeterPrivate *priv;
-} LdmGreeter;
+};
-typedef struct
+struct _LdmGreeterClass
{
GObjectClass parent_class;
- /*< private >*/
-
void (*show_prompt)(LdmGreeter *greeter, const gchar *text);
void (*show_message)(LdmGreeter *greeter, const gchar *text);
void (*show_error)(LdmGreeter *greeter, const gchar *text);
void (*authentication_complete)(LdmGreeter *greeter);
void (*timed_login)(LdmGreeter *greeter, const gchar *username);
-} LdmGreeterClass;
+ void (*quit)(LdmGreeter *greeter);
+};
GType ldm_greeter_get_type (void);
gboolean ldm_greeter_get_is_authenticated (LdmGreeter *greeter);
+void ldm_greeter_login (LdmGreeter *greeter);
+
gboolean ldm_greeter_get_can_suspend (LdmGreeter *greeter);
void ldm_greeter_suspend (LdmGreeter *greeter);
PROP_COMMENT
};
-struct LdmSessionPrivate
+struct _LdmSessionPrivate
{
gchar *key;
gchar *name;
G_DEFINE_TYPE (LdmSession, ldm_session, G_TYPE_OBJECT);
+/**
+ * ldm_session_new:
+ *
+ * Create a new session.
+ * @key: The unique key for this session
+ * @name: The name of this session
+ * @comment: The comment for this session
+ *
+ * Return value: the new #LdmSession
+ **/
LdmSession *
ldm_session_new (const gchar *key, const gchar *name, const gchar *comment)
{
return g_object_new (LDM_TYPE_SESSION, "key", key, "name", name, "comment", comment, NULL);
}
+/**
+ * ldm_session_get_key
+ * @session: A #LdmSession
+ *
+ * Get the key for a session
+ *
+ * Return value: The session key
+ **/
const gchar *
-ldm_session_get_key (LdmSession *user)
+ldm_session_get_key (LdmSession *session)
{
- return user->priv->key;
+ return session->priv->key;
}
+/**
+ * ldm_session_get_name
+ * @session: A #LdmSession
+ *
+ * Get the name for a session
+ *
+ * Return value: The session name
+ **/
const gchar *
-ldm_session_get_name (LdmSession *user)
+ldm_session_get_name (LdmSession *session)
{
- return user->priv->name;
+ return session->priv->name;
}
+/**
+ * ldm_session_get_comment
+ * @session: A #LdmSession
+ *
+ * Get the comment for a session
+ *
+ * Return value: The session comment
+ **/
const gchar *
-ldm_session_get_comment (LdmSession *user)
+ldm_session_get_comment (LdmSession *session)
{
- return user->priv->comment;
+ return session->priv->comment;
}
static void
-ldm_session_init (LdmSession *user)
+ldm_session_init (LdmSession *session)
{
- user->priv = G_TYPE_INSTANCE_GET_PRIVATE (user, LDM_TYPE_SESSION, LdmSessionPrivate);
+ session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, LDM_TYPE_SESSION, LdmSessionPrivate);
}
static void
#define LDM_IS_SESSION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LDM_TYPE_SESSION))
#define LDM_SESSION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LDM_TYPE_SESSION, LdmSessionClass))
-typedef struct LdmSessionPrivate LdmSessionPrivate;
+typedef struct _LdmSession LdmSession;
+typedef struct _LdmSessionClass LdmSessionClass;
+typedef struct _LdmSessionPrivate LdmSessionPrivate;
-typedef struct
+struct _LdmSession
{
GObject parent_instance;
LdmSessionPrivate *priv;
-} LdmSession;
+};
-typedef struct
+struct _LdmSessionClass
{
GObjectClass parent_class;
-} LdmSessionClass;
+};
GType ldm_session_get_type (void);
LdmSession *ldm_session_new (const gchar *key, const gchar *name, const gchar *comment);
-const gchar *ldm_session_get_key (LdmSession *user);
+const gchar *ldm_session_get_key (LdmSession *session);
-const gchar *ldm_session_get_name (LdmSession *user);
+const gchar *ldm_session_get_name (LdmSession *session);
-const gchar *ldm_session_get_comment (LdmSession *user);
+const gchar *ldm_session_get_comment (LdmSession *session);
G_END_DECLS
PROP_LOGGED_IN
};
-struct LdmUserPrivate
+struct _LdmUserPrivate
{
gchar *name;
gchar *real_name;
G_DEFINE_TYPE (LdmUser, ldm_user, G_TYPE_OBJECT);
+/**
+ * ldm_user_new:
+ *
+ * Create a new user.
+ * @name: The username
+ * @real_name: The real name of the user
+ * @image: The image URI
+ * @logged_in: TRUE if this user is currently logged in
+ *
+ * Return value: the new #LdmUser
+ **/
LdmUser *
ldm_user_new (const gchar *name, const gchar *real_name, const gchar *image, gboolean logged_in)
{
return g_object_new (LDM_TYPE_USER, "name", name, "real-name", real_name, "image", image, "logged-in", logged_in, NULL);
}
+/**
+ * ldm_user_get_name:
+ * @user: A #LdmUser
+ *
+ * Get the name of a user.
+ *
+ * Return value: The name of the given user
+ **/
const gchar *
ldm_user_get_name (LdmUser *user)
{
return user->priv->name;
}
+/**
+ * ldm_user_get_real_name:
+ * @user: A #LdmUser
+ *
+ * Get the real name of a user.
+ *
+ * Return value: The real name of the given user (may be blank)
+ **/
const gchar *
ldm_user_get_real_name (LdmUser *user)
{
return user->priv->real_name;
}
+/**
+ * ldm_user_get_display_name:
+ * @user: A #LdmUser
+ *
+ * Get the display name of a user.
+ *
+ * Return value: The display name of the given user
+ **/
const gchar *
ldm_user_get_display_name (LdmUser *user)
{
return user->priv->name;
}
+/**
+ * ldm_user_get_image:
+ * @user: A #LdmUser
+ *
+ * Get the image URI for a user.
+ *
+ * Return value: The image URI for the given user or NULL if no URI
+ **/
const gchar *
ldm_user_get_image (LdmUser *user)
{
return user->priv->image;
}
+/**
+ * ldm_user_get_logged_in:
+ * @user: A #LdmUser
+ *
+ * Check if a user is logged in.
+ *
+ * Return value: TRUE if the user is currently logged in.
+ **/
gboolean
ldm_user_get_logged_in (LdmUser *user)
{
#define LDM_IS_USER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LDM_TYPE_USER))
#define LDM_USER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LDM_TYPE_USER, LdmUserClass))
-typedef struct LdmUserPrivate LdmUserPrivate;
+typedef struct _LdmUser LdmUser;
+typedef struct _LdmUserClass LdmUserClass;
+typedef struct _LdmUserPrivate LdmUserPrivate;
-typedef struct
+struct _LdmUser
{
GObject parent_instance;
LdmUserPrivate *priv;
-} LdmUser;
+};
-typedef struct
+struct _LdmUserClass
{
GObjectClass parent_class;
-} LdmUserClass;
+};
GType ldm_user_get_type (void);
{
if (lightdm.is_authenticated)
{
- lightdm.close();
+ lightdm.login();
return;
}