]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Really tidy up liblightdm
authorRobert Ancell <robert.ancell@canonical.com>
Tue, 19 Jul 2011 06:40:33 +0000 (16:40 +1000)
committerRobert Ancell <robert.ancell@canonical.com>
Tue, 19 Jul 2011 06:40:33 +0000 (16:40 +1000)
53 files changed:
configure.ac
doc/Makefile.am
doc/lightdm-gobject-1-docs.sgml
doc/lightdm-gobject-1-sections.txt
doc/tmpl/greeter.sgml
doc/tmpl/language.sgml
doc/tmpl/layout.sgml
doc/tmpl/power.sgml [new file with mode: 0644]
doc/tmpl/session.sgml
doc/tmpl/system.sgml [new file with mode: 0644]
doc/tmpl/user.sgml
greeters/gtk/lightdm-gtk-greeter.c
greeters/qt/loginprompt.cpp
liblightdm-gobject/Makefile.am
liblightdm-gobject/greeter.c
liblightdm-gobject/language.c
liblightdm-gobject/layout.c
liblightdm-gobject/liblightdm-gobject-1.vapi
liblightdm-gobject/lightdm.h [new file with mode: 0644]
liblightdm-gobject/lightdm/Makefile.am [deleted file]
liblightdm-gobject/lightdm/greeter.h
liblightdm-gobject/lightdm/language.h
liblightdm-gobject/lightdm/layout.h
liblightdm-gobject/lightdm/power.h [new file with mode: 0644]
liblightdm-gobject/lightdm/session.h
liblightdm-gobject/lightdm/system.h [new file with mode: 0644]
liblightdm-gobject/lightdm/user-list.h [deleted file]
liblightdm-gobject/lightdm/user.h
liblightdm-gobject/power.c [new file with mode: 0644]
liblightdm-gobject/session.c
liblightdm-gobject/system.c [new file with mode: 0644]
liblightdm-gobject/user-list.c
liblightdm-gobject/user.c
liblightdm-qt/QLightDM/greeter.h
liblightdm-qt/greeter.cpp
src/greeter.c
tests/scripts/login-gobject-guest-disabled.script
tests/scripts/login-gobject-guest-fail-setup-script.script
tests/scripts/login-gobject-guest-no-config.script
tests/scripts/login-gobject-guest-no-setup-script.script
tests/scripts/login-gobject-guest.script
tests/scripts/login-gobject-invalid-user.script
tests/scripts/login-gobject-logout.script
tests/scripts/login-gobject-manual.script
tests/scripts/login-gobject-no-password.script
tests/scripts/login-gobject-session-crash.script
tests/scripts/login-gobject-wrong-password.script
tests/scripts/login-gobject-xserver-crash.script
tests/scripts/login-gobject.script
tests/scripts/switch-to-greeter.script
tests/scripts/switch-to-user.script
tests/scripts/xdmcp-login.script
tests/src/test-gobject-greeter.c

index 5f5f721154b740c746447ed43d64a175cbbf2f84..f0c9d20f649576a1754ba342e755329f71ea9c77 100644 (file)
@@ -177,7 +177,6 @@ greeters/gtk/Makefile
 greeters/qt/Makefile
 liblightdm-gobject/liblightdm-gobject-1.pc
 liblightdm-gobject/Makefile
-liblightdm-gobject/lightdm/Makefile
 liblightdm-qt/Makefile
 liblightdm-qt/liblightdm-qt-1.pc
 liblightdm-qt/QLightDM/Makefile
index e67c158b97fb4619b783d07c61d77ed4a3c1a4f0..6594a626d7422094acd001ac6d07525a9c45c6cc 100644 (file)
@@ -4,7 +4,7 @@ DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
 
 DOC_SOURCE_DIR=$(top_srcdir)/liblightdm-gobject
 
