[Xfce4-commits] r27193 - in xarchiver/trunk: . src

Giuseppe Torelli colossus at xfce.org
Wed Jul 2 14:42:48 CEST 2008


Author: colossus
Date: 2008-07-02 12:42:48 +0000 (Wed, 02 Jul 2008)
New Revision: 27193

Modified:
   xarchiver/trunk/README
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/string_utils.c
   xarchiver/trunk/src/string_utils.h
   xarchiver/trunk/src/window.c
Log:
Clicking on the directories in the sidepane will update the location bar and the main window with the 
respective archive entries.
Updated README file.


Modified: xarchiver/trunk/README
===================================================================
--- xarchiver/trunk/README	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/README	2008-07-02 12:42:48 UTC (rev 27193)
@@ -1,6 +1,7 @@
 What is it?
 ===========
-Xarchiver is a Desktop Environment independent archiver frontend. All common archive types are supported.
+Xarchiver is the best user graphic interface on Linux for handling archives. It's a Desktop Environment independent 
+archiver frontend. All common archive types are supported.
 RPM and DEB packages are handled without their package managers. To run it you only need GTK+2 libraries and
 obviously the various rar, arj and 7z for these archive types. All the others archivers are installed by
 default in most distro.

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/archive.c	2008-07-02 12:42:48 UTC (rev 27193)
@@ -532,7 +532,7 @@
 void xa_update_window_with_archive_entries (XArchive *archive,XEntry *entry)
 {
 	GdkPixbuf *pixbuf = NULL;
-	GtkTreeIter iter,dummy_iter;
+	GtkTreeIter iter;
 	unsigned short int i;
 	gpointer current_column;
 
@@ -613,9 +613,7 @@
 		}
 		entry = entry->next;
 	}
-	if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(archive_dir_model),&dummy_iter));
-	else
-		xa_browse_dir_sidebar(archive->root_entry,archive_dir_model,NULL,NULL);
+	xa_fill_dir_sidebar(archive);
 }
 
 XEntry* xa_find_entry_from_path (XEntry *root_entry,const gchar *fullpathname)
@@ -822,15 +820,57 @@
 	if (entry->is_dir)
 	{
 		gtk_tree_store_append(model,&child_iter,containing_iter);
-		gtk_tree_store_set(model,&child_iter,0,"gtk-directory",1,entry->filename,2,"",-1);
+		gtk_tree_store_set(model,&child_iter,0,"gtk-directory",1,entry->filename,2,entry,-1);
 	}
 	xa_browse_dir_sidebar(entry->child,model,NULL,&child_iter);
 	xa_browse_dir_sidebar(entry->next, model,NULL,containing_iter);
 
 }
 
-void xa_clean_dir_sidebar()
+void xa_fill_dir_sidebar(XArchive *archive)
 {
-	gtk_tree_store_clear(GTK_TREE_STORE(model));
+	GtkTreeIter iter;
+
+	if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(archive_dir_model),&iter))
+		return;
+
+	gtk_tree_store_clear(GTK_TREE_STORE(archive_dir_model));
+	xa_browse_dir_sidebar(archive->root_entry,archive_dir_model,NULL,NULL);
 }
 
+void xa_sidepane_row_selected(GtkTreeSelection *selection, gpointer data)
+{
+	XEntry *entry;
+	GtkTreeIter iter;
+	GtkTreeIter parent;
+	GtkTreeModel *model;
+	GString *string = g_string_new("");
+	gchar *dir;
+	gint current_page;
+	gint idx;
+
+	current_page = gtk_notebook_get_current_page(notebook);
+	idx = xa_find_archive_index(current_page);
+
+	if (gtk_tree_selection_get_selected (selection,&model,&iter))
+	{
+		/* Let get the last selected dir */
+		gtk_tree_model_get(model,&iter,1,&dir,-1);
+		g_string_prepend_c(string,'/');
+		g_string_prepend(string,dir);
+
+		/* Get the memory address of entry so to update the main listview */
+		gtk_tree_model_get(model,&iter,2,&entry,-1);
+		while (gtk_tree_model_iter_parent(model,&parent,&iter))
+		{
+			gtk_tree_model_get(model,&parent,1,&dir,-1);
+			g_string_prepend_c(string,'/');
+			g_string_prepend(string,dir);
+			iter = parent;
+		}
+		gtk_entry_set_text(GTK_ENTRY(location_entry),string->str);
+		g_string_free(string,TRUE);
+
+		xa_update_window_with_archive_entries(archive[idx],entry);
+	}
+}

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/archive.h	2008-07-02 12:42:48 UTC (rev 27193)
@@ -143,6 +143,7 @@
 void xa_entries_to_filelist(XEntry *, GString **, gchar *);
 gboolean xa_detect_encrypted_archive (XArchive *archive);
 void xa_browse_dir_sidebar (XEntry *, GtkTreeStore *,gchar *,GtkTreeIter *);
