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

Giuseppe Torelli colossus at xfce.org
Fri Jul 4 11:26:29 CEST 2008


Author: colossus
Date: 2008-07-04 09:26:29 +0000 (Fri, 04 Jul 2008)
New Revision: 27209

Modified:
   xarchiver/trunk/TODO
   xarchiver/trunk/src/add_dialog.c
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/interface.h
   xarchiver/trunk/src/string_utils.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Changed layout buttons of stop confirmation dialog to Ok/Cancel.
Now the statusbar shows the total size of the items in the archive.


Modified: xarchiver/trunk/TODO
===================================================================
--- xarchiver/trunk/TODO	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/TODO	2008-07-04 09:26:29 UTC (rev 27209)
@@ -1,3 +1,4 @@
+- fix adding in the archive directories with dnd.
 - fix the directories bug with 7z
 - fix the remaining bugs in bugzilla.xfce.org
 - enrich the status bar

Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/add_dialog.c	2008-07-04 09:26:29 UTC (rev 27209)
@@ -455,7 +455,7 @@
 void xa_execute_add_commands (XArchive *archive,GString *names,gchar *compression_string)
 {
 	if (xa_main_window)
-		Update_StatusBar ( _("Adding files to the archive, please wait..."));
+		Update_StatusBar (_("Adding files to the archive, please wait..."));
 	archive->status = XA_ARCHIVESTATUS_ADD;
 	(*archive->add) (archive,names,compression_string);
 }

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/archive.c	2008-07-04 09:26:29 UTC (rev 27209)
@@ -361,7 +361,7 @@
 				break;
 			_commands = _commands->next;
 		}
-		xa_archive_operation_finished(archive,result);
+		xa_archive_operation_finished(archive);
 here:
 		g_slist_foreach (commands,(GFunc) g_free,NULL);
 		g_slist_free(commands);
@@ -612,6 +612,7 @@
 		entry = entry->next;
 	}
 	xa_fill_dir_sidebar(archive,FALSE);
+	xa_handle_selected_rows(NULL,archive);
 }
 
 XEntry* xa_find_entry_from_path (XEntry *root_entry,const gchar *fullpathname)
@@ -870,6 +871,7 @@
 		g_string_free(string,TRUE);
 
 		xa_update_window_with_archive_entries(archive[idx],entry);
+		xa_handle_selected_rows(NULL,archive[idx]);
 	}
 }
 

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/interface.c	2008-07-04 09:26:29 UTC (rev 27209)
@@ -402,7 +402,6 @@
 	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);
 
 	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW (archive_dir_treeview));
@@ -431,11 +430,12 @@
 	gtk_drag_dest_set (GTK_WIDGET(notebook),GTK_DEST_DEFAULT_ALL,drop_targets,1,GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
 	g_signal_connect (G_OBJECT (notebook), "drag-data-received",G_CALLBACK (on_drag_data_received), NULL);
 
-  	hbox_sb = gtk_hbox_new (FALSE, 0);
+  	hbox_sb = gtk_hbox_new (FALSE,2);
 	gtk_widget_show (hbox_sb);
-	gtk_box_pack_end (GTK_BOX (vbox1), hbox_sb, FALSE, TRUE, 0);
+	gtk_box_pack_end (GTK_BOX (vbox1), hbox_sb, FALSE, TRUE,0);
 
 	viewport1 = gtk_viewport_new (NULL, NULL);
+	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport1),GTK_SHADOW_NONE);
 	gtk_widget_show (viewport1);
 	gtk_box_pack_start (GTK_BOX (hbox_sb), viewport1, TRUE, TRUE, 0);
 
@@ -445,11 +445,12 @@
 	gtk_container_add (GTK_CONTAINER (viewport1), info_label);
 
 	viewport2 = gtk_viewport_new (NULL, NULL);
+	gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport2),GTK_SHADOW_NONE);
 	gtk_box_pack_start (GTK_BOX (hbox_sb), viewport2, TRUE, TRUE, 0);
 
 	progressbar = gtk_progress_bar_new ();
 	gtk_widget_show (progressbar);
-	gtk_widget_set_size_request(progressbar, 80, 1);
+	gtk_widget_set_size_request(progressbar,-1,10);
 	gtk_container_add (GTK_CONTAINER (viewport2), progressbar);
 
 	g_signal_connect ((gpointer) new1, "activate", G_CALLBACK (xa_new_archive), NULL);
@@ -616,7 +617,7 @@
 	gtk_tree_view_set_rubber_banding(GTK_TREE_VIEW(archive->treeview),TRUE);
 
 	gtk_drag_source_set (archive->treeview, GDK_BUTTON1_MASK, drag_targets, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK);