-HFILE_GLOB=$(top_srcdir)/liblightdm-gobject/lightdm/*.h
+HFILE_GLOB=$(top_srcdir)/liblightdm-gobject/lightdm.h
 CFILE_GLOB=$(top_srcdir)/liblightdm-gobject/*.c
 
 INCLUDES = \
index a8be08d3b64b0236681b5890c86fdb675ff681e4..31fdcb2b072506dc5f5a801586cfa64ae43033b1 100644 (file)
@@ -20,5 +20,7 @@
     <xi:include href="xml/layout.xml"/>
     <xi:include href="xml/session.xml"/>
     <xi:include href="xml/user.xml"/>
+    <xi:include href="xml/power.xml"/>
+    <xi:include href="xml/system.xml"/>
   </part>
 </book>
index 86eaf37a68ac5fac43fd72b8787ef85aa6ddf459..0e71ca85621d40b3f83b0790b2ff4ed970b63210 100644 (file)
@@ -1,8 +1,29 @@
-<INCLUDE>lightdm/greeter.h</INCLUDE>
+<INCLUDE>lightdm.h</INCLUDE>
+
+<SECTION>
+<FILE>system</FILE>
+<TITLE>System Information</TITLE>
+lightdm_get_hostname
+</SECTION>
+
+<SECTION>
+<FILE>power</FILE>
+<TITLE>Power Management</TITLE>
+lightdm_get_can_suspend
+lightdm_suspend
+lightdm_get_can_hibernate
+lightdm_hibernate
+lightdm_get_can_restart
+lightdm_restart
+lightdm_get_can_shutdown
+lightdm_shutdown
+</SECTION>
 
 <SECTION>
 <FILE>language</FILE>
-<TITLE>LightDMLanguage</TITLE>
+<TITLE>Languages</TITLE>
+lightdm_get_languages
+lightdm_get_language
 lightdm_language_get_code
 lightdm_language_get_name
 lightdm_language_get_territory
@@ -20,7 +41,10 @@ lightdm_language_get_type
 
 <SECTION>
 <FILE>layout</FILE>
-<TITLE>LightDMLayout</TITLE>
+<TITLE>Keyboard Layout</TITLE>
+lightdm_get_layouts
+lightdm_get_layout
+lightdm_set_layout
 lightdm_layout_get_name
 lightdm_layout_get_short_description
 lightdm_layout_get_description
@@ -35,33 +59,10 @@ lightdm_layout_get_type
 <SUBSECTION Private>
 </SECTION>
 
-<SECTION>
-<FILE>user</FILE>
-<TITLE>LightDMUser</TITLE>
-changed
-lightdm_user_get_name
-lightdm_user_get_real_name
-lightdm_user_get_display_name
-lightdm_user_get_home_directory
-lightdm_user_get_image
-lightdm_user_get_language
-lightdm_user_get_layout
-lightdm_user_get_session
-lightdm_user_get_logged_in
-<SUBSECTION Standard>
-LIGHTDM_USER
-LIGHTDM_IS_USER
-LIGHTDM_TYPE_USER
-lightdm_user_get_type
-LIGHTDM_USER_CLASS
-LIGHTDM_IS_USER_CLASS
-LIGHTDM_USER_GET_CLASS
-<SUBSECTION Private>
-</SECTION>
-
 <SECTION>
 <FILE>session</FILE>
-<TITLE>LightDMSession</TITLE>
+<TITLE>Sessions</TITLE>
+lightdm_get_sessions
 lightdm_session_get_key
 lightdm_session_get_name
 lightdm_session_get_comment
@@ -77,16 +78,33 @@ LIGHTDM_SESSION_GET_CLASS
 </SECTION>
 
 <SECTION>
-<FILE>user-list</FILE>
-<TITLE>LightDMUserList</TITLE>
+<FILE>user</FILE>
+<TITLE>User Accounts</TITLE>
+changed
+lightdm_user_get_display_name
+lightdm_user_get_home_directory
+lightdm_user_get_image
+lightdm_user_get_language
+lightdm_user_get_layout
+lightdm_user_get_logged_in
+lightdm_user_get_name
+lightdm_user_get_real_name
+lightdm_user_get_session
 user_added
 user_changed
 user_removed
-lightdm_user_list_new
-lightdm_user_list_get_num_users
+lightdm_user_list_get_instance
+lightdm_user_list_get_length
 lightdm_user_list_get_user_by_name
 lightdm_user_list_get_users
 <SUBSECTION Standard>
+LIGHTDM_IS_USER
+LIGHTDM_IS_USER_CLASS
+LIGHTDM_TYPE_USER
+lightdm_user_get_type
+LIGHTDM_USER
+LIGHTDM_USER_CLASS
+LIGHTDM_USER_GET_CLASS
 LIGHTDM_USER_LIST
 LIGHTDM_IS_USER_LIST
 LIGHTDM_TYPE_USER_LIST
@@ -99,7 +117,7 @@ LIGHTDM_USER_LIST_GET_CLASS
 
 <SECTION>
 <FILE>greeter</FILE>
-<TITLE>LightDMGreeter</TITLE>
+<TITLE>Greeter Interface</TITLE>
 connected
 autologin_timer_expired
 show_message
@@ -111,13 +129,6 @@ LightDMMessageType
 LightDMPromptType
 lightdm_greeter_new
 lightdm_greeter_connect_to_server
-lightdm_greeter_get_hostname
-lightdm_greeter_get_default_language
-lightdm_greeter_get_languages
-lightdm_greeter_get_layouts
-lightdm_greeter_get_layout
-lightdm_greeter_set_layout
-lightdm_greeter_get_sessions
 lightdm_greeter_get_default_session_hint
 lightdm_greeter_get_hint
 lightdm_greeter_get_has_guest_account_hint
@@ -127,10 +138,9 @@ lightdm_greeter_get_select_guest_hint
 lightdm_greeter_get_autologin_user_hint
 lightdm_greeter_get_autologin_guest_hint
 lightdm_greeter_get_autologin_timeout_hint
-lightdm_greeter_cancel_timed_login
-lightdm_greeter_login
-lightdm_greeter_login_with_user_prompt
-lightdm_greeter_login_as_guest
+lightdm_greeter_cancel_autologin
+lightdm_greeter_authenticate
+lightdm_greeter_authenticate_as_guest
 lightdm_greeter_respond
 lightdm_greeter_cancel_authentication
 lightdm_greeter_get_in_authentication
@@ -138,14 +148,6 @@ lightdm_greeter_get_is_authenticated
 lightdm_greeter_get_authentication_user
 lightdm_greeter_start_session
 lightdm_greeter_start_default_session
-lightdm_greeter_get_can_suspend
-lightdm_greeter_suspend
-lightdm_greeter_get_can_hibernate
-lightdm_greeter_hibernate
-lightdm_greeter_get_can_restart
-lightdm_greeter_restart
-lightdm_greeter_get_can_shutdown
-lightdm_greeter_shutdown
 <SUBSECTION Standard>
 LIGHTDM_GREETER
 LIGHTDM_IS_GREETER
index fc6c4803bb7e351dcfbfa3e0f2094d05f1e38f1b..c3e2761e084de9c80a7fca7236c87a0e8eac249c 100644 (file)
@@ -1,8 +1,8 @@
 <!-- ##### SECTION Title ##### -->
-LightDMGreeter
+Greeter Interface
 
 <!-- ##### SECTION Short_Description ##### -->
-Manages connection to LightDM server and provides greeter functionality
+Make a connection to the LightDM daemon and authenticate users
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
@@ -31,7 +31,7 @@ int main ()
 static void connected_cb (LightDMGreeter *greeter)
 {
     // Start authentication
-    lightdm_greeter_login_with_user_prompt (greeter);
+    lightdm_greeter_authenticate (greeter, NULL);
 }
 
 static void show_prompt_cb (LightDMGreeter *greeter, const char *text, LightDMPromptType type)
@@ -177,69 +177,6 @@ static void quit_cb (LightDMGreeter *greeter)
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_greeter_get_hostname ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_default_language ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_languages ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_layouts ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_layout ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_set_layout ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@layout: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_sessions ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
 <!-- ##### FUNCTION lightdm_greeter_get_default_session_hint ##### -->
 <para>
 
@@ -322,7 +259,7 @@ static void quit_cb (LightDMGreeter *greeter)
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_greeter_cancel_timed_login ##### -->
+<!-- ##### FUNCTION lightdm_greeter_cancel_autologin ##### -->
 <para>
 
 </para>
@@ -330,7 +267,7 @@ static void quit_cb (LightDMGreeter *greeter)
 @greeter: 
 
 
-<!-- ##### FUNCTION lightdm_greeter_login ##### -->
+<!-- ##### FUNCTION lightdm_greeter_authenticate ##### -->
 <para>
 
 </para>
@@ -339,15 +276,7 @@ static void quit_cb (LightDMGreeter *greeter)
 @username: 
 
 
-<!-- ##### FUNCTION lightdm_greeter_login_with_user_prompt ##### -->
-<para>
-
-</para>
-
-@greeter: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_login_as_guest ##### -->
+<!-- ##### FUNCTION lightdm_greeter_authenticate_as_guest ##### -->
 <para>
 
 </para>
@@ -416,71 +345,3 @@ static void quit_cb (LightDMGreeter *greeter)
 @greeter: 
 
 
-<!-- ##### FUNCTION lightdm_greeter_get_can_suspend ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_suspend ##### -->
-<para>
-
-</para>
-
-@greeter: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_can_hibernate ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_hibernate ##### -->
-<para>
-
-</para>
-
-@greeter: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_can_restart ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_restart ##### -->
-<para>
-
-</para>
-
-@greeter: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_get_can_shutdown ##### -->
-<para>
-
-</para>
-
-@greeter: 
-@Returns: 
-
-
-<!-- ##### FUNCTION lightdm_greeter_shutdown ##### -->
-<para>
-
-</para>
-
-@greeter: 
-
-
index c78ffc5d5ea233eae66b48fa3586cdd8c3166160..e8f7269b89361f05ab01f567c424505da542fda3 100644 (file)
@@ -1,8 +1,8 @@
 <!-- ##### SECTION Title ##### -->
-LightDMLanguage
+Languages
 
 <!-- ##### SECTION Short_Description ##### -->
-Information about an available language
+Get information on available languges
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
@@ -20,6 +20,24 @@ Information about an available language
 <!-- ##### SECTION Image ##### -->
 
 
+<!-- ##### FUNCTION lightdm_get_languages ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_get_language ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
 <!-- ##### FUNCTION lightdm_language_get_code ##### -->
 <para>
 
index 5dc905c66acf9edde0638a8c644f1a8c189afeb4..91db412b50d28b8446adff78ef9bda52936b0aa3 100644 (file)
@@ -1,8 +1,8 @@
 <!-- ##### SECTION Title ##### -->
-LightDMLayout
+Keyboard Layouts
 
 <!-- ##### SECTION Short_Description ##### -->
-Information about an available keyboard layout
+Control the keyboard layout
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
@@ -20,6 +20,32 @@ Information about an available keyboard layout
 <!-- ##### SECTION Image ##### -->
 
 
+<!-- ##### FUNCTION lightdm_get_layouts ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_get_layout ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_set_layout ##### -->
+<para>
+
+</para>
+
+@layout: 
+
+
 <!-- ##### FUNCTION lightdm_layout_get_name ##### -->
 <para>
 
diff --git a/doc/tmpl/power.sgml b/doc/tmpl/power.sgml
new file mode 100644 (file)
index 0000000..2d1f5ff
--- /dev/null
@@ -0,0 +1,90 @@
+<!-- ##### SECTION Title ##### -->
+Power Management
+
+<!-- ##### SECTION Short_Description ##### -->
+Shutdown, restart, sleep the system
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### FUNCTION lightdm_get_can_suspend ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_suspend ##### -->
+<para>
+
+</para>
+
+@void: 
+
+
+<!-- ##### FUNCTION lightdm_get_can_hibernate ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_hibernate ##### -->
+<para>
+
+</para>
+
+@void: 
+
+
+<!-- ##### FUNCTION lightdm_get_can_restart ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_restart ##### -->
+<para>
+
+</para>
+
+@void: 
+
+
+<!-- ##### FUNCTION lightdm_get_can_shutdown ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_shutdown ##### -->
+<para>
+
+</para>
+
+@void: 
+
+
index 7fe247c78c9e18eaf4f44ec1cdffa1b14c2d5e9d..96f850ba2d8bb5ef679d0bfe9b6259c875c49613 100644 (file)
@@ -1,8 +1,8 @@
 <!-- ##### SECTION Title ##### -->
-LightDMSession
+User Sessions
 
 <!-- ##### SECTION Short_Description ##### -->
-Information about an available session
+Choose the session to use
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
@@ -20,6 +20,15 @@ Object containing information about a session type. #LightDMSession objects are
 <!-- ##### SECTION Image ##### -->
 
 
+<!-- ##### FUNCTION lightdm_get_sessions ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
 <!-- ##### FUNCTION lightdm_session_get_key ##### -->
 <para>
 
diff --git a/doc/tmpl/system.sgml b/doc/tmpl/system.sgml
new file mode 100644 (file)
index 0000000..c8cdb54
--- /dev/null
@@ -0,0 +1,31 @@
+<!-- ##### SECTION Title ##### -->
+System Information
+
+<!-- ##### SECTION Short_Description ##### -->
+Get system infomation
+
+<!-- ##### SECTION Long_Description ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION See_Also ##### -->
+<para>
+
+</para>
+
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
+<!-- ##### FUNCTION lightdm_get_hostname ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
index c5aa47504f6446e1b2bac447686750ecf56d70de..515d2ba26c8ea901a60922e66a7ead7588a2f879 100644 (file)
@@ -1,8 +1,8 @@
 <!-- ##### SECTION Title ##### -->
-LightDMUser
+User Accounts
 
 <!-- ##### SECTION Short_Description ##### -->
-Information about a user account
+Get information on user accounts on this system
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
@@ -44,7 +44,7 @@ A user has the following properties:
 @user: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_name ##### -->
+<!-- ##### FUNCTION lightdm_user_get_display_name ##### -->
 <para>
 
 </para>
@@ -53,7 +53,7 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_real_name ##### -->
+<!-- ##### FUNCTION lightdm_user_get_home_directory ##### -->
 <para>
 
 </para>
@@ -62,7 +62,7 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_display_name ##### -->
+<!-- ##### FUNCTION lightdm_user_get_image ##### -->
 <para>
 
 </para>
@@ -71,7 +71,7 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_home_directory ##### -->
+<!-- ##### FUNCTION lightdm_user_get_language ##### -->
 <para>
 
 </para>
@@ -80,7 +80,7 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_image ##### -->
+<!-- ##### FUNCTION lightdm_user_get_layout ##### -->
 <para>
 
 </para>
@@ -89,7 +89,7 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_language ##### -->
+<!-- ##### FUNCTION lightdm_user_get_logged_in ##### -->
 <para>
 
 </para>
@@ -98,7 +98,16 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_layout ##### -->
+<!-- ##### FUNCTION lightdm_user_get_name ##### -->
+<para>
+
+</para>
+
+@user: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_user_get_real_name ##### -->
 <para>
 
 </para>
@@ -116,12 +125,67 @@ A user has the following properties:
 @Returns: 
 
 
-<!-- ##### FUNCTION lightdm_user_get_logged_in ##### -->
+<!-- ##### USER_FUNCTION user_added ##### -->
+<para>
+
+</para>
+
+@user_list: 
+@user: 
+
+
+<!-- ##### USER_FUNCTION user_changed ##### -->
 <para>
 
 </para>
 
+@user_list: 
 @user: 
+
+
+<!-- ##### USER_FUNCTION user_removed ##### -->
+<para>
+
+</para>
+
+@user_list: 
+@user: 
+
+
+<!-- ##### FUNCTION lightdm_user_list_get_instance ##### -->
+<para>
+
+</para>
+
+@void: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_user_list_get_length ##### -->
+<para>
+
+</para>
+
+@user_list: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_user_list_get_user_by_name ##### -->
+<para>
+
+</para>
+
+@user_list: 
+@username: 
+@Returns: 
+
+
+<!-- ##### FUNCTION lightdm_user_list_get_users ##### -->
+<para>
+
+</para>
+
+@user_list: 
 @Returns: 
 
 
index bab73f67604f408433dba2c29f1030f8101e8b09..c89d85c0c3c238b852bfc79ceda37ef978c21304 100644 (file)
 #include <gdk-pixbuf/gdk-pixbuf.h>
 #include <gdk-pixbuf-xlib/gdk-pixbuf-xlib.h>
 
-#include "lightdm/greeter.h"
+#include "lightdm.h"
 
 static LightDMGreeter *greeter;
-static LightDMUserList *user_list;
 static GtkWidget *window, *message_label, *user_view;
 static GdkPixbuf *background_pixbuf = NULL;
 static GtkWidget *prompt_box, *prompt_label, *prompt_entry, *session_combo;
@@ -71,22 +70,22 @@ start_authentication (const gchar *username)
 
     if (strcmp (username, "*other") == 0)
     {
-        lightdm_greeter_login_with_user_prompt (greeter);
+        lightdm_greeter_authenticate (greeter, NULL);
     }
     else if (strcmp (username, "*guest") == 0)
     {
-        lightdm_greeter_login_as_guest (greeter);
+        lightdm_greeter_authenticate_as_guest (greeter);
     }
     else
     {
         LightDMUser *user;
-        user = lightdm_user_list_get_user_by_name (user_list, username);
+        user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
         if (user)
             set_session (lightdm_user_get_session (user));
         else
             set_session (lightdm_greeter_get_default_session_hint (greeter));
 
-        lightdm_greeter_login (greeter, username);
+        lightdm_greeter_authenticate (greeter, username);
     }
 }
 
@@ -192,7 +191,7 @@ authentication_complete_cb (LightDMGreeter *greeter)
         gtk_label_set_text (GTK_LABEL (message_label), "Failed to authenticate");
         gtk_widget_show (message_label);
         if (lightdm_greeter_get_hide_users_hint (greeter))
-            lightdm_greeter_login_with_user_prompt (greeter);
+            lightdm_greeter_authenticate (greeter, NULL);
     }
 }
 
@@ -201,9 +200,9 @@ autologin_timer_expired_cb (LightDMGreeter *greeter)
 {
     set_session (lightdm_greeter_get_default_session_hint (greeter));
     if (lightdm_greeter_get_autologin_guest_hint (greeter))
-        lightdm_greeter_login_as_guest (greeter);
+        lightdm_greeter_authenticate_as_guest (greeter);
     else if (lightdm_greeter_get_autologin_user_hint (greeter))
-        lightdm_greeter_login (greeter, lightdm_greeter_get_autologin_user_hint (greeter));
+        lightdm_greeter_authenticate (greeter, lightdm_greeter_get_autologin_user_hint (greeter));
 }
 
 void suspend_cb (GtkWidget *widget, LightDMGreeter *greeter);
@@ -211,7 +210,7 @@ G_MODULE_EXPORT
 void
 suspend_cb (GtkWidget *widget, LightDMGreeter *greeter)
 {
-    lightdm_greeter_suspend (greeter);
+    lightdm_suspend ();
 }
 
 void hibernate_cb (GtkWidget *widget, LightDMGreeter *greeter);
@@ -219,7 +218,7 @@ G_MODULE_EXPORT
 void
 hibernate_cb (GtkWidget *widget, LightDMGreeter *greeter)
 {
-    lightdm_greeter_hibernate (greeter);
+    lightdm_hibernate ();
 }
 
 static void
@@ -258,7 +257,7 @@ restart_cb (GtkWidget *widget, LightDMGreeter *greeter)
     center_window (GTK_WINDOW (dialog));
 
     if (gtk_dialog_run (GTK_DIALOG (dialog)))
-        lightdm_greeter_restart (greeter);
+        lightdm_restart ();
     gtk_widget_destroy (dialog);
 }
 
@@ -280,7 +279,7 @@ shutdown_cb (GtkWidget *widget, LightDMGreeter *greeter)
     center_window (GTK_WINDOW (dialog));
 
     if (gtk_dialog_run (GTK_DIALOG (dialog)))
-        lightdm_greeter_shutdown (greeter);
+        lightdm_shutdown ();
     gtk_widget_destroy (dialog);
 }
 
@@ -435,12 +434,11 @@ load_user_list ()
     GtkTreeModel *model;
     GtkTreeIter iter;
 
-    user_list = lightdm_user_list_new ();
-    g_signal_connect (user_list, "user-added", G_CALLBACK (user_added_cb), NULL);
-    g_signal_connect (user_list, "user-changed", G_CALLBACK (user_changed_cb), NULL);
-    g_signal_connect (user_list, "user-removed", G_CALLBACK (user_removed_cb), NULL);
+    g_signal_connect (lightdm_user_list_get_instance (), "user-added", G_CALLBACK (user_added_cb), NULL);
+    g_signal_connect (lightdm_user_list_get_instance (), "user-changed", G_CALLBACK (user_changed_cb), NULL);
+    g_signal_connect (lightdm_user_list_get_instance (), "user-removed", G_CALLBACK (user_removed_cb), NULL);
 
-    items = lightdm_user_list_get_users (user_list);
+    items = lightdm_user_list_get_users (lightdm_user_list_get_instance ());
 
     model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_view));
     for (item = items; item; item = item->next)
@@ -533,7 +531,7 @@ connected_cb (LightDMGreeter *greeter)
     message_label = GTK_WIDGET (gtk_builder_get_object (builder, "message_label"));
     session_combo = GTK_WIDGET (gtk_builder_get_object (builder, "session_combobox"));
   
-    gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_greeter_get_hostname (greeter));
+    gtk_label_set_text (GTK_LABEL (gtk_builder_get_object (builder, "hostname_label")), lightdm_get_hostname ());
 
     background_image = NULL; // FIXME
     if (background_image)
@@ -568,13 +566,13 @@ connected_cb (LightDMGreeter *greeter)
         gdk_window_set_back_pixmap (root, pixmap, FALSE);
     }
 
-    if (!lightdm_greeter_get_can_suspend (greeter))
+    if (!lightdm_get_can_suspend ())
         gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "suspend_menuitem")));
-    if (!lightdm_greeter_get_can_hibernate (greeter))
+    if (!lightdm_get_can_hibernate ())
         gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "hibernate_menuitem")));
-    if (!lightdm_greeter_get_can_restart (greeter))
+    if (!lightdm_get_can_restart ())
         gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "restart_menuitem")));
-    if (!lightdm_greeter_get_can_shutdown (greeter))
+    if (!lightdm_get_can_shutdown ())
         gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (builder, "shutdown_menuitem")));
 
     user_view = GTK_WIDGET (gtk_builder_get_object (builder, "user_treeview"));
@@ -582,20 +580,20 @@ connected_cb (LightDMGreeter *greeter)
     gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (user_view), 1, "Name", gtk_cell_renderer_text_new(), "text", 1, NULL);
 
     if (lightdm_greeter_get_hide_users_hint (greeter))
-        lightdm_greeter_login_with_user_prompt (greeter);
+        lightdm_greeter_authenticate (greeter, NULL);
     else
     {
         load_user_list ();
         gtk_widget_show (user_view);
     }
   
-    // FIXME: Select the requested user if lightdm_greeter_get_timed_login_user () && lightdm_greeter_get_timed_login_delay () == 0
+    // FIXME: Select the requested user if lightdm_greeter_get_select_user_hint () set
 
     renderer = gtk_cell_renderer_text_new();
     gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (session_combo), renderer, TRUE);
     gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (session_combo), renderer, "text", 0);
     model = gtk_combo_box_get_model (GTK_COMBO_BOX (session_combo));
-    items = lightdm_greeter_get_sessions (greeter);
+    items = lightdm_get_sessions ();
     for (item = items; item; item = item->next)
     {
         LightDMSession *session = item->data;
index 53e4df681bb65c2584b5d706d4077463e420cbfd..5a7f6251cd72af0159e6d71116803ebab7fb9d86 100644 (file)
@@ -49,7 +49,7 @@ void LoginPrompt::onLoginButtonClicked()
     ui->feedbackLabel->setText(QString());
     QModelIndex currentIndex = ui->userListView->currentIndex();
     if (currentIndex.isValid()) {
-        m_greeter->login(currentIndex.data(QLightDM::UsersModel::NameRole).toString());
+        m_greeter->authenticate(currentIndex.data(QLightDM::UsersModel::NameRole).toString());
     }
 }
 
index 11ac8785676ebfa370748f4ef0faf0d6fc3ec475..ed25e59f6662efa0c8f5c87445f35b1ccc31a735 100644 (file)
@@ -1,5 +1,3 @@
-SUBDIRS = lightdm
-
 lib_LTLIBRARIES = liblightdm-gobject-1.la
 
 CLEANFILES =
@@ -9,19 +7,28 @@ liblightdm_gobject_1_la_CFLAGS = $(LIBLIGHTDM_GOBJECT_CFLAGS) \
        $(WARN_CFLAGS) \
        -DXSESSIONS_DIR=\"$(datadir)/xsessions\"
 
+mainheader_HEADERS = lightdm.h
+mainheaderdir=$(includedir)/lightdm-gobject-1
+
+liblightdm_gobject_1include_HEADERS = \
+       lightdm/greeter.h \
+       lightdm/system.h \
+       lightdm/language.h \
+       lightdm/layout.h \
+       lightdm/power.h \
+       lightdm/session.h \
+       lightdm/user.h
+liblightdm_gobject_1includedir=$(mainheaderdir)/lightdm
+
 liblightdm_gobject_1_la_SOURCES= \
        greeter.c \
+       system.c \
        language.c \
        layout.c \
+       power.c \
        session.c \
        user.c \
-       user-list.c \
-       lightdm/greeter.h \
-       lightdm/language.h \
-       lightdm/layout.h \
-       lightdm/session.h \
-       lightdm/user-list.h \
-       lightdm/user.h
+       $(liblightdm_gobject_1include_HEADERS)
 
 if HAVE_INTROSPECTION
 
index 424613328fcb8f6ef162c573a86e7dd3d5c2112e..fe821030069b64df50cdeb625bf39197fbb947d0 100644 (file)
 #include <config.h>
 
 #include <stdlib.h>
-#include <errno.h>
 #include <string.h>
-#include <locale.h>
-#include <sys/utsname.h>
-#include <pwd.h>
-#include <gio/gdesktopappinfo.h>
 #include <security/pam_appl.h>
-#include <libxklavier/xklavier.h>
 
 #include "lightdm/greeter.h"
 
 enum {
     PROP_0,
-    PROP_HOSTNAME,
-    PROP_DEFAULT_LANGUAGE,
-    PROP_LAYOUTS,
-    PROP_LAYOUT,
-    PROP_SESSIONS,
     PROP_DEFAULT_SESSION_HINT,
     PROP_HIDE_USERS_HINT,
     PROP_HAS_GUEST_ACCOUNT_HINT,
@@ -41,10 +30,6 @@ enum {
     PROP_AUTHENTICATION_USER,
     PROP_IN_AUTHENTICATION,
     PROP_IS_AUTHENTICATED,
-    PROP_CAN_SUSPEND,
-    PROP_CAN_HIBERNATE,
-    PROP_CAN_RESTART,
-    PROP_CAN_SHUTDOWN
 };
 
 enum {
@@ -61,39 +46,18 @@ static guint signals[LAST_SIGNAL] = { 0 };
 
 typedef struct
 {
-    GDBusConnection *system_bus;
-
     GIOChannel *to_server_channel, *from_server_channel;
     guint8 *read_buffer;
     gsize n_read;
 
-    Display *display;
-
-    gchar *hostname;
-
-    LightDMUserList *user_list;
-  
-    gboolean have_languages;
-    GList *languages;
-
-    XklEngine *xkl_engine;
-    XklConfigRec *xkl_config;
-    gboolean have_layouts;
-    GList *layouts;
-    gchar *layout;
-
-    gboolean have_sessions;
-    GList *sessions;
+    GHashTable *hints;
+    guint autologin_timeout;
 
     gchar *authentication_user;
     gboolean in_authentication;
     gboolean is_authenticated;
     guint32 authenticate_sequence_number;
     gboolean cancelling_authentication;
-  
-    GHashTable *hints;
-
-    guint login_timeout;
 } LightDMGreeterPrivate;
 
 G_DEFINE_TYPE (LightDMGreeter, lightdm_greeter, G_TYPE_OBJECT);
@@ -107,8 +71,8 @@ G_DEFINE_TYPE (LightDMGreeter, lightdm_greeter, G_TYPE_OBJECT);
 typedef enum
 {
     GREETER_MESSAGE_CONNECT = 0,
-    GREETER_MESSAGE_LOGIN,
-    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_AUTHENTICATE,
+    GREETER_MESSAGE_AUTHENTICATE_AS_GUEST,
     GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
     GREETER_MESSAGE_START_SESSION,
     GREETER_MESSAGE_CANCEL_AUTHENTICATION
@@ -143,7 +107,7 @@ timed_login_cb (gpointer data)
     LightDMGreeter *greeter = data;
     LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
 
-    priv->login_timeout = 0;
+    priv->autologin_timeout = 0;
     g_signal_emit (G_OBJECT (greeter), signals[AUTOLOGIN_TIMER_EXPIRED], 0);
 
     return FALSE;
@@ -282,7 +246,7 @@ handle_connected (LightDMGreeter *greeter, guint32 length, gsize *offset)
     if (timeout)
     {
         g_debug ("Setting autologin timer for %d seconds", timeout);
-        priv->login_timeout = g_timeout_add (timeout * 1000, timed_login_cb, greeter);
+        priv->autologin_timeout = g_timeout_add (timeout * 1000, timed_login_cb, greeter);
     }
     g_signal_emit (G_OBJECT (greeter), signals[CONNECTED], 0);
 }
@@ -481,7 +445,6 @@ gboolean
 lightdm_greeter_connect_to_server (LightDMGreeter *greeter)
 {
     LightDMGreeterPrivate *priv;
-    GError *error = NULL;
     const gchar *fd;
     guint8 message[MAX_MESSAGE_LENGTH];
     gsize offset = 0;
@@ -490,12 +453,7 @@ lightdm_greeter_connect_to_server (LightDMGreeter *greeter)
 
     priv = GET_PRIVATE (greeter);
 
-    priv->system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
-    if (!priv->system_bus)
-        g_warning ("Failed to connect to system bus: %s", error->message);
-    g_clear_error (&error);
-
-    fd = getenv ("LIGHTDM_TO_SERVER_FD");
+    fd = g_getenv ("LIGHTDM_TO_SERVER_FD");
     if (!fd)
     {
         g_warning ("No LIGHTDM_TO_SERVER_FD environment variable");
@@ -504,7 +462,7 @@ lightdm_greeter_connect_to_server (LightDMGreeter *greeter)
     priv->to_server_channel = g_io_channel_unix_new (atoi (fd));
     g_io_channel_set_encoding (priv->to_server_channel, NULL, NULL);
 
-    fd = getenv ("LIGHTDM_FROM_SERVER_FD");
+    fd = g_getenv ("LIGHTDM_FROM_SERVER_FD");
     if (!fd)
     {
         g_warning ("No LIGHTDM_FROM_SERVER_FD environment variable");
@@ -522,324 +480,6 @@ lightdm_greeter_connect_to_server (LightDMGreeter *greeter)
     return TRUE;
 }
 
-/**
- * lightdm_greeter_get_hostname:
- * @greeter: a #LightDMGreeter
- *
- * Return value: The host this greeter is displaying
- **/
-const gchar *
-lightdm_greeter_get_hostname (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv;
-
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-
-    priv = GET_PRIVATE (greeter);
-
-    if (!priv->hostname)
-    {
-        struct utsname info;
-        uname (&info);
-        priv->hostname = g_strdup (info.nodename);
-    }
-
-    return priv->hostname;
-}
-
-static void
-update_languages (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    gchar *stdout_text = NULL, *stderr_text = NULL;
-    gint exit_status;
-    gboolean result;
-    GError *error = NULL;
-
-    if (priv->have_languages)
-        return;
-
-    result = g_spawn_command_line_sync ("locale -a", &stdout_text, &stderr_text, &exit_status, &error);
-    if (!result || exit_status != 0)
-        g_warning ("Failed to get languages, locale -a returned %d: %s", exit_status, error->message);
-    else
-    {
-        gchar **tokens;
-        int i;
-
-        tokens = g_strsplit_set (stdout_text, "\n\r", -1);
-        for (i = 0; tokens[i]; i++)
-        {
-            LightDMLanguage *language;
-            gchar *code;
-
-            code = g_strchug (tokens[i]);
-            if (code[0] == '\0')
-                continue;
-
-            /* Ignore the non-interesting languages */
-            if (strcmp (code, "C") == 0 || strcmp (code, "POSIX") == 0)
-                continue;
-
-            language = g_object_new (LIGHTDM_TYPE_LANGUAGE, "code", code, NULL);
-            priv->languages = g_list_append (priv->languages, language);
-        }
-
-        g_strfreev (tokens);
-    }
-
-    g_clear_error (&error);
-    g_free (stdout_text);
-    g_free (stderr_text);
-
-    priv->have_languages = TRUE;
-}
-
-/**
- * lightdm_greeter_get_default_language:
- * @greeter: A #LightDMGreeter
- *
- * Get the default language.
- *
- * Return value: The default language.
- **/
-const gchar *
-lightdm_greeter_get_default_language (LightDMGreeter *greeter)
-{
-    gchar *lang;
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-    lang = getenv ("LANG");
-    if (lang)
-        return lang;
-    else
-        return "C";
-}
-
-/**
- * lightdm_greeter_get_languages:
- * @greeter: A #LightDMGreeter
- *
- * Get a list of languages to present to the user.
- *
- * Return value: (element-type LightDMLanguage) (transfer none): A list of #LightDMLanguage that should be presented to the user.
- **/
-GList *
-lightdm_greeter_get_languages (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-    update_languages (greeter);
-    return GET_PRIVATE (greeter)->languages;
-}
-
-static void
-layout_cb (XklConfigRegistry *config,
-           const XklConfigItem *item,
-           gpointer data)
-{
-    LightDMGreeter *greeter = data;
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    LightDMLayout *layout;
-
-    layout = g_object_new (LIGHTDM_TYPE_LAYOUT, "name", item->name, "short-description", item->short_description, "description", item->description, NULL);
-    priv->layouts = g_list_append (priv->layouts, layout);
-}
-
-static void
-setup_display (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    if (!priv->display)
-        priv->display = XOpenDisplay (NULL);
-}
-
-static void
-setup_xkl (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-
-    setup_display (greeter);
-
-    priv->xkl_engine = xkl_engine_get_instance (priv->display);
-    priv->xkl_config = xkl_config_rec_new ();
-    if (!xkl_config_rec_get_from_server (priv->xkl_config, priv->xkl_engine))
-        g_warning ("Failed to get Xkl configuration from server");
-    priv->layout = g_strdup (priv->xkl_config->layouts[0]);
-}
-
-/**
- * lightdm_greeter_get_layouts:
- * @greeter: A #LightDMGreeter
- *
- * Get a list of keyboard layouts to present to the user.
- *
- * Return value: (element-type LightDMLayout) (transfer none): A list of #LightDMLayout that should be presented to the user.
- **/
-GList *
-lightdm_greeter_get_layouts (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv;
-    XklConfigRegistry *registry;
-
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-
-    priv = GET_PRIVATE (greeter);
-
-    if (priv->have_layouts)
-        return priv->layouts;
-
-    setup_xkl (greeter);
-
-    registry = xkl_config_registry_get_instance (priv->xkl_engine);
-    xkl_config_registry_load (registry, FALSE);
-    xkl_config_registry_foreach_layout (registry, layout_cb, greeter);
-    g_object_unref (registry);
-    priv->have_layouts = TRUE;
-
-    return priv->layouts;
-}
-
-/**
- * lightdm_greeter_set_layout:
- * @greeter: A #LightDMGreeter
- * @layout: The layout to use
- *
- * Set the layout for this session.
- **/
-void
-lightdm_greeter_set_layout (LightDMGreeter *greeter, const gchar *layout)
-{
-    LightDMGreeterPrivate *priv;
-    XklConfigRec *config;
-
-    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
-    g_return_if_fail (layout != NULL);
-
-    priv = GET_PRIVATE (greeter);
-
-    g_debug ("Setting keyboard layout to %s", layout);
-
-    setup_xkl (greeter);
-
-    config = xkl_config_rec_new ();
-    config->layouts = g_malloc (sizeof (gchar *) * 2);
-    config->model = g_strdup (priv->xkl_config->model);
-    config->layouts[0] = g_strdup (layout);
-    config->layouts[1] = NULL;
-    if (!xkl_config_rec_activate (config, priv->xkl_engine))
-        g_warning ("Failed to activate XKL config");
-    else
-        priv->layout = g_strdup (layout);
-    g_object_unref (config);
-}
-
-/**
- * lightdm_greeter_get_layout:
- * @greeter: A #LightDMGreeter
- *
- * Get the current keyboard layout.
- *
- * Return value: The currently active layout for this user.
- **/
-const gchar *
-lightdm_greeter_get_layout (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-    setup_xkl (greeter);
-    return GET_PRIVATE (greeter)->layout;
-}
-
-static void
-update_sessions (LightDMGreeter *greeter)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    GDir *directory;
-    GError *error = NULL;
-
-    if (priv->have_sessions)
-        return;
-
-    directory = g_dir_open (XSESSIONS_DIR, 0, &error);
-    if (!directory)
-        g_warning ("Failed to open sessions directory: %s", error->message);
-    g_clear_error (&error);
-    if (!directory)
-        return;
-
-    while (TRUE)
-    {
-        const gchar *filename;
-        GKeyFile *key_file;
-        gchar *key, *path;
-        gboolean result;
-
-        filename = g_dir_read_name (directory);
-        if (filename == NULL)
-            break;
-
-        if (!g_str_has_suffix (filename, ".desktop"))
-            continue;
-
-        key = g_strndup (filename, strlen (filename) - strlen (".desktop"));
-        path = g_build_filename (XSESSIONS_DIR, filename, NULL);
-        g_debug ("Loading session %s", path);
-
-        key_file = g_key_file_new ();
-        result = g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error);
-        if (!result)
-            g_warning ("Failed to load session file %s: %s:", path, error->message);
-        g_clear_error (&error);
-
-        if (result && !g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, NULL))
-        {
-            gchar *domain, *name, *comment;
-
-#ifdef G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN
-            domain = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN, NULL);
-#else
-            domain = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL);
-#endif
-            name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, domain, NULL);
-            comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, domain, NULL);
-            if (!comment)
-                comment = g_strdup ("");
-            if (name)
-            {
-                g_debug ("Loaded session %s (%s, %s)", key, name, comment);
-                priv->sessions = g_list_append (priv->sessions, g_object_new (LIGHTDM_TYPE_SESSION, "key", key, "name", name, "comment", comment, NULL));
-            }
-            else
-                g_warning ("Invalid session %s: %s", path, error->message);
-            g_free (domain);
-            g_free (name);
-            g_free (comment);
-        }
-
-        g_free (key);
-        g_free (path);
-        g_key_file_free (key_file);
-    }
-
-    g_dir_close (directory);
-
-    priv->have_sessions = TRUE;
-}
-
-/**
- * lightdm_greeter_get_sessions:
- * @greeter: A #LightDMGreeter
- *
- * Get the available sessions.
- *
- * Return value: (element-type LightDMSession) (transfer none): A list of #LightDMSession
- **/
-GList *
-lightdm_greeter_get_sessions (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), NULL);
-    update_sessions (greeter);
-    return GET_PRIVATE (greeter)->sessions;
-}
-
 /**
  * lightdm_greeter_get_hint:
  * @greeter: A #LightDMGreeter
@@ -1002,13 +642,13 @@ lightdm_greeter_get_autologin_timeout_hint (LightDMGreeter *greeter)
 }
 
 /**
- * lightdm_greeter_cancel_timed_login:
+ * lightdm_greeter_cancel_autologin:
  * @greeter: A #LightDMGreeter
  *
- * Cancel the login as the default user.
+ * Cancel the automatic login.
  */
 void