-void xa_clean_dir_sidebar();
+void xa_fill_dir_sidebar(XArchive *);
+void xa_sidepane_row_selected(GtkTreeSelection *selection, gpointer data);
 XArchive *archive[100];
 #endif

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/interface.c	2008-07-02 12:42:48 UTC (rev 27193)
@@ -384,7 +384,6 @@
 	hpaned1 = gtk_hpaned_new ();
 	gtk_widget_show (hpaned1);
   	gtk_box_pack_start (GTK_BOX (vbox1),hpaned1,TRUE,TRUE,0);
-  	//gtk_paned_set_position (GTK_PANED (hpaned1),200);
   	
   	scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
   	if (show_sidebar)
@@ -394,17 +393,15 @@
   	gtk_paned_pack1 (GTK_PANED (hpaned1), scrolledwindow2, FALSE, TRUE);
 	g_object_set (G_OBJECT (scrolledwindow2),"hscrollbar-policy", GTK_POLICY_AUTOMATIC,"vscrollbar-policy", GTK_POLICY_AUTOMATIC, NULL);
 
-  	archive_dir_model = gtk_tree_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING);
+  	archive_dir_model = gtk_tree_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
 	archive_dir_treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(archive_dir_model));
 	gtk_container_add (GTK_CONTAINER (scrolledwindow2), archive_dir_treeview);
 	gtk_widget_show(archive_dir_treeview);
 	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (archive_dir_treeview), FALSE);
 	gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(archive_dir_model),1,GTK_SORT_ASCENDING);
 
-	/*g_signal_connect (G_OBJECT (archive_dir_treeview),"row-expanded",G_CALLBACK(xa_expand_dir),dialog_data->destination_path_entry);
-	g_signal_connect (G_OBJECT (archive_dir_treeview),"row-activated",G_CALLBACK(xa_row_activated),dialog_data->destination_path_entry);
 	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (archive_dir_treeview));
-	g_signal_connect (sel,"changed",G_CALLBACK (xa_tree_view_row_selected),dialog_data->destination_path_entry);*/
+	g_signal_connect (sel,"changed",G_CALLBACK (xa_sidepane_row_selected),NULL);
 
 	column = gtk_tree_view_column_new();
 	archive_dir_renderer = gtk_cell_renderer_pixbuf_new();
@@ -415,8 +412,6 @@
 	gtk_tree_view_column_pack_start(column,archive_dir_renderer,TRUE);
 	gtk_tree_view_column_set_attributes(column,archive_dir_renderer,"text",1,NULL);
 	gtk_tree_view_append_column (GTK_TREE_VIEW (archive_dir_treeview),column);
-	/*g_signal_connect (renderer, "editing-canceled",G_CALLBACK (xa_cell_edited_canceled),dialog_data);
-	g_signal_connect (renderer, "edited",G_CALLBACK (xa_cell_edited),dialog_data);*/
   	
 	/* Create the notebook widget */
 	notebook = GTK_NOTEBOOK(gtk_notebook_new() );
@@ -675,8 +670,12 @@
   	gtk_misc_set_alignment (GTK_MISC (label_filename), 0, 0.5);
 
 	if (archive_name != NULL)
-		gtk_label_set_text(GTK_LABEL(label_filename),archive_name);
-		
+	{
+		gchar *name;
+		name = xa_remove_path_from_archive_name(archive_name);
+		gtk_label_set_text(GTK_LABEL(label_filename),name);
+		g_free (name);
+	}	
   	hbox1 = gtk_hbox_new (FALSE, 5);
   	gtk_widget_show (hbox1);
   	gtk_box_pack_start (GTK_BOX (vbox2), hbox1, TRUE, TRUE, 0);

Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/string_utils.c	2008-07-02 12:42:48 UTC (rev 27193)
@@ -145,36 +145,6 @@
 	return field;
 }
 
