]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Use GDesktopAppInfo for session .desktop files
authorunknown <robert.ancell@gmail.com>
Thu, 8 Jul 2010 04:09:15 +0000 (14:09 +1000)
committerunknown <robert.ancell@gmail.com>
Thu, 8 Jul 2010 04:09:15 +0000 (14:09 +1000)
configure.ac
doc/tmpl/greeter.sgml
src/session-manager.c

index 01f58de9f6b8d7e8a57a4f028b3fdf591faf102a..06c3007c7dfe81865bd8d6cb0b01871b033d85d5 100644 (file)
@@ -21,6 +21,8 @@ AC_CHECK_HEADERS([security/pam_appl.h],[],[AC_MSG_ERROR([PAM not found])])
 
 PKG_CHECK_MODULES(LIGHTDM, [
     glib-2.0
+    gio-2.0
+    gio-unix-2.0
     gobject-2.0
     dbus-glib-1
     ck-connector
index b761062850c47fe1e5ff91eb69d011fb3963f3f6..8f6d14d7b175a3d488415702df77076ac1ecb780 100644 (file)
@@ -212,6 +212,33 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
 @Returns: 
 
 
+<!-- ##### FUNCTION ldm_greeter_get_layout ##### -->
+<para>
+
+</para>
+
+@greeter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION ldm_greeter_get_layouts ##### -->
+<para>
+
+</para>
+
+@greeter: 
+@Returns: 
+
+
+<!-- ##### FUNCTION ldm_greeter_set_layout ##### -->
+<para>
+
+</para>
+
+@greeter: 
+@layout: 
+
+
 <!-- ##### FUNCTION ldm_greeter_get_sessions ##### -->
 <para>
 
index 3e1e83c34ed360445d08f827db3dea7d63694778..21d3658eeaee0058aa778e77dd7c0b16f145da1d 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <string.h>
+#include <gio/gdesktopappinfo.h>
 
 #include "session-manager.h"
 #include "session-manager-glue.h"
@@ -38,38 +39,6 @@ session_free (Session *session)
     g_free (session);
 }
 
-static Session *
-load_session (GKeyFile *key_file, const gchar *key, GError **error)
-{
-    Session *session;
-  
-    session = g_malloc0 (sizeof (Session));
-  
-    session->key = g_strdup (key);
-    session->name = g_key_file_get_locale_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, NULL, error);
-    if (!session->name)
-    {
-        session_free (session);
-        return NULL;
-    }
-
-    session->comment = g_key_file_get_locale_string(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, NULL, error);
-    if (!session->comment)
-    {
-        session_free (session);
-        return NULL;
-    }
-
-    session->exec = g_key_file_get_value(key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_EXEC, error);
-    if (!session->exec)
-    {
-        session_free (session);
-        return NULL;
-    }
-
-    return session;
-}
-
 static void
 load_sessions (SessionManager *manager)
 {
@@ -93,7 +62,6 @@ load_sessions (SessionManager *manager)
         const gchar *filename;
         gchar *key, *path;
         gboolean result;
-        Session *session;
 
         filename = g_dir_read_name (directory);
         if (filename == NULL)
@@ -111,17 +79,34 @@ load_sessions (SessionManager *manager)
             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))
+        if (result)
         {
-            session = load_session (key_file, key, &error);
-            if (session)
+            GDesktopAppInfo *desktop_file;
+
+            desktop_file = g_desktop_app_info_new_from_keyfile (key_file);
+
+            if (g_app_info_should_show (G_APP_INFO (desktop_file)))
             {
-                g_debug ("Loaded session %s (%s, %s)", session->key, session->name, session->comment);
-                manager->priv->sessions = g_list_append (manager->priv->sessions, session);
-            }
-            else
-                g_warning ("Invalid session %s: %s", path, error->message);
-            g_clear_error (&error);
+                Session *session;
+
+                session = g_malloc0 (sizeof (Session)); 
+                session->key = g_strdup (key);
+                session->name = g_strdup (g_app_info_get_name (G_APP_INFO (desktop_file)));
+                session->comment = g_strdup (g_app_info_get_display_name (G_APP_INFO (desktop_file)));
+                session->exec = g_strdup (g_app_info_get_executable (G_APP_INFO (desktop_file)));
+
+                if (session->name && session->comment && session->exec)
+                {
+                    g_debug ("Loaded session %s (%s, %s)", session->key, session->name, session->comment);
+                    manager->priv->sessions = g_list_append (manager->priv->sessions, session);
+                }
+                else
+                {
+                    g_warning ("Invalid session %s: %s", path, error->message);
+                    session_free (session);
+                }
+                g_clear_error (&error);
+            }                
         }
 
         g_free (key);