-lightdm_greeter_cancel_timed_login (LightDMGreeter *greeter)
+lightdm_greeter_cancel_autologin (LightDMGreeter *greeter)
 {
     LightDMGreeterPrivate *priv;
 
@@ -1016,20 +656,20 @@ lightdm_greeter_cancel_timed_login (LightDMGreeter *greeter)
 
     priv = GET_PRIVATE (greeter);
 
-    if (priv->login_timeout)
-       g_source_remove (priv->login_timeout);
-    priv->login_timeout = 0;
+    if (priv->autologin_timeout)
+       g_source_remove (priv->autologin_timeout);
+    priv->autologin_timeout = 0;
 }
 
 /**
- * lightdm_greeter_login:
+ * lightdm_greeter_authenticate:
  * @greeter: A #LightDMGreeter
  * @username: (allow-none): A username or #NULL to prompt for a username.
  *
  * Starts the authentication procedure for a user.
  **/
 void
-lightdm_greeter_login (LightDMGreeter *greeter, const char *username)
+lightdm_greeter_authenticate (LightDMGreeter *greeter, const char *username)
 {
     LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
     guint8 message[MAX_MESSAGE_LENGTH];
@@ -1048,32 +688,20 @@ lightdm_greeter_login (LightDMGreeter *greeter, const char *username)
     priv->authentication_user = g_strdup (username);
 
     g_debug ("Starting authentication for user %s...", username);
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_LOGIN, int_length () + string_length (username), &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_AUTHENTICATE, int_length () + string_length (username), &offset);
     write_int (message, MAX_MESSAGE_LENGTH, priv->authenticate_sequence_number, &offset);
     write_string (message, MAX_MESSAGE_LENGTH, username, &offset);
     write_message (greeter, message, offset);
 }
 
 /**
- * lightdm_greeter_login_with_user_prompt:
- * @greeter: A #LightDMGreeter
- *
- * Starts the authentication procedure, prompting the greeter for a username.
- **/
-void
-lightdm_greeter_login_with_user_prompt (LightDMGreeter *greeter)
-{
-    lightdm_greeter_login (greeter, NULL);
-}
-
-/**
- * lightdm_greeter_login_as_guest:
+ * lightdm_greeter_authenticate_as_guest:
  * @greeter: A #LightDMGreeter
  *
  * Starts the authentication procedure for the guest user.
  **/
 void
-lightdm_greeter_login_as_guest (LightDMGreeter *greeter)
+lightdm_greeter_authenticate_as_guest (LightDMGreeter *greeter)
 {
     LightDMGreeterPrivate *priv;
     guint8 message[MAX_MESSAGE_LENGTH];
@@ -1091,7 +719,7 @@ lightdm_greeter_login_as_guest (LightDMGreeter *greeter)
     priv->authentication_user = NULL;
 
     g_debug ("Starting authentication for guest account...");
-    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_LOGIN_AS_GUEST, int_length (), &offset);
+    write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_AUTHENTICATE_AS_GUEST, int_length (), &offset);
     write_int (message, MAX_MESSAGE_LENGTH, priv->authenticate_sequence_number, &offset);
     write_message (greeter, message, offset);
 }
@@ -1212,10 +840,10 @@ lightdm_greeter_start_session (LightDMGreeter *greeter, const gchar *session)
 }
 
 /**
- * lightdm_greeter_start_session_with_defaults:
+ * lightdm_greeter_start_default_session:
  * @greeter: A #LightDMGreeter
  *
- * Login a user to a session using default settings for that user.
+ * Start the default session for the authenticated user.
  **/
 void
 lightdm_greeter_start_default_session (LightDMGreeter *greeter)
@@ -1223,200 +851,6 @@ lightdm_greeter_start_default_session (LightDMGreeter *greeter)
     lightdm_greeter_start_session (greeter, NULL);
 }
 
