[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