[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