-static gboolean
-upower_call_function (LightDMGreeter *greeter, const gchar *function, gboolean has_result)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    GDBusProxy *proxy;
-    GVariant *result;
-    GError *error = NULL;
-    gboolean function_result = FALSE;
-  
-    if (!priv->system_bus)
-        return FALSE;
-
-    proxy = g_dbus_proxy_new_sync (priv->system_bus,
-                                   G_DBUS_PROXY_FLAGS_NONE,
-                                   NULL,
-                                   "org.freedesktop.UPower",
-                                   "/org/freedesktop/UPower",
-                                   "org.freedesktop.UPower",
-                                   NULL, NULL);
-    result = g_dbus_proxy_call_sync (proxy,
-                                     function,
-                                     NULL,
-                                     G_DBUS_CALL_FLAGS_NONE,
-                                     -1,
-                                     NULL,
-                                     &error);
-    g_object_unref (proxy);
-
-    if (!result)
-        g_warning ("Error calling UPower function %s: %s", function, error->message);
-    g_clear_error (&error);
-    if (!result)
-        return FALSE;
-
-    if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-        g_variant_get (result, "(b)", &function_result);
-
-    g_variant_unref (result);
-    return function_result;
-}
-
-/**
- * lightdm_greeter_get_can_suspend:
- * @greeter: A #LightDMGreeter
- *
- * Checks if the greeter is authorized to do a system suspend.
- *
- * Return value: #TRUE if the greeter can suspend the system
- **/
-gboolean
-lightdm_greeter_get_can_suspend (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
-    return upower_call_function (greeter, "SuspendAllowed", TRUE);
-}
-
-/**
- * lightdm_greeter_suspend:
- * @greeter: A #LightDMGreeter
- *
- * Triggers a system suspend.
- **/
-void
-lightdm_greeter_suspend (LightDMGreeter *greeter)
-{
-    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
-    upower_call_function (greeter, "Suspend", FALSE);
-}
-
-/**
- * lightdm_greeter_get_can_hibernate:
- * @greeter: A #LightDMGreeter
- *
- * Checks if the greeter is authorized to do a system hibernate.
- *
- * Return value: #TRUE if the greeter can hibernate the system
- **/
-gboolean
-lightdm_greeter_get_can_hibernate (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
-    return upower_call_function (greeter, "HibernateAllowed", TRUE);
-}
-
-/**
- * lightdm_greeter_hibernate:
- * @greeter: A #LightDMGreeter
- *
- * Triggers a system hibernate.
- **/
-void
-lightdm_greeter_hibernate (LightDMGreeter *greeter)
-{
-    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
-    upower_call_function (greeter, "Hibernate", FALSE);
-}
-
-static gboolean
-ck_call_function (LightDMGreeter *greeter, const gchar *function, gboolean has_result)
-{
-    LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
-    GDBusProxy *proxy;
-    GVariant *result;
-    GError *error = NULL;
-    gboolean function_result = FALSE;
-
-    if (!priv->system_bus)
-        return FALSE;
-
-    proxy = g_dbus_proxy_new_sync (priv->system_bus,
-                                   G_DBUS_PROXY_FLAGS_NONE,
-                                   NULL,
-                                   "org.freedesktop.ConsoleKit",
-                                   "/org/freedesktop/ConsoleKit/Manager",
-                                   "org.freedesktop.ConsoleKit.Manager",
-                                   NULL, NULL);
-    result = g_dbus_proxy_call_sync (proxy,
-                                     function,
-                                     NULL,
-                                     G_DBUS_CALL_FLAGS_NONE,
-                                     -1,
-                                     NULL,
-                                     &error);
-    g_object_unref (proxy);
-
-    if (!result)
-        g_warning ("Error calling ConsoleKit function %s: %s", function, error->message);
-    g_clear_error (&error);
-    if (!result)
-        return FALSE;
-
-    if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
-        g_variant_get (result, "(b)", &function_result);
-
-    g_variant_unref (result);
-    return function_result;
-}
-
-/**
- * lightdm_greeter_get_can_restart:
- * @greeter: A #LightDMGreeter
- *
- * Checks if the greeter is authorized to do a system restart.
- *
- * Return value: #TRUE if the greeter can restart the system
- **/
-gboolean
-lightdm_greeter_get_can_restart (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
-    return ck_call_function (greeter, "CanRestart", TRUE);
-}
-
-/**
- * lightdm_greeter_restart:
- * @greeter: A #LightDMGreeter
- *
- * Triggers a system restart.
- **/
-void
-lightdm_greeter_restart (LightDMGreeter *greeter)
-{
-    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
-    ck_call_function (greeter, "Restart", FALSE);
-}
-
-/**
- * lightdm_greeter_get_can_shutdown:
- * @greeter: A #LightDMGreeter
- *
- * Checks if the greeter is authorized to do a system shutdown.
- *
- * Return value: #TRUE if the greeter can shutdown the system
- **/
-gboolean
-lightdm_greeter_get_can_shutdown (LightDMGreeter *greeter)
-{
-    g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
-    return ck_call_function (greeter, "CanStop", TRUE);
-}
-
-/**
- * lightdm_greeter_shutdown:
- * @greeter: A #LightDMGreeter
- *
- * Triggers a system shutdown.
- **/
-void
-lightdm_greeter_shutdown (LightDMGreeter *greeter)
-{
-    g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
-    ck_call_function (greeter, "Stop", FALSE);
-}
-
 static void
 lightdm_greeter_init (LightDMGreeter *greeter)
 {
@@ -1432,18 +866,7 @@ lightdm_greeter_set_property (GObject      *object,
                           const GValue *value,
                           GParamSpec   *pspec)
 {
-    LightDMGreeter *self;
-
-    self = LIGHTDM_GREETER (object);
-
-    switch (prop_id) {
-    case PROP_LAYOUT:
-        lightdm_greeter_set_layout(self, g_value_get_string (value));
-        break;
-    default:
-        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-        break;
-    }
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 }
 
 static void
@@ -1457,19 +880,6 @@ lightdm_greeter_get_property (GObject    *object,
     self = LIGHTDM_GREETER (object);
 
     switch (prop_id) {
-    case PROP_HOSTNAME:
-        g_value_set_string (value, lightdm_greeter_get_hostname (self));
-        break;
-    case PROP_DEFAULT_LANGUAGE:
-        g_value_set_string (value, lightdm_greeter_get_default_language (self));
-        break;
-    case PROP_LAYOUTS:
-        break;
-    case PROP_LAYOUT:
-        g_value_set_string (value, lightdm_greeter_get_layout (self));
-        break;
-    case PROP_SESSIONS:
-        break;
     case PROP_DEFAULT_SESSION_HINT:
         g_value_set_string (value, lightdm_greeter_get_default_session_hint (self));
         break;
@@ -1503,18 +913,6 @@ lightdm_greeter_get_property (GObject    *object,
     case PROP_IS_AUTHENTICATED:
         g_value_set_boolean (value, lightdm_greeter_get_is_authenticated (self));
         break;
-    case PROP_CAN_SUSPEND:
-        g_value_set_boolean (value, lightdm_greeter_get_can_suspend (self));
-        break;
-    case PROP_CAN_HIBERNATE:
-        g_value_set_boolean (value, lightdm_greeter_get_can_hibernate (self));
-        break;
-    case PROP_CAN_RESTART:
-        g_value_set_boolean (value, lightdm_greeter_get_can_restart (self));
-        break;
-    case PROP_CAN_SHUTDOWN:
-        g_value_set_boolean (value, lightdm_greeter_get_can_shutdown (self));
-        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -1563,25 +961,10 @@ lightdm_greeter_finalize (GObject *object)
     LightDMGreeter *self = LIGHTDM_GREETER (object);
     LightDMGreeterPrivate *priv = GET_PRIVATE (self);
 
-    if (priv->system_bus)
-        g_object_unref (priv->system_bus);
     if (priv->to_server_channel)
         g_io_channel_unref (priv->to_server_channel);
     if (priv->from_server_channel)
         g_io_channel_unref (priv->from_server_channel);
-    if (priv->display)
-        XCloseDisplay (priv->display);
-    g_free (priv->hostname);
-    if (priv->user_list)
-        g_object_unref (priv->user_list);
-    g_list_free_full (priv->languages, g_object_unref);
-    if (priv->xkl_engine)
-        g_object_unref (priv->xkl_engine);
-    if (priv->xkl_config)
-        g_object_unref (priv->xkl_config);
-    g_list_free_full (priv->layouts, g_object_unref);
-    g_free (priv->layout);
-    g_list_free_full (priv->sessions, g_object_unref);
     g_free (priv->authentication_user);
     g_hash_table_unref (priv->hints);
 
@@ -1599,37 +982,6 @@ lightdm_greeter_class_init (LightDMGreeterClass *klass)
     object_class->get_property = lightdm_greeter_get_property;
     object_class->finalize = lightdm_greeter_finalize;
 
-    g_object_class_install_property (object_class,
-                                     PROP_HOSTNAME,
-                                     g_param_spec_string ("hostname",
-                                                          "hostname",
-                                                          "Hostname displaying greeter for",
-                                                          NULL,
-                                                          G_PARAM_READABLE));
-    g_object_class_install_property (object_class,
-                                     PROP_DEFAULT_LANGUAGE,
-                                     g_param_spec_string ("default-language",
-                                                          "default-language",
-                                                          "Default language",
-                                                          NULL,
-                                                          G_PARAM_READWRITE));
-    /*g_object_class_install_property (object_class,
-                                     PROP_LAYOUTS,
-                                     g_param_spec_list ("layouts",
-                                                        "layouts",
-                                                        "Available keyboard layouts"));*/
-    g_object_class_install_property (object_class,
-                                     PROP_LAYOUT,
-                                     g_param_spec_string ("layout",
-                                                          "layout",
-                                                          "Current keyboard layout",
-                                                          NULL,
-                                                          G_PARAM_READWRITE));
-    /*g_object_class_install_property (object_class,
-                                     PROP_SESSIONS,
-                                     g_param_spec_list ("sessions",
-                                                        "sessions",
-                                                        "Available sessions"));*/
     g_object_class_install_property (object_class,
                                      PROP_DEFAULT_SESSION_HINT,
                                      g_param_spec_string ("default-session-hint",
@@ -1715,34 +1067,6 @@ lightdm_greeter_class_init (LightDMGreeterClass *klass)
                                                            "TRUE if the selected user is authenticated",
                                                            FALSE,
                                                            G_PARAM_READABLE));
-    g_object_class_install_property (object_class,
-                                     PROP_CAN_SUSPEND,
-                                     g_param_spec_boolean ("can-suspend",
-                                                           "can-suspend",
-                                                           "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 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 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 system",
-                                                           FALSE,
-                                                           G_PARAM_READABLE));
 
     /**
      * LightDMGreeter::connected:
index 68911ddb0c792dc9c1391ff06ea828c3aea3fa3e..b7f4d7d73ffd7c257062bbbb711e4ba7707100d2 100644 (file)
@@ -9,6 +9,7 @@
  * license.
  */
 
+#include <string.h>
 #include <locale.h>
 #include <langinfo.h>
 
@@ -32,6 +33,94 @@ G_DEFINE_TYPE (LightDMLanguage, lightdm_language, G_TYPE_OBJECT);
 
 #define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_LANGUAGE, LightDMLanguagePrivate)
 
+static gboolean have_languages = FALSE;
+static GList *languages = NULL;
+
+static void
+update_languages (void)
+{
+    gchar *stdout_text = NULL, *stderr_text = NULL;
+    gint exit_status;
+    gboolean result;
+    GError *error = NULL;
+
+    if (have_languages)
+        return;
+
+    result = g_spawn_command_line_sync ("locale -a", &stdout_text, &stderr_text, &exit_status, &error);
+    if (!result || exit_status != 0)
+        g_warning ("Failed to get languages, locale -a returned %d: %s", exit_status, error->message);
+    else
+    {
+        gchar **tokens;
+        int i;
+
+        tokens = g_strsplit_set (stdout_text, "\n\r", -1);
+        for (i = 0; tokens[i]; i++)
+        {
+            LightDMLanguage *language;
+            gchar *code;
+
+            code = g_strchug (tokens[i]);
+            if (code[0] == '\0')
+                continue;
+
+            /* Ignore the non-interesting languages */
+            if (strcmp (code, "C") == 0 || strcmp (code, "POSIX") == 0)
+                continue;
+
+            language = g_object_new (LIGHTDM_TYPE_LANGUAGE, "code", code, NULL);
+            languages = g_list_append (languages, language);
+        }
+
+        g_strfreev (tokens);
+    }
+
+    g_clear_error (&error);
+    g_free (stdout_text);
+    g_free (stderr_text);
+
+    have_languages = TRUE;
+}
+
+/**
+ * lightdm_get_language:
+ *
+ * Get the current language.
+ *
+ * Return value: (transfer none): The current language or #NULL if no language.
+ **/
+const LightDMLanguage *
+lightdm_get_language (void)
+{
+    const gchar *lang;
+    GList *link;
+
+    lang = g_getenv ("LANG");
+    for (link = lightdm_get_languages (); link; link = link->next)
+    {
+        LightDMLanguage *language = link->data;
+        if (lightdm_language_matches (language, lang))
+            return language;
+    }
+
+    return NULL;
+}
+
+/**
+ * lightdm_get_languages:
+ *
+ * Get a list of languages to present to the user.
+ *
+ * Return value: (element-type LightDMLanguage) (transfer none): A list of #LightDMLanguage that should be presented to the user.
+ **/
+GList *
+lightdm_get_languages (void)
+{
+    update_languages ();
+    return languages;
+}
+
 /**
  * lightdm_language_get_code:
  * @language: A #LightDMLanguage
index 67648223d241092c8ede15383f4280a481e9d0ac..b5bd5adf9e353c6c52133d5c90ad77541c3ae470 100644 (file)
@@ -9,6 +9,8 @@
  * license.
  */
 
+#include <libxklavier/xklavier.h>
+
 #include "lightdm/layout.h"
 
 enum {
@@ -29,6 +31,96 @@ G_DEFINE_TYPE (LightDMLayout, lightdm_layout, G_TYPE_OBJECT);
 
 #define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_LAYOUT, LightDMLayoutPrivate)
 
+static gboolean have_layouts = FALSE;
+static Display *display = NULL;
+static XklEngine *xkl_engine = NULL;
+static XklConfigRec *xkl_config = NULL;
+static GList *layouts = NULL;
+
+static void
+layout_cb (XklConfigRegistry *config,
+           const XklConfigItem *item,
+           gpointer data)
+{
+    LightDMLayout *layout;
+
+    layout = g_object_new (LIGHTDM_TYPE_LAYOUT, "name", item->name, "short-description", item->short_description, "description", item->description, NULL);
+    layouts = g_list_append (layouts, layout);
+}
+
+/**
+ * lightdm_get_layouts:
+ *
+ * Get a list of keyboard layouts to present to the user.
+ *
+ * Return value: (element-type LightDMLayout) (transfer none): A list of #LightDMLayout that should be presented to the user.
+ **/
+GList *
+lightdm_get_layouts (void)
+{
+    XklConfigRegistry *registry;
+
+    if (have_layouts)
+        return layouts;
+
+    display = XOpenDisplay (NULL);
+    xkl_engine = xkl_engine_get_instance (display);
+    xkl_config = xkl_config_rec_new ();
+    if (!xkl_config_rec_get_from_server (xkl_config, xkl_engine))
+        g_warning ("Failed to get Xkl configuration from server");
+
+    registry = xkl_config_registry_get_instance (xkl_engine);
+    xkl_config_registry_load (registry, FALSE);
+    xkl_config_registry_foreach_layout (registry, layout_cb, NULL);
+    g_object_unref (registry);
+
+    have_layouts = TRUE;
+
+    return layouts;
+}
+
+/**
+ * lightdm_set_layout:
+ * @layout: The layout to use
+ *
+ * Set the layout for this session.
+ **/
+void
+lightdm_set_layout (LightDMLayout *layout)
+{
+    XklConfigRec *config;
+
+    g_return_if_fail (layout != NULL);
+
+    g_debug ("Setting keyboard layout to %s", lightdm_layout_get_name (layout));
+
+    config = xkl_config_rec_new ();
+    config->layouts = g_malloc (sizeof (gchar *) * 2);
+    config->model = g_strdup (xkl_config->model);
+    config->layouts[0] = g_strdup (lightdm_layout_get_name (layout));
+    config->layouts[1] = NULL;
+    if (!xkl_config_rec_activate (config, xkl_engine))
+        g_warning ("Failed to activate XKL config");
+    g_object_unref (config);
+}
+
+/**
+ * lightdm_get_layout:
+ *
+ * Get the current keyboard layout.
+ *
+ * Return value: (transfer none): The currently active layout for this user.
+ **/
+LightDMLayout *
+lightdm_get_layout (void)
+{
+    lightdm_get_layouts ();
+    if (layouts)
+        return (LightDMLayout *) g_list_first (layouts);
+    else
+        return NULL;
+}
+
 /**
  * lightdm_layout_get_name:
  * @layout: A #LightDMLayout
index 8373b5cd133a402329461c50cbab40f6762c860b..051a1eee1a1ede4b1b2fc1df68c57f3435924ee8 100644 (file)
@@ -1,24 +1,30 @@
 [CCode (cprefix = "LightDM", lower_case_cprefix = "lightdm_", cheader_filename = "lightdm/greeter.h")]
 namespace LightDM {
+    public unowned string hostname { get; }
+    public unowned string default_language { get; }
+    public unowned GLib.List<weak LightDM.Language> get_languages ();
+    public unowned GLib.List<weak LightDM.Layout> get_layouts ();
+    public unowned string layout { get; set; }
+    public bool can_suspend { get; }
+    public void suspend ();
+    public bool can_hibernate { get; }
+    public void hibernate ();
+    public bool can_restart { get; }
+    public void restart ();
+    public bool can_shutdown { get; }
+    public void shutdown ();
+
     public class Greeter : GLib.Object {
         public Greeter ();
-        public virtual signal void connected ();
-        public virtual signal void show_message (string text, MessageType type);
-        public virtual signal void show_prompt (string text, PromptType type);
-        public virtual signal void authentication_complete ();
-        public virtual signal void session_failed ();
-        public virtual signal void autologin_timer_expired ();
-        public virtual signal void user_added ();
-        public virtual signal void user_changed ();
-        public virtual signal void user_removed ();
-        public virtual signal void quit ();
+        public signal void connected ();
+        public signal void show_message (string text, MessageType type);
+        public signal void show_prompt (string text, PromptType type);
+        public signal void authentication_complete ();
+        public signal void session_failed ();
+        public signal void autologin_timer_expired ();
+        public signal void quit ();
 
         public bool connect_to_server ();
-        public unowned string hostname { get; }
-        public unowned string default_language { get; }
-        public unowned GLib.List<weak LightDM.Language> get_languages ();
-        public unowned GLib.List<weak LightDM.Layout> get_layouts ();
-        public unowned string layout { get; set; }
         public unowned string get_hint (string name);
         public unowned string default_session_hint { get; };
         public bool hide_users_hint { get; };
@@ -29,9 +35,8 @@ namespace LightDM {
         public bool autologin_guest_hint { get; };
         public int autologin_timeout_hint { get; };
         public void cancel_timed_login ();
-        public void login (string username);
-        public void login_with_user_prompt ();
-        public void login_as_guest ();
+        public void authenticate (string? username = null);
+        public void authenticate_as_guest ();
         public void respond (string response);
         public void cancel_authentication ();
         public bool in_authentication { get; }
@@ -39,14 +44,6 @@ namespace LightDM {
         public unowned string authentication_user { get; }
         public void start_session (string? session);
         public void start_default_session ();
-        public bool can_suspend { get; }
-        public void suspend ();
-        public bool can_hibernate { get; }
-        public void hibernate ();
-        public bool can_restart { get; }
-        public void restart ();
-        public bool can_shutdown { get; }
-        public void shutdown ();
     }
     public enum MessageType {
         INFO,
@@ -72,12 +69,18 @@ namespace LightDM {
         public unowned string name { get; }
     }
     public class UserList : GLib.Object {
+        public signal void user_added (User user);
+        public signal void user_changed (User user);
+        public signal void user_removed (User user);
+
         public UserList ();
         public int num_users { get; }
         public unowned GLib.List<weak LightDM.User> get_users ();
         public unowned LightDM.User get_user_by_name (string username);
     }
     public class User : GLib.Object {
+        public signal void changed ();
+
         public unowned string display_name { get; }
         public unowned string image { get; }
         public unowned string language { get; }
diff --git a/liblightdm-gobject/lightdm.h b/liblightdm-gobject/lightdm.h
new file mode 100644 (file)
index 0000000..a23ecdf
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2010-2011 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
+ * license.
+ */
+
+#ifndef _LIGHTDM_H_
+#define _LIGHTDM_H_
+
+#include "lightdm/greeter.h"
+#include "lightdm/language.h"
+#include "lightdm/layout.h"
+#include "lightdm/power.h"
+#include "lightdm/session.h"
+#include "lightdm/system.h"
+#include "lightdm/user.h"
+
+G_END_DECLS
+
+#endif /* _LIGHTDM_H_ */
diff --git a/liblightdm-gobject/lightdm/Makefile.am b/liblightdm-gobject/lightdm/Makefile.am
deleted file mode 100644 (file)
index ca20dda..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-liblightdm_gobject_1include_HEADERS = \
-       greeter.h \
-       language.h \
-       layout.h \
-       session.h \
-       user.h
-liblightdm_gobject_1includedir=$(includedir)/lightdm-gobject-1/lightdm
-
-DISTCLEANFILES = \
-       Makefile.in 
index 54a6b7c4786fe835244ba2876caec751466f6e24..f8b9827643162fd046958262043de0f37807ef6c 100644 (file)
 
 #include <glib-object.h>
 
-#include "user-list.h"
-#include "language.h"
-#include "layout.h"
-#include "session.h"
-
 G_BEGIN_DECLS
 
 #define LIGHTDM_TYPE_GREETER            (lightdm_greeter_get_type())
@@ -74,20 +69,6 @@ LightDMGreeter *lightdm_greeter_new (void);
 
 gboolean lightdm_greeter_connect_to_server (LightDMGreeter *greeter);
 
-const gchar *lightdm_greeter_get_hostname (LightDMGreeter *greeter);
-
-const gchar *lightdm_greeter_get_default_language (LightDMGreeter *greeter);
-
-GList *lightdm_greeter_get_languages (LightDMGreeter *greeter);
-
-GList *lightdm_greeter_get_layouts (LightDMGreeter *greeter);
-
-void lightdm_greeter_set_layout (LightDMGreeter *greeter, const gchar *layout);
-
-const gchar *lightdm_greeter_get_layout (LightDMGreeter *greeter);
-
-GList *lightdm_greeter_get_sessions (LightDMGreeter *greeter);
-
 const gchar *lightdm_greeter_get_hint (LightDMGreeter *greeter, const gchar *name);
 
 const gchar *lightdm_greeter_get_default_session_hint (LightDMGreeter *greeter);
@@ -106,13 +87,11 @@ gboolean lightdm_greeter_get_autologin_guest_hint (LightDMGreeter *greeter);
 
 gint lightdm_greeter_get_autologin_timeout_hint (LightDMGreeter *greeter);
 
-void lightdm_greeter_cancel_timed_login (LightDMGreeter *greeter);
-
-void lightdm_greeter_login (LightDMGreeter *greeter, const char *username);
+void lightdm_greeter_cancel_autologin (LightDMGreeter *greeter);
 
-void lightdm_greeter_login_with_user_prompt (LightDMGreeter *greeter);
+void lightdm_greeter_authenticate (LightDMGreeter *greeter, const char *username);
 
-void lightdm_greeter_login_as_guest (LightDMGreeter *greeter);
+void lightdm_greeter_authenticate_as_guest (LightDMGreeter *greeter);
 
 void lightdm_greeter_respond (LightDMGreeter *greeter, const gchar *response);
 
@@ -128,22 +107,6 @@ void lightdm_greeter_start_session (LightDMGreeter *greeter, const gchar *sessio
 
 void lightdm_greeter_start_default_session (LightDMGreeter *greeter);
 
-gboolean lightdm_greeter_get_can_suspend (LightDMGreeter *greeter);
-
-void lightdm_greeter_suspend (LightDMGreeter *greeter);
-
-gboolean lightdm_greeter_get_can_hibernate (LightDMGreeter *greeter);
-
-void lightdm_greeter_hibernate (LightDMGreeter *greeter);
-
-gboolean lightdm_greeter_get_can_restart (LightDMGreeter *greeter);
-
-void lightdm_greeter_restart (LightDMGreeter *greeter);
-
-gboolean lightdm_greeter_get_can_shutdown (LightDMGreeter *greeter);
-
-void lightdm_greeter_shutdown (LightDMGreeter *greeter);
-
 G_END_DECLS
 
 #endif /* _LIGHTDM_GREETER_H_ */
index e8a340088ecd25b8b4f86fa0a981959485d2e45f..490f20f99adb92d581687b542f36be88dfde1314 100644 (file)
@@ -35,6 +35,10 @@ typedef struct
 
 GType lightdm_language_get_type (void);
 
+GList *lightdm_get_languages (void);
+
+const LightDMLanguage *lightdm_get_language (void);
+
 const gchar *lightdm_language_get_code (LightDMLanguage *language);
 
 const gchar *lightdm_language_get_name (LightDMLanguage *language);
index f98dbe20e657be140bd0f887454ee41e253d29e4..aea4380540139e57b8aabac0003f1b6baa1b2729 100644 (file)
@@ -35,6 +35,12 @@ typedef struct
 
 GType lightdm_layout_get_type (void);
 
+GList *lightdm_get_layouts (void);
+
+void lightdm_set_layout (LightDMLayout *layout);
+
+LightDMLayout *lightdm_get_layout (void);
+
 const gchar *lightdm_layout_get_name (LightDMLayout *layout);
 
 const gchar *lightdm_layout_get_short_description (LightDMLayout *layout);
diff --git a/liblightdm-gobject/lightdm/power.h b/liblightdm-gobject/lightdm/power.h
new file mode 100644 (file)
index 0000000..7d37c1c
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2010-2011 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
+ * license.
+ */
+
+#ifndef _LIGHTDM_POWER_H_
+#define _LIGHTDM_POWER_H_
+
+gboolean lightdm_get_can_suspend (void);
+
+void lightdm_suspend (void);
+
+gboolean lightdm_get_can_hibernate (void);
+
+void lightdm_hibernate (void);
+
+gboolean lightdm_get_can_restart (void);
+
+void lightdm_restart (void);
+
+gboolean lightdm_get_can_shutdown (void);
+
+void lightdm_shutdown (void);
+
+G_END_DECLS
+
+#endif /* _LIGHTDM_POWER_H_ */
index 4f9d4a2fc296701c6b1d07236d217438faa8c993..4835299b72f6f479c5853f15047d6c4870cc8f44 100644 (file)
@@ -35,6 +35,8 @@ typedef struct
 
 GType lightdm_session_get_type (void);
 
+GList *lightdm_get_sessions (void);
+
 const gchar *lightdm_session_get_key (LightDMSession *session);
 
 const gchar *lightdm_session_get_name (LightDMSession *session);
diff --git a/liblightdm-gobject/lightdm/system.h b/liblightdm-gobject/lightdm/system.h
new file mode 100644 (file)
index 0000000..f070ec8
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2010-2011 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
+ * license.
+ */
+
+#ifndef _LIGHTDM_HOSTNAME_H_
+#define _LIGHTDM_HOSTNAME_H_
+
+#include <glib-object.h>
+
+const gchar *lightdm_get_hostname (void);
+
+G_END_DECLS
+
+#endif /* _LIGHTDM_HOSTNAME_H_ */
diff --git a/liblightdm-gobject/lightdm/user-list.h b/liblightdm-gobject/lightdm/user-list.h
deleted file mode 100644 (file)
index 76e4460..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2010 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- *
- * This library is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 3 of the License, or (at your option) any
- * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
- * license.
- */
-
-#ifndef _LIGHTDM_USER_LIST_H_
-#define _LIGHTDM_USER_LIST_H_
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define LIGHTDM_TYPE_USER_LIST            (lightdm_user_list_get_type())
-#define LIGHTDM_USER_LIST(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserList));
-#define LIGHTDM_USER_LIST_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), LIGHTDM_TYPE_USER_LIST, LightDMUserListClass))
-#define LIGHTDM_IS_USER_LIST(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIGHTDM_TYPE_USER_LIST))
-#define LIGHTDM_IS_USER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIGHTDM_TYPE_USER_LIST))
-#define LIGHTDM_USER_LIST_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserListClass))
-
-#include "user.h"
-
-typedef struct
-{
-    GObject parent_instance;
-} LightDMUserList;
-
-typedef struct
-{
-    GObjectClass parent_class;
-
-    void (*user_added)(LightDMUserList *user_list, LightDMUser *user);
-    void (*user_changed)(LightDMUserList *user_list, LightDMUser *user);
-    void (*user_removed)(LightDMUserList *user_list, LightDMUser *user);
-} LightDMUserListClass;
-
-GType lightdm_user_list_get_type (void);
-
-LightDMUserList *lightdm_user_list_new (void);
-
-gint lightdm_user_list_get_num_users (LightDMUserList *user_list);
-
-LightDMUser *lightdm_user_list_get_user_by_name (LightDMUserList *user_list, const gchar *username);
-
-GList *lightdm_user_list_get_users (LightDMUserList *user_list);
-
-G_END_DECLS
-
-#endif /* _LIGHTDM_USER_LIST_H_ */
index 6e6e1eb7e891331e14cc565a4103a681ff081ac9..20e37299ffaa4f106e593697e15ba8cccc7c0f7b 100644 (file)
 
 G_BEGIN_DECLS
 
+#define LIGHTDM_TYPE_USER_LIST            (lightdm_user_list_get_type())
+#define LIGHTDM_USER_LIST(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserList));
+#define LIGHTDM_USER_LIST_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), LIGHTDM_TYPE_USER_LIST, LightDMUserListClass))
+#define LIGHTDM_IS_USER_LIST(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LIGHTDM_TYPE_USER_LIST))
+#define LIGHTDM_IS_USER_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LIGHTDM_TYPE_USER_LIST))
+#define LIGHTDM_USER_LIST_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserListClass))
+
 #define LIGHTDM_TYPE_USER            (lightdm_user_get_type())
 #define LIGHTDM_USER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIGHTDM_TYPE_USER, LightDMUser));
 #define LIGHTDM_USER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), LIGHTDM_TYPE_USER, LightDMUserClass))
@@ -34,8 +41,32 @@ typedef struct
     void (*changed)(LightDMUser *user);
 } LightDMUserClass;
 
+typedef struct
+{
+    GObject parent_instance;
+} LightDMUserList;
+
+typedef struct
+{
+    GObjectClass parent_class;
+
+    void (*user_added)(LightDMUserList *user_list, LightDMUser *user);
+    void (*user_changed)(LightDMUserList *user_list, LightDMUser *user);
+    void (*user_removed)(LightDMUserList *user_list, LightDMUser *user);
+} LightDMUserListClass;
+
+GType lightdm_user_list_get_type (void);
+
 GType lightdm_user_get_type (void);
 
+LightDMUserList *lightdm_user_list_get_instance (void);
+
+gint lightdm_user_list_get_length (LightDMUserList *user_list);
+
+LightDMUser *lightdm_user_list_get_user_by_name (LightDMUserList *user_list, const gchar *username);
+
+GList *lightdm_user_list_get_users (LightDMUserList *user_list);
+
 const gchar *lightdm_user_get_name (LightDMUser *user);
 
 const gchar *lightdm_user_get_real_name (LightDMUser *user);
diff --git a/liblightdm-gobject/power.c b/liblightdm-gobject/power.c
new file mode 100644 (file)
index 0000000..fb0cc96
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2010-2011 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
+ * license.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <gio/gio.h>
+
+#include "lightdm/power.h"
+
+static GDBusProxy *upower_proxy = NULL;
+static GDBusProxy *ck_proxy = NULL;
+
+static gboolean
+upower_call_function (const gchar *function, gboolean has_result)
+{
+    GVariant *result;
+    gboolean function_result = FALSE;
+    GError *error = NULL;
+
+    if (!upower_proxy)
+    {
+        upower_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                      G_DBUS_PROXY_FLAGS_NONE,
+                                                      NULL,
+                                                      "org.freedesktop.UPower",
+                                                      "/org/freedesktop/UPower",
+                                                      "org.freedesktop.UPower",
+                                                      NULL,
+                                                      &error);
+        if (!upower_proxy)
+            g_warning ("Error getting UPower proxy: %s", error->message);
+        g_clear_error (&error);
+        if (!upower_proxy)
+            return FALSE;
+    }
+
+    result = g_dbus_proxy_call_sync (upower_proxy,
+                                     function,
+                                     NULL,
+                                     G_DBUS_CALL_FLAGS_NONE,
+                                     -1,
+                                     NULL,
+                                     &error);
+    if (!result)
+        g_warning ("Error calling UPower function %s: %s", function, error->message);
+    g_clear_error (&error);
+    if (!result)
+        return FALSE;
+
+    if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
+        g_variant_get (result, "(b)", &function_result);
+
+    g_variant_unref (result);
+    return function_result;
+}
+
+/**
+ * lightdm_get_can_suspend:
+ *
+ * Checks if authorized to do a system suspend.
+ *
+ * Return value: #TRUE if can suspend the system
+ **/
+gboolean
+lightdm_get_can_suspend (void)
+{
+    return upower_call_function ("SuspendAllowed", TRUE);
+}
+
+/**
+ * lightdm_suspend:
+ *
+ * Triggers a system suspend.
+ **/
+void
+lightdm_suspend (void)
+{
+    upower_call_function ("Suspend", FALSE);
+}
+
+/**
+ * lightdm_get_can_hibernate:
+ *
+ * Checks if is authorized to do a system hibernate.
+ *
+ * Return value: #TRUE if can hibernate the system
+ **/
+gboolean
+lightdm_get_can_hibernate (void)
+{
+    return upower_call_function ("HibernateAllowed", TRUE);
+}
+
+/**
+ * lightdm_hibernate:
+ *
+ * Triggers a system hibernate.
+ **/
+void
+lightdm_hibernate (void)
+{
+    upower_call_function ("Hibernate", FALSE);
+}
+
+static gboolean
+ck_call_function (const gchar *function, gboolean has_result)
+{
+    GVariant *result;
+    gboolean function_result = FALSE;
+    GError *error = NULL;
+
+    if (!upower_proxy)
+    {
+        ck_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                  G_DBUS_PROXY_FLAGS_NONE,
+                                                  NULL,
+                                                  "org.freedesktop.ConsoleKit",
+                                                  "/org/freedesktop/ConsoleKit/Manager",
+                                                  "org.freedesktop.ConsoleKit.Manager",
+                                                  NULL,
+                                                  &error);
+        if (!ck_proxy)
+            g_warning ("Error getting ConsoleKit proxy: %s", error->message);
+        g_clear_error (&error);
+        if (!ck_proxy)
+            return FALSE;
+    }
+
+    result = g_dbus_proxy_call_sync (ck_proxy,
+                                     function,
+                                     NULL,
+                                     G_DBUS_CALL_FLAGS_NONE,
+                                     -1,
+                                     NULL,
+                                     &error);
+
+    if (!result)
+        g_warning ("Error calling ConsoleKit function %s: %s", function, error->message);
+    g_clear_error (&error);
+    if (!result)
+        return FALSE;
+
+    if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(b)")))
+        g_variant_get (result, "(b)", &function_result);
+
+    g_variant_unref (result);
+    return function_result;
+}
+
+/**
+ * lightdm_get_can_restart:
+ *
+ * Checks if is authorized to do a system restart.
+ *
+ * Return value: #TRUE if can restart the system
+ **/
+gboolean
+lightdm_get_can_restart (void)
+{
+    return ck_call_function ("CanRestart", TRUE);
+}
+
+/**
+ * lightdm_restart:
+ *
+ * Triggers a system restart.
+ **/
+void
+lightdm_restart (void)
+{
+    ck_call_function ("Restart", FALSE);
+}
+
+/**
+ * lightdm_get_can_shutdown:
+ *
+ * Checks if is authorized to do a system shutdown.
+ *
+ * Return value: #TRUE if can shutdown the system
+ **/
+gboolean
+lightdm_get_can_shutdown (void)
+{
+    return ck_call_function ("CanStop", TRUE);
+}
+
+/**
+ * lightdm_shutdown:
+ *
+ * Triggers a system shutdown.
+ **/
+void
+lightdm_shutdown (void)
+{
+    ck_call_function ("Stop", FALSE);
+}
index 932db539c5c5d1cde93775ed930de32839e2564c..6b99dbdea5b81d22939a5ee0d915e26df522f19e 100644 (file)
@@ -9,6 +9,9 @@
  * license.
  */
 
+#include <string.h>
+#include <gio/gdesktopappinfo.h>
+
 #include "lightdm/session.h"
 
 enum {
@@ -29,6 +32,98 @@ G_DEFINE_TYPE (LightDMSession, lightdm_session, G_TYPE_OBJECT);
 
 #define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_SESSION, LightDMSessionPrivate)
 
+static gboolean have_sessions = FALSE;
+static GList *sessions = NULL;
+
+static void
+update_sessions (void)
+{
+    GDir *directory;
+    GError *error = NULL;
+
+    if (have_sessions)
+        return;
+
+    directory = g_dir_open (XSESSIONS_DIR, 0, &error);
+    if (!directory)
+        g_warning ("Failed to open sessions directory: %s", error->message);
+    g_clear_error (&error);
+    if (!directory)
+        return;
+
+    while (TRUE)
+    {
+        const gchar *filename;
+        GKeyFile *key_file;
+        gchar *key, *path;
+        gboolean result;
+
+        filename = g_dir_read_name (directory);
+        if (filename == NULL)
+            break;
+
+        if (!g_str_has_suffix (filename, ".desktop"))
+            continue;
+
+        key = g_strndup (filename, strlen (filename) - strlen (".desktop"));
+        path = g_build_filename (XSESSIONS_DIR, filename, NULL);
+        g_debug ("Loading session %s", path);
+
+        key_file = g_key_file_new ();
+        result = g_key_file_load_from_file (key_file, path, G_KEY_FILE_NONE, &error);
+        if (!result)
+            g_warning ("Failed to load session file %s: %s:", path, error->message);
+        g_clear_error (&error);
+
+        if (result && !g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, NULL))
+        {
+            gchar *domain, *name, *comment;
+
+#ifdef G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN
+            domain = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN, NULL);
+#else
+            domain = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP, "X-GNOME-Gettext-Domain", NULL);
+#endif
+            name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, domain, NULL);
+            comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, domain, NULL);
+            if (!comment)
+                comment = g_strdup ("");
+            if (name)
+            {
+                g_debug ("Loaded session %s (%s, %s)", key, name, comment);
+                sessions = g_list_append (sessions, g_object_new (LIGHTDM_TYPE_SESSION, "key", key, "name", name, "comment", comment, NULL));
+            }
+            else
+                g_warning ("Invalid session %s: %s", path, error->message);
+            g_free (domain);
+            g_free (name);
+            g_free (comment);
+        }
+
+        g_free (key);
+        g_free (path);
+        g_key_file_free (key_file);
+    }
+
+    g_dir_close (directory);
+
+    have_sessions = TRUE;
+}
+
+/**
+ * lightdm_get_sessions:
+ *
+ * Get the available sessions.
+ *
+ * Return value: (element-type LightDMSession) (transfer none): A list of #LightDMSession
+ **/
+GList *
+lightdm_get_sessions (void)
+{
+    update_sessions ();
+    return sessions;
+}
+
 /**
  * lightdm_session_get_key
  * @session: A #LightDMSession
diff --git a/liblightdm-gobject/system.c b/liblightdm-gobject/system.c
new file mode 100644 (file)
index 0000000..1a33958
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010-2011 Robert Ancell.
+ * Author: Robert Ancell <robert.ancell@canonical.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 3 of the License, or (at your option) any
+ * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
+ * license.
+ */
+
+#include <sys/utsname.h>
+
+#include "lightdm/system.h"
+
+static gchar *hostname = NULL;
+
+/**
+ * lightdm_get_hostname:
+ *
+ * Return value: The name of the host we are running on.
+ **/
+const gchar *
+lightdm_get_hostname (void)
+{
+    if (!hostname)
+    {
+        struct utsname info;
+        uname (&info);
+        hostname = g_strdup (info.nodename);
+    }
+
+    return hostname;
+}
index 1acca8183146702e5069807679a03a67974190d0..ba8759bef00743215a1a50eed8f6cb427dd06d09 100644 (file)
@@ -560,13 +560,13 @@ update_users (LightDMUserList *user_list)
 }
 
 /**
- * lightdm_user_list_get_num_users:
+ * lightdm_user_list_get_length:
  * @user_list: a #LightDMUserList
  *
  * Return value: The number of users able to log in
  **/
 gint
