glib r7143 - in trunk: docs/reference docs/reference/gio gio



Author: matthiasc
Date: Wed Jul  2 16:23:23 2008
New Revision: 7143
URL: http://svn.gnome.org/viewvc/glib?rev=7143&view=rev

Log:
        * gio.symbols:
        * gdesktopappinfo.[hc]: Add a function to create a
        GDesktopAppInfo from a GKeyFile. Proposed by Josselin Mouette.



Modified:
   trunk/docs/reference/ChangeLog
   trunk/docs/reference/gio/gio-sections.txt
   trunk/gio/ChangeLog
   trunk/gio/gdesktopappinfo.c
   trunk/gio/gdesktopappinfo.h
   trunk/gio/gio.symbols

Modified: trunk/docs/reference/gio/gio-sections.txt
==============================================================================
--- trunk/docs/reference/gio/gio-sections.txt	(original)
+++ trunk/docs/reference/gio/gio-sections.txt	Wed Jul  2 16:23:23 2008
@@ -1172,6 +1172,7 @@
 <TITLE>Desktop file based GAppInfo</TITLE>
 GDesktopAppInfo
 g_desktop_app_info_new_from_filename
+g_desktop_app_info_new_from_keyfile
 g_desktop_app_info_new
 g_desktop_app_info_get_is_hidden
 g_desktop_app_info_set_desktop_env

Modified: trunk/gio/gdesktopappinfo.c
==============================================================================
--- trunk/gio/gdesktopappinfo.c	(original)
+++ trunk/gio/gdesktopappinfo.c	Wed Jul  2 16:23:23 2008
@@ -186,38 +186,27 @@
 }
 
 /**
- * g_desktop_app_info_new_from_filename:
- * @filename: a string containing a file name.
+ * g_desktop_app_info_new_from_keyfile:
+ * @key_file: an opened #GKeyFile
  * 
  * Creates a new #GDesktopAppInfo.
  *
  * Returns: a new #GDesktopAppInfo or %NULL on error.
+ *
+ * Since: 2.18
  **/
 GDesktopAppInfo *
-g_desktop_app_info_new_from_filename (const char *filename)
+g_desktop_app_info_new_from_keyfile (GKeyFile *key_file)
 {
   GDesktopAppInfo *info;
-  GKeyFile *key_file;
   char *start_group;
   char *type;
   char *try_exec;
   
-  key_file = g_key_file_new ();
-  
-  if (!g_key_file_load_from_file (key_file,
-				  filename,
-				  G_KEY_FILE_NONE,
-				  NULL))
-    {
-      g_key_file_free (key_file);
-      return NULL;
-    }
-
   start_group = g_key_file_get_start_group (key_file);
   if (start_group == NULL || strcmp (start_group, G_KEY_FILE_DESKTOP_GROUP) != 0)
     {
       g_free (start_group);
-      g_key_file_free (key_file);
       return NULL;
     }
   g_free (start_group);
@@ -229,7 +218,6 @@
   if (type == NULL || strcmp (type, G_KEY_FILE_DESKTOP_TYPE_APPLICATION) != 0)
     {
       g_free (type);
-      g_key_file_free (key_file);
       return NULL;
     }
   g_free (type);
@@ -245,14 +233,14 @@
       if (t == NULL)
 	{
 	  g_free (try_exec);
-	  g_key_file_free (key_file);
 	  return NULL;
 	}
       g_free (t);
     }
+  g_free (try_exec);
 
   info = g_object_new (G_TYPE_DESKTOP_APP_INFO, NULL);
-  info->filename = g_strdup (filename);
+  info->filename = NULL;
 
   info->name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
   info->comment = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, NULL, NULL);
@@ -266,8 +254,6 @@
   info->terminal = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TERMINAL, NULL) != FALSE;
   info->startup_notify = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY, NULL) != FALSE;
   info->hidden = g_key_file_get_boolean (key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, NULL) != FALSE;
-
-  g_key_file_free (key_file);
   
   info->icon = NULL;
   if (info->icon_name)
@@ -291,6 +277,37 @@
 }
 
 /**
+ * g_desktop_app_info_new_from_filename:
+ * @filename: a string containing a file name.
+ * 
+ * Creates a new #GDesktopAppInfo.
+ *
+ * Returns: a new #GDesktopAppInfo or %NULL on error.
+ **/
+GDesktopAppInfo *
+g_desktop_app_info_new_from_filename (const char *filename)
+{
+  GKeyFile *key_file;
+  GDesktopAppInfo *info = NULL;
+
+  key_file = g_key_file_new ();
+  
+  if (g_key_file_load_from_file (key_file,
+				 filename,
+				 G_KEY_FILE_NONE,
+				 NULL))
+    {
+      info = g_desktop_app_info_new_from_keyfile (key_file);
+      if (info)
+        info->filename = g_strdup (filename);
+    }  
+
+  g_key_file_free (key_file);
+
+  return info;
+}
+
+/**
  * g_desktop_app_info_new:
  * @desktop_id: the desktop file id
  * 

Modified: trunk/gio/gdesktopappinfo.h
==============================================================================
--- trunk/gio/gdesktopappinfo.h	(original)
+++ trunk/gio/gdesktopappinfo.h	Wed Jul  2 16:23:23 2008
@@ -46,6 +46,8 @@
 GType g_desktop_app_info_get_type (void) G_GNUC_CONST;
   
 GDesktopAppInfo *g_desktop_app_info_new_from_filename (const char      *filename);
+GDesktopAppInfo *g_desktop_app_info_new_from_keyfile  (GKeyFile        *key_file);
+
 GDesktopAppInfo *g_desktop_app_info_new               (const char      *desktop_id);
 gboolean         g_desktop_app_info_get_is_hidden     (GDesktopAppInfo *info);
 

Modified: trunk/gio/gio.symbols
==============================================================================
--- trunk/gio/gio.symbols	(original)
+++ trunk/gio/gio.symbols	Wed Jul  2 16:23:23 2008
@@ -68,6 +68,7 @@
 #if IN_FILE(__G_DESKTOP_APP_INFO_C__)
 #ifdef G_OS_UNIX
 g_desktop_app_info_new_from_filename
+g_desktop_app_info_new_from_keyfile
 g_desktop_app_info_new
 g_desktop_app_info_get_type G_GNUC_CONST
 g_desktop_app_info_get_is_hidden



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]