}
/**
- * 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);
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);
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);
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)
}
/**
+ * 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
*