[Xfce4-commits] <exo:master> Add support for editing .directory files.

Nick Schermer noreply at xfce.org
Mon Feb 15 10:50:02 CET 2010


Updating branch refs/heads/master
         to c206ad04f4e741f1fa99aa0583ef32f2ac5cc9c8 (commit)
       from 787e118423cda9c23900dd1da01174754c0f5192 (commit)

commit c206ad04f4e741f1fa99aa0583ef32f2ac5cc9c8
Author: Nick Schermer <nick at xfce.org>
Date:   Mon Feb 15 10:37:08 2010 +0100

    Add support for editing .directory files.

 exo-desktop-item-edit/exo-die-editor.c     |    3 ++
 exo-desktop-item-edit/exo-die-enum-types.c |    1 +
 exo-desktop-item-edit/exo-die-enum-types.h |    2 +
 exo-desktop-item-edit/exo-die-utils.c      |   37 ++++++++++++++++-----------
 exo-desktop-item-edit/exo-die-utils.h      |   18 +++++++------
 exo-desktop-item-edit/main.c               |   29 ++++++++++++++++-----
 6 files changed, 60 insertions(+), 30 deletions(-)

diff --git a/exo-desktop-item-edit/exo-die-editor.c b/exo-desktop-item-edit/exo-die-editor.c
index 928c62a..d3cb566 100644
--- a/exo-desktop-item-edit/exo-die-editor.c
+++ b/exo-desktop-item-edit/exo-die-editor.c
@@ -705,6 +705,9 @@ exo_die_editor_get_complete (ExoDieEditor *editor)
       return (!exo_str_is_empty (editor->name)
               && !exo_str_is_empty (editor->url));
 
+    case EXO_DIE_EDITOR_MODE_DIRECTORY:
+      return !exo_str_is_empty (editor->name);
+
     default:
       g_assert_not_reached ();
       return FALSE;
diff --git a/exo-desktop-item-edit/exo-die-enum-types.c b/exo-desktop-item-edit/exo-die-enum-types.c
index 271dc1d..299dbed 100644
--- a/exo-desktop-item-edit/exo-die-enum-types.c
+++ b/exo-desktop-item-edit/exo-die-enum-types.c
@@ -36,6 +36,7 @@ exo_die_editor_mode_get_type (void)
       {
         { EXO_DIE_EDITOR_MODE_APPLICATION, "EXO_DIE_EDITOR_MODE_APPLICATION", "Application", },
         { EXO_DIE_EDITOR_MODE_LINK,        "EXO_DIE_EDITOR_MODE_LINK",        "Link",        },
+        { EXO_DIE_EDITOR_MODE_DIRECTORY,   "EXO_DIE_EDITOR_MODE_DIRECTORY",   "Directory",   },
         { 0,                               NULL,                              NULL,          },
       };
 
diff --git a/exo-desktop-item-edit/exo-die-enum-types.h b/exo-desktop-item-edit/exo-die-enum-types.h
index 4a5d1a8..f0d6d62 100644
--- a/exo-desktop-item-edit/exo-die-enum-types.h
+++ b/exo-desktop-item-edit/exo-die-enum-types.h
@@ -30,11 +30,13 @@ G_BEGIN_DECLS
  * ExoDieEditorMode:
  * @EXO_DIE_EDITOR_MODE_APPLICATION : application launcher editing.
  * @EXO_DIE_EDITOR_MODE_LINK        : link editing.
+ * @EXO_DIE_EDITOR_MODE_DIRECTORY   : menu directory editing.
  **/
 typedef enum
 {
   EXO_DIE_EDITOR_MODE_APPLICATION,
   EXO_DIE_EDITOR_MODE_LINK,
+  EXO_DIE_EDITOR_MODE_DIRECTORY
 } ExoDieEditorMode;
 
 GType exo_die_editor_mode_get_type (void) G_GNUC_CONST;