-char **split_line (char *line,int n_fields)
-{
-	char **fields;
-	char *scan, *field_end;
-	int i;
-
-	fields = g_new0 (char *, n_fields + 1);
-	fields[n_fields] = NULL;
-
-	scan = eat_spaces (line);
-	for (i = 0; i < n_fields; i++)
-	{
-		if (scan == NULL)
-		{
-			fields[i] = NULL;
-			continue;
-		}
-		field_end = strchr (scan, ' ');
-		//The following line is mine, I added the case when the last field ends with a newline
-		if (field_end == NULL)
-			field_end = strchr (scan, '\n');
-		else
-		{
-			fields[i] = g_strndup (scan, field_end - scan);
-			scan = eat_spaces (field_end);
-		}
-	}
-	return fields;
-}
-
 static int count_chars_to_escape (const char *str, const char *meta_chars)
 {
 	int meta_chars_n = strlen (meta_chars);
@@ -346,3 +316,19 @@
 	}
 	return (result == 0);
 }
+
+gchar *xa_remove_path_from_archive_name(gchar *name)
+{
+	gchar *utf8_string,*text;
+
+	text = g_strrstr (name,"/");
+	if (text != NULL)
+	{
+		text++;
+		utf8_string = g_filename_display_name (text);
+	}
+	else
+		utf8_string = g_filename_display_name (name);
+
+	return utf8_string;
+}

Modified: xarchiver/trunk/src/string_utils.h
===================================================================
--- xarchiver/trunk/src/string_utils.h	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/string_utils.h	2008-07-02 12:42:48 UTC (rev 27193)
@@ -34,7 +34,6 @@
 int CountCharacter ( gchar *string , int chr );
 gchar *RemoveBackSlashes ( gchar *name);
 char *get_last_field (char *line,int last_field);
-char **split_line (char *line,int n_fields);
 char *xa_escape_common_chars (const char *str, const char *meta_chars, const char  prefix, const char  postfix);
 char *eat_spaces (char *line);
 gchar *xa_get_parent_dir (const gchar *current_dir);
@@ -43,5 +42,6 @@
 gchar *extract_local_path (gchar *path);
 void xa_set_window_title ( GtkWidget *window , gchar *title);
 gboolean match_patterns (char **patterns,const char *string,int flags);
+gchar *xa_remove_path_from_archive_name(gchar *name);
 #endif
 

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2008-07-02 09:08:48 UTC (rev 27192)
+++ xarchiver/trunk/src/window.c	2008-07-02 12:42:48 UTC (rev 27193)
@@ -852,7 +852,7 @@
 			"name",  "xarchiver",
 			"version", PACKAGE_VERSION,
 			"copyright", "Copyright \xC2\xA9 2005-2008 Giuseppe Torelli",
-			"comments", "A lightweight GTK+2 archive manager",
+			"comments", "The best GUI for handling archivers on Linux",
 			"authors", authors,
 			"documenters",documenters,
 			"translator_credits", _("translator-credits"),
@@ -1360,7 +1360,7 @@
 void xa_archive_properties (GtkMenuItem *menuitem,gpointer user_data)
 {
 	struct stat my_stat;
-    gchar *utf8_string , *measure, *text, *dummy_string;
+    gchar *utf8_string , *measure,*dummy_string;
     char date[64];
     gchar *t;
     unsigned long long int file_size;
@@ -1372,17 +1372,9 @@
     stat (archive[idx]->path , &my_stat );
     file_size = my_stat.st_size;
     archive_properties_win = create_archive_properties_window();
-    //Name
-    text = g_strrstr ( archive[idx]->path, "/" );
-    if (text != NULL)
-    {
-        text++;
-        utf8_string = g_filename_display_name (text);
-    }
-    else
-		utf8_string = g_filename_display_name (archive[idx]->path);
-    gtk_entry_set_text ( GTK_ENTRY (name_data), utf8_string );
-    g_free (utf8_string);
+    utf8_string = xa_remove_path_from_archive_name(archive[idx]->escaped_path);
+	gtk_entry_set_text ( GTK_ENTRY (name_data), utf8_string );
+	g_free (utf8_string);
     //Path
     dummy_string = remove_level_from_path (archive[idx]->path);
     if (strlen(dummy_string) == 0 || strcmp(dummy_string,"..") == 0)



More information about the Xfce4-commits mailing list