[Xfce4-commits] <exo:master> Use .desktop filename when creating a new desktop item.
Nick Schermer
noreply at xfce.org
Fri Oct 23 22:42:01 CEST 2009
Updating branch refs/heads/master
to 4ccfa786759f3f7d76bac330b837271b0f7e63d1 (commit)
from ae85ea32a8bacad10bcaa2e835958ef078bcd86d (commit)
commit 4ccfa786759f3f7d76bac330b837271b0f7e63d1
Author: Nick Schermer <nick at xfce.org>
Date: Fri Oct 23 22:38:27 2009 +0200
Use .desktop filename when creating a new desktop item.
If the user supplies a filename or uri that has a .desktop
suffix, use that file to create the new desktop file instead
of opening the file chooser.
exo-desktop-item-edit/exo-die-utils.c | 87 +++++++++++++++++++--------------
1 files changed, 50 insertions(+), 37 deletions(-)
diff --git a/exo-desktop-item-edit/exo-die-utils.c b/exo-desktop-item-edit/exo-die-utils.c
index c27adea..691d2a6 100644
--- a/exo-desktop-item-edit/exo-die-utils.c
+++ b/exo-desktop-item-edit/exo-die-utils.c
@@ -95,6 +95,7 @@ exo_die_g_key_file_save (GKeyFile *key_file,
gsize length;
gboolean result;
guint n;
+ gboolean desktop_suffix;
g_return_val_if_fail (G_IS_FILE (base), FALSE);
g_return_val_if_fail (key_file != NULL, FALSE);
@@ -103,51 +104,63 @@ exo_die_g_key_file_save (GKeyFile *key_file,
/* check if we should create a new file */
if (G_LIKELY (create))
{
- file_type = g_file_query_file_type (base, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL);
- if (file_type == G_FILE_TYPE_REGULAR)
+
+ /* if the filename end with .desktop, then use the base as file */
+ name = g_file_get_basename (base);
+ desktop_suffix = g_str_has_suffix (name, ".desktop");
+ g_free (name);
+ if (desktop_suffix)
{
file = g_object_ref (G_OBJECT (base));
}
- else if (file_type == G_FILE_TYPE_DIRECTORY)
+ else
{
- /* determine the desktop entry name */
- name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
- G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
- if (G_UNLIKELY (name == NULL))
- name = g_strdup ("launcher");
-
- /* replace invalid file system characters */
- for (s = name; *s != '\0'; ++s)
- if (G_IS_DIR_SEPARATOR (*s) || *s == '.')
- *s = '_';
-
- /* create a unique filename */
- filename = g_strconcat (name, ".desktop", NULL);
- file = g_file_get_child_for_display_name (base, filename, error);
- for (n = 0; file != NULL && g_file_query_exists (file, NULL); n++)
+ file_type = g_file_query_file_type (base, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL);
+ if (file_type == G_FILE_TYPE_REGULAR)
+ {
+ file = g_object_ref (G_OBJECT (base));
+ }
+ else if (file_type == G_FILE_TYPE_DIRECTORY)
{
- /* release the previous name */
+ /* determine the desktop entry name */
+ name = g_key_file_get_locale_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
+ G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
+ if (G_UNLIKELY (name == NULL))
+ name = g_strdup ("launcher");
+
+ /* replace invalid file system characters */
+ for (s = name; *s != '\0'; ++s)
+ if (G_IS_DIR_SEPARATOR (*s) || *s == '.')
+ *s = '_';
+
+ /* create a unique filename */
+ filename = g_strconcat (name, ".desktop", NULL);
+ file = g_file_get_child_for_display_name (base, filename, error);
+ for (n = 0; file != NULL && g_file_query_exists (file, NULL); n++)
+ {
+ /* release the previous name */
+ g_free (filename);
+ g_object_unref (G_OBJECT (file));
+
+ /* generate a new file name */
+ filename = g_strdup_printf ("%s%d.desktop", name, n);
+ file = g_file_get_child_for_display_name (base, filename, error);
+ }
+
+ /* cleanup */
g_free (filename);
- g_object_unref (G_OBJECT (file));
+ g_free (name);
- /* generate a new file name */
- filename = g_strdup_printf ("%s%d.desktop", name, n);
- file = g_file_get_child_for_display_name (base, filename, error);
+ if (G_UNLIKELY (file == NULL))
+ return FALSE;
+ }
+ else
+ {
+ /* base is not a directory, cannot save */
+ g_set_error_literal (error, G_FILE_ERROR, g_file_error_from_errno (ENOTDIR),
+ _("File location is not a regular file or directory"));
+ return FALSE;
}
-
- /* cleanup */
- g_free (filename);
- g_free (name);
-
- if (G_UNLIKELY (file == NULL))
- return FALSE;
- }
- else
- {
- /* base is not a directory, cannot save */
- g_set_error_literal (error, G_FILE_ERROR, g_file_error_from_errno (ENOTDIR),
- _("File location is not a regular file or directory"));
- return FALSE;
}
}
else
More information about the Xfce4-commits
mailing list