diff --git a/exo-desktop-item-edit/exo-die-utils.c b/exo-desktop-item-edit/exo-die-utils.c
index 691d2a6..8434ddf 100644
--- a/exo-desktop-item-edit/exo-die-utils.c
+++ b/exo-desktop-item-edit/exo-die-utils.c
@@ -78,24 +78,27 @@ exo_die_g_key_file_set_locale_value (GKeyFile    *key_file,
  * @key_file : the #GKeyFile.
  * @create   : whether to create.
  * @base     : file or folder (if @create).
+ * @mode     : file mode for .directory or .desktop suffix.
  * @error    : return location for errors or %NULL.
  *
  * Return value: %TRUE if successfull, %FALSE otherwise.
  **/
 gboolean
-exo_die_g_key_file_save (GKeyFile    *key_file,
-                         gboolean     create,
-                         GFile       *base,
-                         GError     **error)
+exo_die_g_key_file_save (GKeyFile          *key_file,
+                         gboolean           create,
+                         GFile             *base,
+                         ExoDieEditorMode   mode,
+                         GError           **error)
 {
-  GFileType  file_type;
-  GFile     *file;
-  gchar     *name, *s;
-  gchar     *filename, *data;
-  gsize      length;
-  gboolean   result;
-  guint      n;
-  gboolean   desktop_suffix;
+  GFileType    file_type;
+  GFile       *file;
+  gchar       *name, *s;
+  gchar       *filename, *data;
+  gsize        length;
+  gboolean     result;
+  guint        n;
+  gboolean     desktop_suffix;
+  const gchar *suffix;
 
   g_return_val_if_fail (G_IS_FILE (base), FALSE);
   g_return_val_if_fail (key_file != NULL, FALSE);
@@ -104,10 +107,14 @@ exo_die_g_key_file_save (GKeyFile    *key_file,
   /* check if we should create a new file */
   if (G_LIKELY (create))
     {
+      if (mode == EXO_DIE_EDITOR_MODE_DIRECTORY)
+        suffix = ".directory";
+      else
+        suffix = ".desktop";
 
       /* 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");
+      desktop_suffix = g_str_has_suffix (name, suffix);
       g_free (name);
       if (desktop_suffix)
         {
@@ -134,7 +141,7 @@ exo_die_g_key_file_save (GKeyFile    *key_file,
                   *s = '_';
 
               /* create a unique filename */
-              filename = g_strconcat (name, ".desktop", NULL);
+              filename = g_strconcat (name, suffix, NULL);
               file = g_file_get_child_for_display_name (base, filename, error);
               for (n = 0; file != NULL && g_file_query_exists (file, NULL); n++)
                 {
@@ -143,7 +150,7 @@ exo_die_g_key_file_save (GKeyFile    *key_file,
                   g_object_unref (G_OBJECT (file));
 
                   /* generate a new file name */
-                  filename = g_strdup_printf ("%s%d.desktop", name, n);
+                  filename = g_strdup_printf ("%s%d%s", name, n, suffix);
                   file = g_file_get_child_for_display_name (base, filename, error);
                 }
 
diff --git a/exo-desktop-item-edit/exo-die-utils.h b/exo-desktop-item-edit/exo-die-utils.h
index b67be81..a8c3eec 100644
--- a/exo-desktop-item-edit/exo-die-utils.h
+++ b/exo-desktop-item-edit/exo-die-utils.h
@@ -22,18 +22,20 @@
 
 #include <exo/exo.h>
 #include <gio/gio.h>
+#include <exo-desktop-item-edit/exo-die-enum-types.h>
 
 G_BEGIN_DECLS
 
-void      exo_die_g_key_file_set_locale_value (GKeyFile    *key_file,
-                                               const gchar *group,
-                                               const gchar *key,
-                                               const gchar *value);
+void      exo_die_g_key_file_set_locale_value (GKeyFile          *key_file,
+                                               const gchar       *group,
+                                               const gchar       *key,
+                                               const gchar       *value);
 
-gboolean  exo_die_g_key_file_save             (GKeyFile    *key_file,
-                                               gboolean     create,
-                                               GFile       *base,
-                                               GError     **error);
+gboolean  exo_die_g_key_file_save             (GKeyFile          *key_file,
+                                               gboolean           create,
+                                               GFile             *base,
+                                               ExoDieEditorMode   mode,
+                                               GError           **error);
 
 G_END_DECLS
 
diff --git a/exo-desktop-item-edit/main.c b/exo-desktop-item-edit/main.c
index 74f8892..fdf386e 100644
--- a/exo-desktop-item-edit/main.c
+++ b/exo-desktop-item-edit/main.c
@@ -50,9 +50,9 @@
 
 
 /* --- constants --- */
-static const gchar *CREATE_TITLES[] = { N_ ("Create Launcher"), N_ ("Create Link") };
-static const gchar *EDIT_TITLES[] = { N_ ("Edit Launcher"), N_ ("Edit Link") };
-static const gchar *ICON_NAMES[] = { "applications-other", "applications-internet" };
+static const gchar *CREATE_TITLES[] = { N_ ("Create Launcher"), N_ ("Create Link"), N_("Create Directory") };
+static const gchar *EDIT_TITLES[] = { N_ ("Edit Launcher"), N_ ("Edit Link"), N_("Edit Directory") };
+static const gchar *ICON_NAMES[] = { "applications-other", "applications-internet", "folder" };
 
 
 
@@ -176,7 +176,7 @@ main (int argc, char **argv)
   gfile = g_file_new_for_commandline_arg (argv[1]);
 
   /* create new key file if --create-new was specified */
-  if (G_LIKELY (opt_create_new))
+  if (opt_create_new)
     {
       /* generic stuff */
       g_key_file_set_value (key_file, G_KEY_FILE_DESKTOP_GROUP,
@@ -195,8 +195,14 @@ main (int argc, char **argv)
                                 G_KEY_FILE_DESKTOP_KEY_ICON, STR_FB (opt_icon, "gnome-fs-bookmark"));
           g_key_file_set_value (key_file, G_KEY_FILE_DESKTOP_GROUP,
                                 G_KEY_FILE_DESKTOP_KEY_URL, STR_FB (opt_url, ""));
+
         }
-      else
+      else if (exo_str_is_equal (opt_type, G_KEY_FILE_DESKTOP_TYPE_DIRECTORY))
+        {
+          g_key_file_set_value (key_file, G_KEY_FILE_DESKTOP_GROUP,
+                                G_KEY_FILE_DESKTOP_KEY_ICON, STR_FB (opt_icon, ""));
+        }
+      else if (exo_str_is_equal (opt_type, G_KEY_FILE_DESKTOP_TYPE_APPLICATION))
         {
           g_key_file_set_value (key_file, G_KEY_FILE_DESKTOP_GROUP,
                                 G_KEY_FILE_DESKTOP_KEY_EXEC, STR_FB (opt_command, ""));
@@ -338,6 +344,10 @@ main (int argc, char **argv)
       g_free (value);
       break;
 
+    case EXO_DIE_EDITOR_MODE_DIRECTORY:
+      /* nothing special */
+      break;
+
     default:
       g_assert_not_reached ();
       break;
@@ -400,13 +410,18 @@ main (int argc, char **argv)
                                  exo_die_editor_get_url (EXO_DIE_EDITOR (editor)));
           break;
 
+        case EXO_DIE_EDITOR_MODE_DIRECTORY:
+          /* nothing special */
+          break;
+
         default:
           g_assert_not_reached ();
           break;
         }
 
       /* try to save the file */
-      if (!exo_die_g_key_file_save (key_file, opt_create_new, gfile, &error) && opt_create_new)
+      if (!exo_die_g_key_file_save (key_file, opt_create_new, gfile, mode, &error)
+          && opt_create_new)
         {
           /* reset the error */
           g_clear_error (&error);
@@ -453,7 +468,7 @@ main (int argc, char **argv)
 
               /* try again to save to the new file */
               gfile = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (chooser));
-              exo_die_g_key_file_save (key_file, FALSE, gfile, &error);
+              exo_die_g_key_file_save (key_file, FALSE, gfile, mode, &error);
             }
 
           /* destroy the chooser */



More information about the Xfce4-commits mailing list