-	g_signal_connect ((gpointer) sel, 				"changed", 		G_CALLBACK (xa_activate_delete_and_view),archive);
+	g_signal_connect ((gpointer) sel, 				"changed", 		G_CALLBACK (xa_handle_selected_rows),archive);
 	g_signal_connect (G_OBJECT (archive->treeview), "drag-begin",	G_CALLBACK (drag_begin),archive);
 	g_signal_connect (G_OBJECT (archive->treeview), "drag-data-get",G_CALLBACK (drag_data_get),archive);
 	g_signal_connect (G_OBJECT (archive->treeview), "drag-end",		G_CALLBACK (drag_end),NULL);
@@ -1167,6 +1168,9 @@
 	gint current_page;
 	gint idx;
 	XEntry *new_entry = NULL;
+	GtkTreeIter iter;
+	GtkTreeSelection *selection;
+	GtkTreeModel *model;
 
 	current_page = gtk_notebook_get_current_page (notebook);
 	idx = xa_find_archive_index (current_page);
@@ -1180,9 +1184,12 @@
 				g_free(archive[idx]->location_entry_path);
 				archive[idx]->location_entry_path = NULL;
 			}
+			/* Let's unselect the row in the sidepane */
+			selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (archive_dir_treeview));
+			gtk_tree_selection_get_selected (selection,&model,&iter);
+			gtk_tree_selection_unselect_iter(selection,&iter);
 
 			xa_update_window_with_archive_entries(archive[idx],NULL);
-
 			xa_restore_navigation(idx);
 		break;
 
@@ -1192,7 +1199,6 @@
 				archive[idx]->forward = g_slist_prepend(archive[idx]->forward,archive[idx]->current_entry);
 			xa_update_window_with_archive_entries(archive[idx],archive[idx]->back->data);
 			archive[idx]->back = archive[idx]->back->next;
-
 			xa_restore_navigation(idx);
 		break;
 

Modified: xarchiver/trunk/src/interface.h
===================================================================
--- xarchiver/trunk/src/interface.h	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/interface.h	2008-07-04 09:26:29 UTC (rev 27209)
@@ -122,21 +122,21 @@
 	GtkTextIter iter;
 } widget_data;
 
-gchar *xa_create_password_dialog(gchar *archive_name);
-void set_label (GtkWidget *label,gchar *text);
-int xa_progressbar_pulse (gpointer data);
+gchar *xa_create_password_dialog(gchar *);
+void set_label (GtkWidget *label,gchar *);
+int xa_progressbar_pulse (gpointer );
 void xa_create_popup_menu();
 widget_data *xa_create_output_window(gchar *);
-void xa_create_main_window (GtkWidget *xa_main_window,gboolean,gboolean,gboolean);
+void xa_create_main_window (GtkWidget *,gboolean,gboolean,gboolean);
 GtkWidget *create_archive_properties_window();
-gboolean select_matched_rows(GtkTreeModel *model,GtkTreePath *path,GtkTreeIter *iter,gpointer data);
-void xa_create_delete_dialog(GtkMenuItem *menuitem, gpointer user_data);
-void xa_handle_navigation_buttons (GtkMenuItem *menuitem, gpointer user_data);
-void xa_add_page (XArchive *archive);
-void xa_page_has_changed (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data);
-void xa_close_page (GtkWidget *widget, gpointer data);
+gboolean select_matched_rows(GtkTreeModel *,GtkTreePath *,GtkTreeIter *,gpointer );
+void xa_create_delete_dialog(GtkMenuItem *, gpointer );
+void xa_handle_navigation_buttons (GtkMenuItem *, gpointer );
+void xa_add_page (XArchive *);
+void xa_page_has_changed (GtkNotebook *, GtkNotebookPage *, guint , gpointer );
+void xa_close_page (GtkWidget *, gpointer );
 void xa_set_button_state (gboolean,gboolean,gboolean,gboolean,gboolean, gboolean, gboolean,gboolean);
 void xa_restore_navigation(int idx);
-void xa_disable_delete_buttons (gboolean value);
+void xa_disable_delete_buttons (gboolean );
 #endif
 

Modified: xarchiver/trunk/src/string_utils.c
===================================================================
--- xarchiver/trunk/src/string_utils.c	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/string_utils.c	2008-07-04 09:26:29 UTC (rev 27209)
@@ -246,15 +246,9 @@
 {
 	gchar *quoted_filename = NULL;
 	gchar *esc_filename = NULL;
+	
+	esc_filename = xa_escape_common_chars (filename , " '*?[]", '\\', 0);
 
-	quoted_filename = g_shell_quote(filename);
-	if (strstr(filename,"[") || strstr(filename,"]"))
-	{
-		esc_filename = xa_escape_common_chars (quoted_filename , "*?[]", '\\', 0);
-		g_free(quoted_filename);
-		quoted_filename = esc_filename;
-	}
-	g_string_prepend (data,quoted_filename);
+	g_string_prepend (data,esc_filename);
 	g_string_prepend_c (data,' ');
-	g_free (quoted_filename);
 }

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/window.c	2008-07-04 09:26:29 UTC (rev 27209)
@@ -76,7 +76,7 @@
 	return TRUE;
 }
 