-lightdm_user_list_get_num_users (LightDMUserList *user_list)
+lightdm_user_list_get_length (LightDMUserList *user_list)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), 0);
     update_users (user_list);
@@ -636,7 +636,7 @@ lightdm_user_list_get_property (GObject    *object,
 
     switch (prop_id) {
     case PROP_NUM_USERS:
-        g_value_set_int (value, lightdm_user_list_get_num_users (self));
+        g_value_set_int (value, lightdm_user_list_get_length (self));
         break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
index 9641fcbfb0665223ea1ec47c1496a67cd3c45eea..6d172ed7cc5285999684b51d643a5b1da271be59 100644 (file)
@@ -9,28 +9,70 @@
  * license.
  */
 
+#include <config.h>
+
+#include <errno.h>
 #include <string.h>
+#include <sys/utsname.h>
+#include <pwd.h>
+#include <gio/gio.h>
 
 #include "lightdm/user.h"
 
 enum {
-    PROP_0,
-    PROP_NAME,
-    PROP_REAL_NAME,
-    PROP_DISPLAY_NAME,
-    PROP_HOME_DIRECTORY,
-    PROP_IMAGE,
-    PROP_LANGUAGE,
-    PROP_LAYOUT,
-    PROP_SESSION,
-    PROP_LOGGED_IN
+    LIST_PROP_0,
+    LIST_PROP_NUM_USERS,
+    LIST_PROP_USERS,
+};
+
+enum {
+    USER_PROP_0,
+    USER_PROP_NAME,
+    USER_PROP_REAL_NAME,
+    USER_PROP_DISPLAY_NAME,
+    USER_PROP_HOME_DIRECTORY,
+    USER_PROP_IMAGE,
+    USER_PROP_LANGUAGE,
+    USER_PROP_LAYOUT,
+    USER_PROP_SESSION,
+    USER_PROP_LOGGED_IN
+};
+
+enum {
+    USER_ADDED,
+    USER_CHANGED,
+    USER_REMOVED,
+    LAST_LIST_SIGNAL
 };
+static guint list_signals[LAST_LIST_SIGNAL] = { 0 };
 
 enum {
     CHANGED,
-    LAST_SIGNAL
+    LAST_USER_SIGNAL
 };
-static guint signals[LAST_SIGNAL] = { 0 };
+static guint user_signals[LAST_USER_SIGNAL] = { 0 };
+
+typedef struct
+{
+    /* Connection to AccountsService */
+    GDBusProxy *accounts_service_proxy;
+    GList *user_account_objects;
+
+    /* File monitor for password file */
+    GFileMonitor *passwd_monitor;
+  
+    /* TRUE if have scanned users */
+    gboolean have_users;
+
+    /* List of users */
+    GList *users;
+} LightDMUserListPrivate;
+
+typedef struct
+{
+    GDBusProxy *proxy;
+    LightDMUser *user;
+} UserAccountObject;
 
 typedef struct
 {
@@ -46,9 +88,683 @@ typedef struct
     gchar *session;
 } LightDMUserPrivate;
 
+G_DEFINE_TYPE (LightDMUserList, lightdm_user_list, G_TYPE_OBJECT);
 G_DEFINE_TYPE (LightDMUser, lightdm_user, G_TYPE_OBJECT);
 
-#define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_USER, LightDMUserPrivate)
+#define GET_LIST_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserListPrivate)
+#define GET_USER_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_USER, LightDMUserPrivate)
+
+#define PASSWD_FILE      "/etc/passwd"
+#define USER_CONFIG_FILE "/etc/lightdm/users.conf"
+
+static LightDMUserList *singleton = NULL;
+
+/**
+ * lightdm_user_list_get_instance:
+ *
+ * Get the user list.
+ *
+ * Return value: the #LightDMUserList
+ **/
+LightDMUserList *
+lightdm_user_list_get_instance (void)
+{
+    if (!singleton)
+        singleton = g_object_new (LIGHTDM_TYPE_USER_LIST, NULL);
+    return singleton;
+}
+
+static LightDMUser *
+get_user_by_name (LightDMUserList *user_list, const gchar *username)
+{
+    LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
+    GList *link;
+  
+    for (link = priv->users; link; link = link->next)
+    {
+        LightDMUser *user = link->data;
+        if (strcmp (lightdm_user_get_name (user), username) == 0)
+            return user;
+    }
+
+    return NULL;
+}
+  
+static gint
+compare_user (gconstpointer a, gconstpointer b)
+{
+    LightDMUser *user_a = (LightDMUser *) a, *user_b = (LightDMUser *) b;
+    return strcmp (lightdm_user_get_display_name (user_a), lightdm_user_get_display_name (user_b));
+}
+
+static gboolean
+update_passwd_user (LightDMUser *user, const gchar *real_name, const gchar *home_directory, const gchar *image, gboolean logged_in)
+{
+    if (g_strcmp0 (lightdm_user_get_real_name (user), real_name) == 0 &&
+        g_strcmp0 (lightdm_user_get_home_directory (user), home_directory) == 0 &&
+        g_strcmp0 (lightdm_user_get_image (user), image) == 0 &&
+        lightdm_user_get_logged_in (user) == logged_in)
+        return FALSE;
+
+    g_object_set (user, "real-name", real_name, "home-directory", home_directory, "image", image, "logged-in", logged_in, NULL);
+
+    return TRUE;
+}
+
+static void
+user_changed_cb (LightDMUser *user, LightDMUserList *user_list)
+{
+    g_signal_emit (user_list, list_signals[USER_CHANGED], 0, user);
+}
+
+static void
+load_passwd_file (LightDMUserList *user_list)
+{
+    LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
+    GKeyFile *config;
+    gchar *value;
+    gint minimum_uid;
+    gchar **hidden_users, **hidden_shells;
+    GList *users = NULL, *old_users, *new_users = NULL, *changed_users = NULL, *link;
+    GError *error = NULL;
+
+    g_debug ("Loading user config from %s", USER_CONFIG_FILE);
+
+    config = g_key_file_new ();
+    if (!g_key_file_load_from_file (config, USER_CONFIG_FILE, G_KEY_FILE_NONE, &error) &&
+        !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+        g_warning ("Failed to load configuration from %s: %s", USER_CONFIG_FILE, error->message); // FIXME: Don't make warning on no file, just info
+    g_clear_error (&error);
+
+    if (g_key_file_has_key (config, "UserList", "minimum-uid", NULL))
+        minimum_uid = g_key_file_get_integer (config, "UserList", "minimum-uid", NULL);
+    else
+        minimum_uid = 500;
+
+    value = g_key_file_get_string (config, "UserList", "hidden-users", NULL);
+    if (!value)
+        value = g_strdup ("nobody nobody4 noaccess");
+    hidden_users = g_strsplit (value, " ", -1);
+    g_free (value);
+
+    value = g_key_file_get_string (config, "UserList", "hidden-shells", NULL);
+    if (!value)
+        value = g_strdup ("/bin/false /usr/sbin/nologin");
+    hidden_shells = g_strsplit (value, " ", -1);
+    g_free (value);
+
+    g_key_file_free (config);
+
+    setpwent ();
+
+    while (TRUE)
+    {
+        struct passwd *entry;
+        LightDMUser *user;
+        char **tokens;
+        gchar *real_name, *image;
+        int i;
+
+        errno = 0;
+        entry = getpwent ();
+        if (!entry)
+            break;
+
+        /* Ignore system users */
+        if (entry->pw_uid < minimum_uid)
+            continue;
+
+        /* Ignore users disabled by shell */
+        if (entry->pw_shell)
+        {
+            for (i = 0; hidden_shells[i] && strcmp (entry->pw_shell, hidden_shells[i]) != 0; i++);
+            if (hidden_shells[i])
+                continue;
+        }
+
+        /* Ignore certain users */
+        for (i = 0; hidden_users[i] && strcmp (entry->pw_name, hidden_users[i]) != 0; i++);
+        if (hidden_users[i])
+            continue;
+
+        tokens = g_strsplit (entry->pw_gecos, ",", -1);
+        if (tokens[0] != NULL && tokens[0][0] != '\0')
+            real_name = g_strdup (tokens[0]);
+        else
+            real_name = NULL;
+        g_strfreev (tokens);
+      
+        image = g_build_filename (entry->pw_dir, ".face", NULL);
+        if (!g_file_test (image, G_FILE_TEST_EXISTS))
+        {
+            g_free (image);
+            image = g_build_filename (entry->pw_dir, ".face.icon", NULL);
+            if (!g_file_test (image, G_FILE_TEST_EXISTS))
+            {
+                g_free (image);
+                image = NULL;
+            }
+        }
+
+        user = g_object_new (LIGHTDM_TYPE_USER, "name", entry->pw_name, "real-name", real_name, "home-directory", entry->pw_dir, "image", image, "logged-in", FALSE, NULL);
+        g_free (real_name);
+        g_free (image);
+
+        /* Update existing users if have them */
+        for (link = priv->users; link; link = link->next)
+        {
+            LightDMUser *info = link->data;
+            if (strcmp (lightdm_user_get_name (info), lightdm_user_get_name (user)) == 0)
+            {
+                if (update_passwd_user (info, lightdm_user_get_real_name (user), lightdm_user_get_home_directory (user), lightdm_user_get_image (user), lightdm_user_get_logged_in (user)))
+                    changed_users = g_list_insert_sorted (changed_users, info, compare_user);
+                g_object_unref (user);
+                user = info;
+                break;
+            }
+        }
+        if (!link)
+        {
+            /* Only notify once we have loaded the user list */
+            if (priv->have_users)
+                new_users = g_list_insert_sorted (new_users, user, compare_user);
+        }
+        users = g_list_insert_sorted (users, user, compare_user);
+    }
+    g_strfreev (hidden_users);
+    g_strfreev (hidden_shells);
+
+    if (errno != 0)
+        g_warning ("Failed to read password database: %s", strerror (errno));
+
+    endpwent ();
+
+    /* Use new user list */
+    old_users = priv->users;
+    priv->users = users;
+  
+    /* Notify of changes */
+    for (link = new_users; link; link = link->next)
+    {
+        LightDMUser *info = link->data;
+        g_debug ("User %s added", lightdm_user_get_name (info));
+        g_signal_connect (info, "changed", G_CALLBACK (user_changed_cb), user_list);
+        g_signal_emit (user_list, list_signals[USER_ADDED], 0, info);
+    }
+    g_list_free (new_users);
+    for (link = changed_users; link; link = link->next)
+    {
+        LightDMUser *info = link->data;
+        g_debug ("User %s changed", lightdm_user_get_name (info));
+        g_signal_emit_by_name (info, "changed");
+    }
+    g_list_free (changed_users);
+    for (link = old_users; link; link = link->next)
+    {
+        GList *new_link;
+
+        /* See if this user is in the current list */
+        for (new_link = priv->users; new_link; new_link = new_link->next)
+        {
+            if (new_link->data == link->data)
+                break;
+        }
+
+        if (!new_link)
+        {
+            LightDMUser *info = link->data;
+            g_debug ("User %s removed", lightdm_user_get_name (info));
+            g_signal_emit (user_list, list_signals[USER_REMOVED], 0, info);
+            g_object_unref (info);
+        }
+    }
+    g_list_free (old_users);
+}
+
+static void
+passwd_changed_cb (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, LightDMUserList *user_list)
+{
+    if (event_type == G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
+    {
+        g_debug ("%s changed, reloading user list", g_file_get_path (file));
+        load_passwd_file (user_list);
+    }
+}
+
+static gboolean
+update_user (UserAccountObject *object)
+{
+    GVariant *result, *value;
+    GVariantIter *iter;
+    gchar *name;
+    GError *error = NULL;
+
+    result = g_dbus_connection_call_sync (g_dbus_proxy_get_connection (object->proxy),
+                                          "org.freedesktop.Accounts",
+                                          g_dbus_proxy_get_object_path (object->proxy),
+                                          "org.freedesktop.DBus.Properties",
+                                          "GetAll",
+                                          g_variant_new ("(s)", "org.freedesktop.Accounts.User"),
+                                          G_VARIANT_TYPE ("(a{sv})"),
+                                          G_DBUS_CALL_FLAGS_NONE,
+                                          -1,
+                                          NULL,
+                                          &error);
+    if (!result)
+        g_warning ("Error updating user %s: %s", g_dbus_proxy_get_object_path (object->proxy), error->message);
+    g_clear_error (&error);
+    if (!result)
+        return FALSE;
+
+    g_variant_get (result, "(a{sv})", &iter);
+    while (g_variant_iter_loop (iter, "{&sv}", &name, &value))
+    {
+        g_debug ("%s=?", name);
+        if (strcmp (name, "UserName") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
+        {
+            gchar *user_name;
+            g_variant_get (value, "&s", &user_name);
+            g_object_set (object->user, "name", user_name, NULL);
+        }
+        else if (strcmp (name, "RealName") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
+        {
+            gchar *real_name;
+            g_variant_get (value, "&s", &real_name);
+            g_object_set (object->user, "real-name", real_name, NULL);
+        }
+        else if (strcmp (name, "HomeDirectory") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
+        {
+            gchar *home_directory;
+            g_variant_get (value, "&s", &home_directory);
+            g_object_set (object->user, "home-directory", home_directory, NULL);
+        }
+        else if (strcmp (name, "IconFile") == 0 && g_variant_is_of_type (value, G_VARIANT_TYPE_STRING))
+        {
+            gchar *icon_file;
+            g_variant_get (value, "&s", &icon_file);
+            g_object_set (object->user, "image", icon_file, NULL);
+        }
+    }
+    g_debug ("!1");
+    g_variant_iter_free (iter);
+    g_debug ("!2");
+
+    g_variant_unref (result);
+    g_debug ("!3");
+
+    return TRUE;
+}
+
+static void
+user_signal_cb (GDBusProxy *proxy, gchar *sender_name, gchar *signal_name, GVariant *parameters, UserAccountObject *object)
+{
+    if (strcmp (signal_name, "Changed") == 0)
+    {
+        if (g_variant_is_of_type (parameters, G_VARIANT_TYPE ("()")))
+        {
+            g_debug ("User %s changed", g_dbus_proxy_get_object_path (object->proxy));
+            update_user (object);
+            g_signal_emit_by_name (object->user, "changed");
+        }
+        else
+            g_warning ("Got org.freedesktop.Accounts.User signal Changed with unknown parameters %s", g_variant_get_type_string (parameters));
+    }
+}
+
+static UserAccountObject *
+user_account_object_new (const gchar *path)
+{
+    GDBusProxy *proxy;
+    UserAccountObject *object;
+    GError *error = NULL;
+
+    proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                           G_DBUS_PROXY_FLAGS_NONE,
+                                           NULL,
+                                           "org.freedesktop.Accounts",
+                                           path,
+                                           "org.freedesktop.Accounts.User",
+                                           NULL,
+                                           &error);
+    if (!proxy)
+        g_warning ("Error getting user %s: %s", path, error->message);
+    g_clear_error (&error);
+    if (!proxy)
+        return NULL;
+
+    object = g_malloc0 (sizeof (UserAccountObject));  
+    object->user = g_object_new (LIGHTDM_TYPE_USER, NULL);
+    object->proxy = proxy;
+    g_signal_connect (proxy, "g-signal", G_CALLBACK (user_signal_cb), object);
+  
+    return object;
+}
+
+static void
+user_account_object_free (UserAccountObject *object)
+{
+    if (!object)
+        return;
+    g_object_unref (object->user);
+    g_object_unref (object->proxy);
+    g_free (object);
+}
+
+static void
+user_accounts_signal_cb (GDBusProxy *proxy, gchar *sender_name, gchar *signal_name, GVariant *parameters, LightDMUserList *user_list)
+{
+    LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
+  
+    if (strcmp (signal_name, "UserAdded") == 0)
+    {
+        if (g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(o)")))
+        {
+            gchar *path;
+            UserAccountObject *object;
+
+            g_variant_get (parameters, "(&o)", &path);
+            g_debug ("User %s added", path);
+
+            object = user_account_object_new (path);
+            if (object && update_user (object))
+            {
+                priv->user_account_objects = g_list_append (priv->user_account_objects, object);
+                priv->users = g_list_insert_sorted (priv->users, g_object_ref (object->user), compare_user);
+                g_signal_connect (object->user, "changed", G_CALLBACK (user_changed_cb), user_list);
+                g_signal_emit (user_list, list_signals[USER_ADDED], 0, object->user);
+            }
+            else
+                user_account_object_free (object);
+        }
+        else
+            g_warning ("Got UserAccounts signal UserAdded with unknown parameters %s", g_variant_get_type_string (parameters));
+    }
+    else if (strcmp (signal_name, "UserDeleted") == 0)
+    {
+        if (g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(o)")))
+        {
+            gchar *path;
+            GList *link;
+
+            g_variant_get (parameters, "(&o)", &path);
+            g_debug ("User %s deleted", path);
+
+            for (link = priv->user_account_objects; link; link = link->next)
+            {
+                UserAccountObject *object = link->data;
+                if (strcmp (g_dbus_proxy_get_object_path (object->proxy), path) == 0)
+                {
+                    priv->users = g_list_remove (priv->users, object->user);
+                    g_object_unref (object->user);
+
+                    g_signal_emit (user_list, list_signals[USER_REMOVED], 0, object->user);
+
+                    priv->user_account_objects = g_list_remove (priv->user_account_objects, object);
+                    user_account_object_free (object);
+                    break;
+                }
+            }
+        }
+        else
+            g_warning ("Got UserAccounts signal UserDeleted with unknown parameters %s", g_variant_get_type_string (parameters));
+    }
+}
+
+static void
+update_users (LightDMUserList *user_list)
+{
+    LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
+    GFile *passwd_file;
+    GError *error = NULL;
+
+    if (priv->have_users)
+        return;
+    priv->have_users = TRUE;
+
+    priv->accounts_service_proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
+                                                                  G_DBUS_PROXY_FLAGS_NONE,
+                                                                  NULL,
+                                                                  "org.freedesktop.Accounts",
+                                                                  "/org/freedesktop/Accounts",
+                                                                  "org.freedesktop.Accounts",
+                                                                  NULL,
+                                                                  &error);
+    if (!priv->accounts_service_proxy)
+        g_warning ("Error contacting AccountsService: %s", error->message);
+    g_clear_error (&error);
+
+    if (priv->accounts_service_proxy)
+    {
+        GVariant *result;
+
+        g_signal_connect (priv->accounts_service_proxy, "g-signal", G_CALLBACK (user_accounts_signal_cb), user_list);
+
+        result = g_dbus_proxy_call_sync (priv->accounts_service_proxy,
+                                         "ListCachedUsers",
+                                         g_variant_new ("()"),
+                                         G_DBUS_CALL_FLAGS_NONE,
+                                         -1,
+                                         NULL,
+                                         &error);
+        if (!result)
+            g_warning ("Error getting user list from AccountsService: %s", error->message);
+        g_clear_error (&error);
+        if (!result)
+            return;
+
+        if (g_variant_is_of_type (result, G_VARIANT_TYPE ("(ao)")))
+        {
+            GVariantIter *iter;
+            const gchar *path;
+
+            g_debug ("Loading users from AccountsService");
+            g_variant_get (result, "(ao)", &iter);
+            while (g_variant_iter_loop (iter, "&o", &path))
+            {
+                UserAccountObject *object;
+
+                g_debug ("Loading user %s", path);
+
+                object = user_account_object_new (path);
+                if (object && update_user (object))
+                {
+                    priv->user_account_objects = g_list_append (priv->user_account_objects, object);
+                    priv->users = g_list_insert_sorted (priv->users, g_object_ref (object->user), compare_user);
+                    g_signal_connect (object->user, "changed", G_CALLBACK (user_changed_cb), user_list);
+                }
+                else
+                    user_account_object_free (object);
+            }
+            g_variant_iter_free (iter);
+        }
+        else
+            g_warning ("Unexpected type from ListCachedUsers: %s", g_variant_get_type_string (result));
+
+        g_variant_unref (result);
+    }
+    else
+    {
+        load_passwd_file (user_list);
+
+        /* Watch for changes to user list */
+        passwd_file = g_file_new_for_path (PASSWD_FILE);
+        priv->passwd_monitor = g_file_monitor (passwd_file, G_FILE_MONITOR_NONE, NULL, &error);
+        g_object_unref (passwd_file);
+        if (!priv->passwd_monitor)
+            g_warning ("Error monitoring %s: %s", PASSWD_FILE, error->message);
+        else
+            g_signal_connect (priv->passwd_monitor, "changed", G_CALLBACK (passwd_changed_cb), user_list);
+        g_clear_error (&error);
+    }
+}
+
+/**
+ * lightdm_user_list_get_length:
+ * @user_list: a #LightDMUserList
+ *
+ * Return value: The number of users able to log in
+ **/
+gint
+lightdm_user_list_get_length (LightDMUserList *user_list)
+{
+    g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), 0);
+    update_users (user_list);
+    return g_list_length (GET_LIST_PRIVATE (user_list)->users);
+}
+
+/**
+ * lightdm_user_list_get_users:
+ * @user_list: A #LightDMUserList
+ *
+ * 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: (element-type LightDMUser) (transfer none): A list of #LightDMUser that should be presented to the user.
+ **/
+GList *
+lightdm_user_list_get_users (LightDMUserList *user_list)
+{
+    g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), NULL);
+    update_users (user_list);
+    return GET_LIST_PRIVATE (user_list)->users;
+}
+
+/**
+ * lightdm_user_list_get_user_by_name:
+ * @user_list: A #LightDMUserList
+ * @username: Name of user to get.
+ *
+ * Get infomation about a given user or #NULL if this user doesn't exist.
+ *
+ * Return value: (transfer none): A #LightDMUser entry for the given user.
+ **/
+LightDMUser *
+lightdm_user_list_get_user_by_name (LightDMUserList *user_list, const gchar *username)
+{
+    g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), NULL);
+    g_return_val_if_fail (username != NULL, NULL);
+
+    update_users (user_list);
+
+    return get_user_by_name (user_list, username);
+}
+
+static void
+lightdm_user_list_init (LightDMUserList *user_list)
+{
+}
+
+static void
+lightdm_user_list_set_property (GObject      *object,
+                          guint         prop_id,
+                          const GValue *value,
+                          GParamSpec   *pspec)
+{
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+}
+
+static void
+lightdm_user_list_get_property (GObject    *object,
+                          guint       prop_id,
+                          GValue     *value,
+                          GParamSpec *pspec)
+{
+    LightDMUserList *self;
+
+    self = LIGHTDM_USER_LIST (object);
+
+    switch (prop_id) {
+    case LIST_PROP_NUM_USERS:
+        g_value_set_int (value, lightdm_user_list_get_length (self));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
+}
+
+static void
+lightdm_user_list_finalize (GObject *object)
+{
+    LightDMUserList *self = LIGHTDM_USER_LIST (object);
+    LightDMUserListPrivate *priv = GET_LIST_PRIVATE (self);
+
+    if (priv->accounts_service_proxy)
+        g_object_unref (priv->accounts_service_proxy);
+    g_list_free_full (priv->user_account_objects, (GDestroyNotify) user_account_object_free);
+    if (priv->passwd_monitor)
+        g_object_unref (priv->passwd_monitor);
+    g_list_free_full (priv->users, g_object_unref);
+
+    G_OBJECT_CLASS (lightdm_user_list_parent_class)->finalize (object);
+}
+
+static void
+lightdm_user_list_class_init (LightDMUserListClass *klass)
+{
+    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+    g_type_class_add_private (klass, sizeof (LightDMUserListPrivate));
+
+    object_class->set_property = lightdm_user_list_set_property;
+    object_class->get_property = lightdm_user_list_get_property;
+    object_class->finalize = lightdm_user_list_finalize;
+
+    g_object_class_install_property (object_class,
+                                     LIST_PROP_NUM_USERS,
+                                     g_param_spec_int ("num-users",
+                                                       "num-users",
+                                                       "Number of login users",
+                                                       0, G_MAXINT, 0,
+                                                       G_PARAM_READABLE));
+    /**
+     * LightDMUserList::user-added:
+     * @user_list: A #LightDMUserList
+     * @user: The #LightDM user that has been added.
+     *
+     * The ::user-added signal gets emitted when a user account is created.
+     **/
+    list_signals[USER_ADDED] =
+        g_signal_new ("user-added",
+                      G_TYPE_FROM_CLASS (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (LightDMUserListClass, user_added),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
+
+    /**
+     * LightDMUserList::user-changed:
+     * @user_list: A #LightDMUserList
+     * @user: The #LightDM user that has been changed.
+     *
+     * The ::user-changed signal gets emitted when a user account is modified.
+     **/
+    list_signals[USER_CHANGED] =
+        g_signal_new ("user-changed",
+                      G_TYPE_FROM_CLASS (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (LightDMUserListClass, user_changed),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
+
+    /**
+     * LightDMUserList::user-removed:
+     * @user_list: A #LightDMUserList
+     * @user: The #LightDM user that has been removed.
+     *
+     * The ::user-removed signal gets emitted when a user account is removed.
+     **/
+    list_signals[USER_REMOVED] =
+        g_signal_new ("user-removed",
+                      G_TYPE_FROM_CLASS (klass),
+                      G_SIGNAL_RUN_LAST,
+                      G_STRUCT_OFFSET (LightDMUserListClass, user_removed),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
+}
 
 /**
  * lightdm_user_get_name:
@@ -62,7 +778,7 @@ const gchar *
 lightdm_user_get_name (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
-    return GET_PRIVATE (user)->name;
+    return GET_USER_PRIVATE (user)->name;
 }
 
 /**
@@ -77,7 +793,7 @@ const gchar *
 lightdm_user_get_real_name (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
-    return GET_PRIVATE (user)->real_name;
+    return GET_USER_PRIVATE (user)->real_name;
 }
 
 /**
@@ -95,7 +811,7 @@ lightdm_user_get_display_name (LightDMUser *user)
 
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
 
-    priv = GET_PRIVATE (user);
+    priv = GET_USER_PRIVATE (user);
     if (strcmp (priv->real_name, ""))
         return priv->real_name;
     else
@@ -114,7 +830,7 @@ const gchar *
 lightdm_user_get_home_directory (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
-    return GET_PRIVATE (user)->home_directory;
+    return GET_USER_PRIVATE (user)->home_directory;
 }
 
 /**
@@ -129,13 +845,13 @@ const gchar *
 lightdm_user_get_image (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
-    return GET_PRIVATE (user)->image;
+    return GET_USER_PRIVATE (user)->image;
 }
 
 static void
 load_dmrc (LightDMUser *user)
 {
-    LightDMUserPrivate *priv = GET_PRIVATE (user);
+    LightDMUserPrivate *priv = GET_USER_PRIVATE (user);
     gchar *path;
     gboolean have_dmrc;
 
@@ -169,7 +885,7 @@ lightdm_user_get_language (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
     load_dmrc (user);
-    return GET_PRIVATE (user)->language;
+    return GET_USER_PRIVATE (user)->language;
 }
 
 /**
@@ -185,7 +901,7 @@ lightdm_user_get_layout (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
     load_dmrc (user);
-    return GET_PRIVATE (user)->layout;
+    return GET_USER_PRIVATE (user)->layout;
 }
 
 /**
@@ -201,7 +917,7 @@ lightdm_user_get_session (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
     load_dmrc (user);
-    return GET_PRIVATE (user)->session; 
+    return GET_USER_PRIVATE (user)->session; 
 }
 
 /**
@@ -216,13 +932,13 @@ gboolean
 lightdm_user_get_logged_in (LightDMUser *user)
 {
     g_return_val_if_fail (LIGHTDM_IS_USER (user), FALSE);
-    return GET_PRIVATE (user)->logged_in;
+    return GET_USER_PRIVATE (user)->logged_in;
 }
 
 static void
 lightdm_user_init (LightDMUser *user)
 {
-    LightDMUserPrivate *priv = GET_PRIVATE (user);
+    LightDMUserPrivate *priv = GET_USER_PRIVATE (user);
 
     priv->name = g_strdup ("");
     priv->real_name = g_strdup ("");
@@ -240,26 +956,26 @@ lightdm_user_set_property (GObject      *object,
                            GParamSpec   *pspec)
 {
     LightDMUser *self = LIGHTDM_USER (object);
-    LightDMUserPrivate *priv = GET_PRIVATE (self);
+    LightDMUserPrivate *priv = GET_USER_PRIVATE (self);
 
     switch (prop_id) {
-    case PROP_NAME:
+    case USER_PROP_NAME:
         g_free (priv->name);
         priv->name = g_strdup (g_value_get_string (value));
         break;
-    case PROP_REAL_NAME:
+    case USER_PROP_REAL_NAME:
         g_free (priv->real_name);
         priv->real_name = g_strdup (g_value_get_string (value));
         break;
-    case PROP_HOME_DIRECTORY:
+    case USER_PROP_HOME_DIRECTORY:
         g_free (priv->home_directory);
         priv->home_directory = g_strdup (g_value_get_string (value));
         break;
-    case PROP_IMAGE:
+    case USER_PROP_IMAGE:
         g_free (priv->image);
         priv->image = g_strdup (g_value_get_string (value));
         break;
-    case PROP_LOGGED_IN:
+    case USER_PROP_LOGGED_IN:
         priv->logged_in = g_value_get_boolean (value);
         break;
     default:
@@ -279,31 +995,31 @@ lightdm_user_get_property (GObject    *object,
     self = LIGHTDM_USER (object);
 
     switch (prop_id) {
-    case PROP_NAME:
+    case USER_PROP_NAME:
         g_value_set_string (value, lightdm_user_get_name (self));
         break;
-    case PROP_REAL_NAME:
+    case USER_PROP_REAL_NAME:
         g_value_set_string (value, lightdm_user_get_real_name (self));
         break;
-    case PROP_DISPLAY_NAME:
+    case USER_PROP_DISPLAY_NAME:
         g_value_set_string (value, lightdm_user_get_display_name (self));
         break;
-    case PROP_HOME_DIRECTORY:
+    case USER_PROP_HOME_DIRECTORY:
         g_value_set_string (value, lightdm_user_get_home_directory (self));
         break;
-    case PROP_IMAGE:
+    case USER_PROP_IMAGE:
         g_value_set_string (value, lightdm_user_get_image (self));
         break;
-    case PROP_LANGUAGE:
+    case USER_PROP_LANGUAGE:
         g_value_set_string (value, lightdm_user_get_language (self));
         break;
-    case PROP_LAYOUT:
+    case USER_PROP_LAYOUT:
         g_value_set_string (value, lightdm_user_get_layout (self));
         break;
-    case PROP_SESSION:
+    case USER_PROP_SESSION:
         g_value_set_string (value, lightdm_user_get_session (self));
         break;
-    case PROP_LOGGED_IN:
+    case USER_PROP_LOGGED_IN:
         g_value_set_boolean (value, lightdm_user_get_logged_in (self));
         break;
     default:
@@ -316,7 +1032,7 @@ static void
 lightdm_user_finalize (GObject *object)
 {
     LightDMUser *self = LIGHTDM_USER (object);
-    LightDMUserPrivate *priv = GET_PRIVATE (self);
+    LightDMUserPrivate *priv = GET_USER_PRIVATE (self);
 
     g_free (priv->name);
     g_free (priv->real_name);
@@ -338,63 +1054,63 @@ lightdm_user_class_init (LightDMUserClass *klass)
     object_class->finalize = lightdm_user_finalize;
 
     g_object_class_install_property(object_class,
-                                    PROP_NAME,
+                                    USER_PROP_NAME,
                                     g_param_spec_string("name",
                                                         "name",
                                                         "Username",
                                                         NULL,
                                                         G_PARAM_READWRITE));
     g_object_class_install_property(object_class,
-                                    PROP_REAL_NAME,
+                                    USER_PROP_REAL_NAME,
                                     g_param_spec_string("real-name",
                                                         "real-name",
                                                         "Users real name",
                                                         NULL,
                                                         G_PARAM_READWRITE));
     g_object_class_install_property(object_class,
-                                    PROP_DISPLAY_NAME,
+                                    USER_PROP_DISPLAY_NAME,
                                     g_param_spec_string("display-name",
                                                         "display-name",
                                                         "Users display name",
                                                         NULL,
                                                         G_PARAM_READABLE));
     g_object_class_install_property(object_class,
-                                    PROP_HOME_DIRECTORY,
+                                    USER_PROP_HOME_DIRECTORY,
                                     g_param_spec_string("home-directory",
                                                         "home-directory",
                                                         "Home directory",
                                                         NULL,
                                                         G_PARAM_READWRITE));
     g_object_class_install_property(object_class,
-                                    PROP_IMAGE,
+                                    USER_PROP_IMAGE,
                                     g_param_spec_string("image",
                                                         "image",
                                                         "Avatar image",
                                                         NULL,
                                                         G_PARAM_READWRITE));
     g_object_class_install_property(object_class,
-                                    PROP_LANGUAGE,
+                                    USER_PROP_LANGUAGE,
                                     g_param_spec_string("language",
                                                         "language",
                                                         "Language used by this user",
                                                         NULL,
                                                         G_PARAM_READABLE));
     g_object_class_install_property(object_class,
-                                    PROP_LAYOUT,
+                                    USER_PROP_LAYOUT,
                                     g_param_spec_string("layout",
                                                         "layout",
                                                         "Keyboard layout used by this user",
                                                         NULL,
                                                         G_PARAM_READABLE));
     g_object_class_install_property(object_class,
-                                    PROP_SESSION,
+                                    USER_PROP_SESSION,
                                     g_param_spec_string("session",
                                                         "session",
                                                         "Session used by this user",
                                                         NULL,
                                                         G_PARAM_READABLE));
     g_object_class_install_property(object_class,
-                                    PROP_LOGGED_IN,
+                                    USER_PROP_LOGGED_IN,
                                     g_param_spec_boolean("logged-in",
                                                          "logged-in",
                                                          "TRUE if the user is currently in a session",
@@ -407,7 +1123,7 @@ lightdm_user_class_init (LightDMUserClass *klass)
      *
      * The ::changed signal gets emitted this user account is modified.
      **/
-    signals[CHANGED] =
+    user_signals[CHANGED] =
         g_signal_new ("changed",
                       G_TYPE_FROM_CLASS (klass),
                       G_SIGNAL_RUN_LAST,
index 51918708c2e3f3a2ad6b64d91153cf330de67b99..1d5ead3cddfddaf0a445c06cb4520e3753a1313f 100644 (file)
@@ -85,8 +85,8 @@ namespace QLightDM
         void restart();
 
         void connectToServer();
-        void login(const QString &username=QString());
-        void loginAsGuest();
+        void authenticate(const QString &username=QString());
+        void authenticateAsGuest();
         void respond(const QString &response);
         void cancelAuthentication();
         void startSession(const QString &session=QString());
index 249a910c12d1c51e5d820be6cde0dfbfceb2e791..89ea1808e7fb5e0be347a0593ea37a6a8d7647cd 100644 (file)
@@ -35,8 +35,8 @@
 typedef enum
 {
     GREETER_MESSAGE_CONNECT = 0,
-    GREETER_MESSAGE_LOGIN,
-    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_AUTHENTICATE,
+    GREETER_MESSAGE_AUTHENTICATE_AS_GUEST,
     GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
     GREETER_MESSAGE_START_SESSION,
     GREETER_MESSAGE_CANCEL_AUTHENTICATION
@@ -209,21 +209,21 @@ void Greeter::connectToServer()
     flush();
 }
 
-void Greeter::login(const QString &username)
+void Greeter::authenticate(const QString &username)
 {
     d->inAuthentication = true;
     d->isAuthenticated = false;
     d->cancellingAuthentication = false;
     d->authenticationUser = username;
     qDebug() << "Starting authentication for user " << username << "...";
-    writeHeader(GREETER_MESSAGE_LOGIN, intLength() + stringLength(username));
+    writeHeader(GREETER_MESSAGE_AUTHENTICATE, intLength() + stringLength(username));
     d->authenticateSequenceNumber++;
     writeInt(d->authenticateSequenceNumber);
     writeString(username);
     flush();
 }
 
-void Greeter::loginAsGuest()
+void Greeter::authenticateAsGuest()
 {
     d->authenticateSequenceNumber++;
     d->inAuthentication = true;
@@ -231,7 +231,7 @@ void Greeter::loginAsGuest()
     d->cancellingAuthentication = false;
     d->authenticationUser = "";
     qDebug() << "Starting authentication for guest account";
-    writeHeader(GREETER_MESSAGE_LOGIN_AS_GUEST, intLength());
+    writeHeader(GREETER_MESSAGE_AUTHENTICATE_AS_GUEST, intLength());
     writeInt(d->authenticateSequenceNumber);
     flush();
 }
index 62a281037a9648b4e919b3788a4d3088a6ff6136..55157dd2877678e8bcc05c388fe85bb07c96c005 100644 (file)
@@ -60,8 +60,8 @@ G_DEFINE_TYPE (Greeter, greeter, G_TYPE_OBJECT);
 typedef enum
 {
     GREETER_MESSAGE_CONNECT = 0,
-    GREETER_MESSAGE_LOGIN,
-    GREETER_MESSAGE_LOGIN_AS_GUEST,
+    GREETER_MESSAGE_AUTHENTICATE,
+    GREETER_MESSAGE_AUTHENTICATE_AS_GUEST,
     GREETER_MESSAGE_CONTINUE_AUTHENTICATION,
     GREETER_MESSAGE_START_SESSION,
     GREETER_MESSAGE_CANCEL_AUTHENTICATION
@@ -485,13 +485,13 @@ read_cb (GIOChannel *source, GIOCondition condition, gpointer data)
         handle_connect (greeter, version);
         g_free (version);
         break;
-    case GREETER_MESSAGE_LOGIN:
+    case GREETER_MESSAGE_AUTHENTICATE:
         sequence_number = read_int (greeter, &offset);
         username = read_string (greeter, &offset);
         handle_login (greeter, sequence_number, username);
         g_free (username);
         break;
-    case GREETER_MESSAGE_LOGIN_AS_GUEST:
+    case GREETER_MESSAGE_AUTHENTICATE_AS_GUEST:
         sequence_number = read_int (greeter, &offset);
         handle_login_as_guest (greeter, sequence_number);
         break;
index 902540e615318c00ce736419c07578828b07dc11..dc83a2323165a5f48c9d976e6f6fa6781ddeae4d 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as guest
-GREETER LOGIN-GUEST
+GREETER AUTHENTICATE-GUEST
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=FALSE
 
 # Cleanup
index 90968647315240fe3ba0be23862c4a9de1a04dc7..8f9ec184ddb3858f76060523ebcf08f225a94db9 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as guest
-GREETER LOGIN-GUEST
+GREETER AUTHENTICATE-GUEST
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
 GREETER SESSION-FAILED
 
index 018a7abc548ec45667b8432468de72bb598d3b1c..817c75221b22ed12066ac5a9c83f64f8043a9fc1 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as guest
-GREETER LOGIN-GUEST
+GREETER AUTHENTICATE-GUEST
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=FALSE
 
 # Cleanup
index 3524fffe6dc7c9828fb9f84e07530cc0730bb398..f4738239299108fc1e425dcdb4d762aafd176ec8 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as guest
-GREETER LOGIN-GUEST
+GREETER AUTHENTICATE-GUEST
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
 GREETER SESSION-FAILED
 
index 22db73198662a1bfc4b658be1e375a1a0c6137ea..56ebe033e8dd46b726b3427063bfc4866c89c790 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as guest
-GREETER LOGIN-GUEST
+GREETER AUTHENTICATE-GUEST
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
 GREETER QUIT
 
index 056a01ab0b37babd6f3c87250e87b899103865ef..5e54492c923a2eff24c9fb3b9b13aa4b04bab385 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as invalid user
-GREETER LOGIN USERNAME=notauser
+GREETER AUTHENTICATE USERNAME=notauser
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=FALSE
index 54ddab68055204077694e4bffdf55342daea4ebd..c296e6718154bf64d643cc24f4e3c29fc57819e7 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Log in
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index 910a7477bcad082a14079dadbda836859df711d1..ffd6d17f1a4137e6f3988a80e7118f5ec9881c6d 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as alice, but let lightdm prompt for a username
-GREETER LOGIN
+GREETER AUTHENTICATE
 GREETER SHOW-PROMPT TEXT="login:"
 GREETER RESPOND TEXT="alice"
 GREETER SHOW-PROMPT TEXT="Password:"
index 3eb27124ab564d5b9e54ebb4947f4eeddd9def14..ce46e851d25ad3ead7085f05fdef456b2482f6b8 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as bob (no password required)
-GREETER LOGIN USERNAME=bob
+GREETER AUTHENTICATE USERNAME=bob
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
 GREETER QUIT
 
index 4f58b15a7f5474d391fab57e046692bb89d18990..1534be8f5ab7e0c8c4b8225a71b229439c347ada 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login as alice
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index dc7492457249bb28fa501297a687a1b5d405b973..461bce796219535afbfee5a4ae407b4242074469 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login with invalid password
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="rubbish"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=FALSE
index 786f400f6a7960be9bb0cd0068290ab780d67ebe..9d47566dbd84f4879be4e238c4b8d7f2713cbec3 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Log in as alice
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index 5c16435a34e3093ce55c8afc464cd8145748929a..a9a9f91cf342b6d86e271a7eaf6781a03b7a6361 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index 71625f0a6476d0957d93bdbbed052d6522862c07..b7373b3d8916750bbe1f19de7f66c37740d3aab7 100644 (file)
@@ -16,7 +16,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Login
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index 7d0cc950f5220af3c75b90f0844bc61079c06221..0e3ceec6d20fd9419b909eb9d5f34c72043528bb 100644 (file)
@@ -36,7 +36,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Alice is automatically selected
-GREETER LOGIN-SELECTED USERNAME=alice
+GREETER AUTHENTICATE-SELECTED USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 
 # Cleanup
index 334346a4ce93027cefa4f4ee8169fe1bb650ec2e..f3dbef48c0ceb3ce7c267673c092a676c50977e1 100644 (file)
@@ -24,7 +24,7 @@ GREETER CONNECT-TO-DAEMON
 GREETER CONNECTED-TO-DAEMON
 
 # Log in
-GREETER LOGIN USERNAME=alice
+GREETER AUTHENTICATE USERNAME=alice
 GREETER SHOW-PROMPT TEXT="Password:"
 GREETER RESPOND TEXT="password"
 GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
index 7274e6881572e92cc3809d102ca16ae8e0704a1c..27ddb2f252ececd09e31e80c843e097ef44a434e 100644 (file)
@@ -28,8 +28,8 @@ connected_cb (LightDMGreeter *greeter)
     /* Automatically log in as requested user */
     if (lightdm_greeter_get_select_user_hint (greeter))
     {
-        notify_status ("GREETER LOGIN-SELECTED USERNAME=%s", lightdm_greeter_get_select_user_hint (greeter));
-        lightdm_greeter_login (greeter, lightdm_greeter_get_select_user_hint (greeter));
+        notify_status ("GREETER AUTHENTICATE-SELECTED USERNAME=%s", lightdm_greeter_get_select_user_hint (greeter));
+        lightdm_greeter_authenticate (greeter, lightdm_greeter_get_select_user_hint (greeter));
         return;
     }
 
@@ -39,13 +39,13 @@ connected_cb (LightDMGreeter *greeter)
     {
         if (g_key_file_get_boolean (config, "test-greeter-config", "login-guest", NULL))
         {
-            notify_status ("GREETER LOGIN-GUEST");
-            lightdm_greeter_login_as_guest (greeter);
+            notify_status ("GREETER AUTHENTICATE-GUEST");
+            lightdm_greeter_authenticate_as_guest (greeter);
         }
         else if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
         {
-            notify_status ("GREETER LOGIN");
-            lightdm_greeter_login (greeter, NULL);
+            notify_status ("GREETER AUTHENTICATE");
+            lightdm_greeter_authenticate (greeter, NULL);
         }
         else
         {
@@ -55,8 +55,8 @@ connected_cb (LightDMGreeter *greeter)
             if (!username)
                 return;
 
-            notify_status ("GREETER LOGIN USERNAME=%s", username);
-            lightdm_greeter_login (greeter, username);
+            notify_status ("GREETER AUTHENTICATE USERNAME=%s", username);
+            lightdm_greeter_authenticate (greeter, username);
             g_free (username);
         }