changeset 1641:c8252313dcfa

make sure that a directory exists on saving desktop files
author nadvornik
date Wed, 10 Jun 2009 20:45:24 +0000
parents 97ac3a58adae
children 51d70f62338c
files src/desktop_file.c
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/desktop_file.c	Wed Jun 10 20:26:47 2009 +0000
+++ b/src/desktop_file.c	Wed Jun 10 20:45:24 2009 +0000
@@ -59,6 +59,7 @@
 
 static gboolean editor_window_save(EditorWindow *ew)
 {
+	gchar *dir;
 	gchar *path;
 	gchar *text;
 	GtkTextIter start, end;
@@ -75,9 +76,16 @@
 	gtk_text_buffer_get_bounds(ew->buffer, &start, &end);
 	text = gtk_text_buffer_get_text(ew->buffer, &start, &end, FALSE);
 
-	path = g_build_filename(get_rc_dir(), "applications", name, NULL);
+	dir = g_build_filename(get_rc_dir(), "applications", NULL);
+	path = g_build_filename(dir, name, NULL);
 
-	if (!g_file_set_contents(path, text, -1, &error)) 
+	if (!recursive_mkdir_if_not_exists(dir, 0755))
+		{
+		file_util_warning_dialog(_("Can't save"), _("Could not create directory"), GTK_STOCK_DIALOG_ERROR, NULL);
+		ret = FALSE;
+		}
+
+	if (ret && !g_file_set_contents(path, text, -1, &error)) 
 		{
 		file_util_warning_dialog(_("Can't save"), error->message, GTK_STOCK_DIALOG_ERROR, NULL);
 		g_error_free(error);
@@ -85,6 +93,7 @@
 		}
 	
 	g_free(path);
+	g_free(dir);
 	g_free(text);
 	layout_editors_reload_all();
 	return ret;