-void xa_archive_operation_finished(XArchive *archive,gboolean error)
+void xa_archive_operation_finished(XArchive *archive)
 {
 	if(xa_main_window)
 	{
@@ -89,10 +89,6 @@
 			gtk_widget_set_sensitive (comment_menu,FALSE);
 			
 		xa_set_button_state (1,1,1,archive->can_add,archive->can_extract,archive->has_sfx,archive->has_test,archive->has_properties);
-		if (error)
-			Update_StatusBar ( _("Operation completed."));
-		else
-			Update_StatusBar ( _("Operation failed!"));
 
 		if (archive->has_comment && archive->status == XA_ARCHIVESTATUS_OPEN && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_window->check_show_comment)))
 			xa_show_archive_comment (NULL, NULL);
@@ -201,14 +197,6 @@
 		return;
 	}
 	result = xa_check_child_for_error_on_exit (archive,status);
-	if (result)
-	{
-		xa_archive_operation_finished(archive,result);
-		return;
-	}
-	else
-		xa_archive_operation_finished(archive,result);
-
 	if ( xa_main_window != NULL && archive != NULL)
 	{
 		if (archive->has_passwd == FALSE && archive->passwd == NULL)
@@ -216,6 +204,7 @@
 		else
 			gtk_widget_set_sensitive (password_entry_menu,TRUE);
 	}
+	xa_archive_operation_finished(archive);
 }
 
 void xa_new_archive (GtkMenuItem *menuitem, gpointer user_data)
@@ -1263,7 +1252,7 @@
 	if (archive[idx]->status != XA_ARCHIVESTATUS_ADD)
 		if (archive[idx]->has_passwd)
 			archive[idx]->has_passwd = FALSE;
-	xa_archive_operation_finished(archive[idx],0);
+	xa_archive_operation_finished(archive[idx]);
 }
 
 void xa_archive_properties (GtkMenuItem *menuitem,gpointer user_data)
@@ -1377,16 +1366,58 @@
     gtk_widget_show_all (archive_properties_window);
 }
 
-void xa_activate_delete_and_view (GtkTreeSelection *treeselection,gpointer data)
+void xa_handle_selected_rows (GtkTreeSelection *selection,gpointer data)
 {
 	XArchive *archive = data;
-	GtkTreeSelection *selection;
+	GList *list = NULL;
+	gchar *measure = NULL;
+	gchar *info = NULL;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	GtkTreePath *path;
+	gint selected,n_elem = 0,pos = 0;
+	unsigned long int total_size = 0;
+	unsigned int size = 0;
 
-	if ( ! GTK_WIDGET_VISIBLE (Extract_button) )
-		return;
+	/*if ( ! GTK_WIDGET_VISIBLE (Extract_button) )
+		return;*/
 
-	selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (archive->treeview));
-	gint selected = gtk_tree_selection_count_selected_rows (selection);
+	switch (archive->type)
+	{
+		case XARCHIVETYPE_GZIP:
+		case XARCHIVETYPE_BZIP2:
+		case XARCHIVETYPE_LZMA:
+		case XARCHIVETYPE_RPM:
+		pos = 3;
+		break;
+
+		case XARCHIVETYPE_RAR:
+		case XARCHIVETYPE_ARJ:
+		case XARCHIVETYPE_7ZIP:
+		pos = 2;
+		break;
+
+		case XARCHIVETYPE_LHA:
+		pos = 4;
+		break;
+
+		case XARCHIVETYPE_TAR_GZ:
+		case XARCHIVETYPE_TAR_BZ2:
+		case XARCHIVETYPE_TAR_LZMA:
+		case XARCHIVETYPE_TAR:
+		case XARCHIVETYPE_DEB:
+		case XARCHIVETYPE_ZIP:
+		pos = 5;
+		break;
+
+		default:
+		size = 0;
+	}
+	model = gtk_tree_view_get_model(GTK_TREE_VIEW(archive->treeview));
+	if (selection == NULL)
+		goto here;
+	selected = gtk_tree_selection_count_selected_rows (selection);
+
 	if (selected == 0 )
 		xa_disable_delete_buttons (FALSE);
 	else
