Author: colossus
Date: 2008-01-07 13:20:33 +0000 (Mon, 07 Jan 2008)
New Revision: 26551

Modified:
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/extract_dialog.h
Log:
The new directory is now created through the extract dialog.


Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c        2008-01-07 00:17:32 UTC (rev 
26550)
+++ xarchiver/trunk/src/extract_dialog.c        2008-01-07 13:20:33 UTC (rev 
26551)
@@ -189,7 +189,7 @@
        g_signal_connect (G_OBJECT 
(dialog_data->treeview3),"row-expanded",G_CALLBACK(xa_expand_dir),dialog_data->destination_path_entry);
        g_signal_connect (G_OBJECT 
(dialog_data->treeview3),"row-activated",G_CALLBACK(xa_row_activated),dialog_data->destination_path_entry);
        GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW 
(dialog_data->treeview3));
-       g_signal_connect ((gpointer) sel,"changed",G_CALLBACK 
(xa_tree_view_row_selected),dialog_data->destination_path_entry);
+       g_signal_connect (sel,"changed",G_CALLBACK 
(xa_tree_view_row_selected),dialog_data->destination_path_entry);
 
        column = gtk_tree_view_column_new();
        dialog_data->renderer = gtk_cell_renderer_pixbuf_new();
@@ -200,7 +200,8 @@
        gtk_tree_view_column_pack_start(column,dialog_data->renderer,TRUE);
        gtk_tree_view_column_set_attributes( 
column,dialog_data->renderer,"text",1,NULL);
        gtk_tree_view_append_column (GTK_TREE_VIEW 
(dialog_data->treeview3),column);
-       g_signal_connect (dialog_data->renderer, "edited",G_CALLBACK 
(xa_cell_edited),model);
+       g_signal_connect (dialog_data->renderer, "editing-canceled",G_CALLBACK 
(xa_cell_edited_canceled),dialog_data);
+       g_signal_connect (dialog_data->renderer, "edited",G_CALLBACK 
(xa_cell_edited),dialog_data);
 
        hbox4 = gtk_hbox_new (FALSE, 0);
        gtk_box_pack_end (GTK_BOX (vbox1), hbox4, FALSE, FALSE, 0);
@@ -285,30 +286,62 @@
        }
 }
 
+void xa_cell_edited_canceled(GtkCellRenderer *renderer,gpointer data)
+{
+       Extract_dialog_data *dialog = data;
+       GtkTreeModel *model;
+       GtkTreeIter iter;
+       GtkTreeSelection *selection;
+       
+       model = gtk_tree_view_get_model(GTK_TREE_VIEW(dialog->treeview3));
+       selection = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(dialog->treeview3));
+       if (selection)
+       {
+               gtk_tree_selection_get_selected(selection,&model,&iter);
+               gtk_tree_store_remove(GTK_TREE_STORE(model),&iter);
+               gtk_widget_set_sensitive(dialog->create_dir,TRUE);
+               g_object_set(dialog->renderer,"editable",FALSE,NULL);
+       }
+}
+
 void xa_cell_edited (GtkCellRendererText *cell,const gchar *path_string,const 
gchar *new_text,gpointer data)
 {
-       GtkTreeModel *model = data;
+       Extract_dialog_data *dialog = data;
+       GtkTreeModel *model;
        GtkTreeIter iter;
        GtkTreeIter prev_iter;
        gchar *previous_dir;
        gchar *fullname;
        gint result;
 
+       model = gtk_tree_view_get_model (GTK_TREE_VIEW(dialog->treeview3));
        GtkTreePath *path = gtk_tree_path_new_from_string (path_string);
        gtk_tree_model_get_iter (model, &iter,path);
        gtk_tree_path_up(path);
        gtk_tree_model_get_iter (model, &prev_iter,path);
        gtk_tree_model_get(model,&prev_iter,2,&previous_dir,-1);
-       
+
        fullname = g_strconcat(previous_dir,"/",new_text,NULL);
        g_free(previous_dir);
        
gtk_tree_store_set(GTK_TREE_STORE(model),&iter,0,"gtk-directory",1,new_text,2,fullname,-1);
-       gtk_tree_path_free(path);
 
-       if (g_mkdir_with_parents(fullname,0700) < 0)
-               g_print ("%s\n",strerror(errno));
+       result = mkdir (fullname,S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | 
S_IXGRP | S_IROTH | S_IXGRP);
+       if (result == -1)
+       {
+               gchar *msg = g_strdup_printf(_("Can't create directory 
\"%s\""),fullname);
+               response = xa_show_message_dialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,msg,g_strerror(errno
 ));
+               g_free (msg);
+               gtk_tree_store_remove(GTK_TREE_STORE(model),&iter);
+       }
+       else
+       {
+               
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(dialog->treeview3),path,NULL,FALSE,0,0);
+               
gtk_entry_set_text(GTK_ENTRY(dialog->destination_path_entry),fullname);
+       }
        g_free(fullname);
-       //gtk_widget_set_sensitive(dialog->create_dir,TRUE);
+       gtk_tree_path_free(path);
+       gtk_widget_set_sensitive(dialog->create_dir,TRUE);
+       g_object_set(dialog->renderer,"editable",FALSE,NULL);
 }
 
 
@@ -394,17 +427,7 @@
                                response = xa_show_message_dialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("This archive 
is encrypted!"),_("Please enter the password.") );
                                break;
                        }
-                       if (g_file_test (destination_path,G_FILE_TEST_EXISTS) 
== FALSE)
-                       {
-                               int result = mkdir (destination_path , S_IRUSR 
| S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXGRP);
-                               if (result == -1)
-                               {
-                                       gchar *msg = g_strdup_printf(_("Can't 
create directory \"%s\""), destination_path);
-                                       response = xa_show_message_dialog 
(GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, 
msg, g_strerror(errno ) );
-                                       g_free (msg);
-                                       break;
-                               }
-                       }
+
                        if ( g_file_test (destination_path,G_FILE_TEST_IS_DIR) 
&& access (destination_path, R_OK | W_OK | X_OK ) )
                        {
                                gchar *utf8_path;

Modified: xarchiver/trunk/src/extract_dialog.h
===================================================================
--- xarchiver/trunk/src/extract_dialog.h        2008-01-07 00:17:32 UTC (rev 
26550)
+++ xarchiver/trunk/src/extract_dialog.h        2008-01-07 13:20:33 UTC (rev 
26551)
@@ -54,6 +54,7 @@
        
 Extract_dialog_data *xa_create_extract_dialog (gint selected ,XArchive 
*archive);
 void xa_create_dir_button_pressed (GtkButton *button, gpointer data);
+void xa_cell_edited_canceled(GtkCellRenderer *renderer,gpointer user_data);
 void xa_cell_edited (GtkCellRendererText *cell,const gchar *path_string,const 
gchar *new_text,gpointer data);
 void xa_activate_entry(GtkToggleButton *button,gpointer data);
 void fresh_update_toggled_cb (GtkToggleButton *button, Extract_dialog_data 
*data);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to