@@ -1396,6 +1427,79 @@
 		else if ( archive->type != XARCHIVETYPE_RPM && archive->type != XARCHIVETYPE_DEB)
 			gtk_widget_set_sensitive (delete_menu,TRUE);
 	}
+	if (selected > 0)
+	{
+		list = gtk_tree_selection_get_selected_rows(selection,NULL);
+		while (list)
+		{
+			gtk_tree_model_get_iter(model,&iter,list->data);
+			gtk_tree_model_get (model,&iter,pos,&size,-1);
+			gtk_tree_path_free (list->data);
+			total_size += size;
+			list = list->next;
+		}
+		g_list_free(list);
+		if (total_size > 1024*1024*1024 )
+		{
+			content_size = (double)total_size / (1024*1024*1024);
+			measure = "GB";
+		}
+		else if (total_size > 1024*1024 )
+		{
+			content_size = (double)total_size / (1024*1024);
+			measure = "MB";
+		}
+    	else if (total_size > 1024 )
+		{
+			content_size = (double)total_size / 1024;
+			measure = "KB";
+		}
+		else
+		{
+			measure = "Bytes";
+			content_size = total_size;
+		}
+		info = g_strdup_printf(ngettext ("%d item selected (%.1f %s)", "%d items selected (%.1f %s)", selected),selected,content_size,measure);
+	}
+	else
+	{
+here:
+		if (model == NULL)
+			return;
+		path = gtk_tree_path_new_first();
+		if (gtk_tree_model_get_iter (model, &iter, path) == FALSE)
+			return;
+		do
+    	{
+    		n_elem++;
+    		gtk_tree_model_get (model,&iter,pos,&size,-1);
+	  		total_size += size;
+    	}
+  		while (gtk_tree_model_iter_next (model,&iter));
+  		if (total_size > 1024*1024*1024 )
+		{
+			content_size = (double)total_size / (1024*1024*1024);
+			measure = "GB";
+		}
+		else if (total_size > 1024*1024 )
+		{
+			content_size = (double)total_size / (1024*1024);
+			measure = "MB";
+		}
+    	else if (total_size > 1024 )
+		{
+			content_size = (double)total_size / 1024;
+			measure = "KB";
+		}
+		else
+		{
+			measure = "Bytes";
+			content_size = total_size;
+		}
+		info = g_strdup_printf(ngettext ("%d item (%.1f %s)", "%d items (%.1f %s)", n_elem),n_elem,content_size,measure);
+	}
+	Update_StatusBar(info);
+	g_free(info);
 }
 
 void xa_concat_filenames (GtkTreeModel *model, GtkTreePath *treepath, GtkTreeIter *iter, GString *data)

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h	2008-07-04 06:01:27 UTC (rev 27208)
+++ xarchiver/trunk/src/window.h	2008-07-04 09:26:29 UTC (rev 27209)
@@ -82,7 +82,7 @@
 void xa_cancel_archive ( GtkMenuItem * , gpointer);
 void xa_add_files_archive ( GtkMenuItem *, gpointer);
 void xa_show_prefs_dialog ( GtkMenuItem * , gpointer);
-void xa_activate_delete_and_view (GtkTreeSelection *treeselection,gpointer data);
+void xa_handle_selected_rows (GtkTreeSelection *treeselection,gpointer data);
 void on_drag_data_received (GtkWidget *widget,GdkDragContext *context, int x,int y,GtkSelectionData *data, unsigned int info, unsigned int time, gpointer );
 void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data);
 void drag_end (GtkWidget *treeview1, GdkDragContext *context, gpointer data);
@@ -94,7 +94,7 @@
 gboolean key_press_function ( GtkWidget* widget, GdkEventKey* event,gpointer data);
 gboolean treeview_select_search (GtkTreeModel *model,gint column,const gchar *key,GtkTreeIter *,gpointer );
 gboolean xa_check_child_for_error_on_exit(XArchive *,gint status);
-void xa_archive_operation_finished(XArchive *,gboolean error);
+void xa_archive_operation_finished(XArchive *);
 void xa_reload_archive_content(XArchive *);
 void xa_watch_child ( GPid pid, gint status, gpointer data);
 void xa_remove_columns();
@@ -102,7 +102,7 @@
 void xa_concat_filenames (GtkTreeModel *, GtkTreePath *, GtkTreeIter *, GString *);
 void xa_cat_filenames (XArchive *,GSList *,GString *,gchar *);
 void xa_cat_filenames_basename (XArchive *,GSList *,GString *,gchar *);
-void Update_StatusBar (gchar *msg);
+void Update_StatusBar (gchar *);
 
 gchar *xa_open_file_dialog ();
 gchar *xa_open_sfx_file_selector ();



More information about the Xfce4-commits mailing list