Author: colossus Date: 2008-08-18 12:25:20 +0000 (Mon, 18 Aug 2008) New Revision: 27505
Modified: xarchiver/trunk/src/archive.c xarchiver/trunk/src/extract_dialog.c xarchiver/trunk/src/extract_dialog.h xarchiver/trunk/src/interface.c xarchiver/trunk/src/interface.h xarchiver/trunk/src/main.c xarchiver/trunk/src/pref_dialog.c xarchiver/trunk/src/window.c Log: Made the progress bar to work. This files bug #4292. Modified: xarchiver/trunk/src/archive.c =================================================================== --- xarchiver/trunk/src/archive.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/archive.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -321,7 +321,6 @@ gboolean result = TRUE; int response; GSList *_commands = commands; - GError *error = NULL; gchar *std_out,*std_err,*new_std_err,*dummy; gchar **argv; @@ -351,7 +350,7 @@ } if (WIFEXITED(status)) { - if (WEXITSTATUS(status)) + if (WEXITSTATUS(status) && 0 == 1) { if (strlen(std_err) > 1954) { Modified: xarchiver/trunk/src/extract_dialog.c =================================================================== --- xarchiver/trunk/src/extract_dialog.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/extract_dialog.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -23,14 +23,14 @@ #include "string_utils.h" #include "support.h" -extern gboolean unrar; +extern gboolean unrar,batch_mode; extern Prefs_dialog_data *prefs_window; gchar *rar; static gchar *xa_multi_extract_archive(gchar *,gboolean,gboolean,gchar *); static void xa_select_where_to_extract ( GtkButton*,Multi_extract_data * ); static void xa_remove_files_liststore (GtkWidget *,Multi_extract_data *); -static void xa_multi_extract_dialog_select_files_to_add ( GtkButton* , GtkListStore * ); +static void xa_multi_extract_dialog_select_files_to_add ( GtkButton* , Multi_extract_data * ); static void remove_foreach_func (GtkTreeModel *, GtkTreePath *, GtkTreeIter *, GList **); static void xa_multi_extract_dialog_drag_data_received (GtkWidget *,GdkDragContext *,int x,int y,GtkSelectionData *,unsigned int,unsigned int,gpointer ); static const GtkTargetEntry drop_targets[] = @@ -639,7 +639,7 @@ add_button = gtk_button_new_from_stock ("gtk-add"); gtk_box_pack_end (GTK_BOX (hbox2), add_button, FALSE, FALSE, 0); gtk_button_set_focus_on_click (GTK_BUTTON (add_button), FALSE); - g_signal_connect ( (gpointer) add_button, "clicked", G_CALLBACK (xa_multi_extract_dialog_select_files_to_add),dialog_data->files_liststore); + g_signal_connect ( (gpointer) add_button, "clicked", G_CALLBACK (xa_multi_extract_dialog_select_files_to_add),dialog_data); remove_button = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_set_sensitive (remove_button,FALSE); @@ -724,7 +724,7 @@ return dialog_data; } -void xa_multi_extract_dialog_select_files_to_add (GtkButton* button, GtkListStore *files_liststore) +void xa_multi_extract_dialog_select_files_to_add (GtkButton* button, Multi_extract_data *dialog) { GtkWidget *file_selector; GSList *dummy = NULL; @@ -743,7 +743,7 @@ if (response == GTK_RESPONSE_ACCEPT) { dummy = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (file_selector)); - g_slist_foreach( dummy, (GFunc) xa_add_files_liststore,files_liststore); + g_slist_foreach( dummy, (GFunc) xa_add_files_liststore,dialog); } if (dummy != NULL) g_slist_free (dummy); @@ -751,7 +751,7 @@ return; } -void xa_add_files_liststore (gchar *file_path, GtkListStore *liststore) +void xa_add_files_liststore (gchar *file_path, Multi_extract_data *dialog) { GtkTreeIter iter; gchar *file_utf8,*_file_utf8; @@ -769,8 +769,9 @@ _file_utf8 = xa_remove_path_from_archive_name(file_utf8); g_free (file_utf8); file_utf8 = _file_utf8; - gtk_list_store_append(liststore, &iter); - gtk_list_store_set (liststore, &iter,0,file_utf8,1,file_size,2,path,-1); + gtk_list_store_append(dialog->files_liststore,&iter); + gtk_list_store_set (dialog->files_liststore,&iter,0,file_utf8,1,file_size,2,path,-1); + dialog->nr++; g_free (file_utf8); g_free (path); } @@ -838,7 +839,7 @@ while (array[len]) { filename = g_filename_from_uri ( array[len] , NULL, NULL ); - xa_add_files_liststore (filename,dialog_data->files_liststore); + xa_add_files_liststore (filename,dialog_data); g_free (filename); len++; } @@ -872,10 +873,12 @@ void xa_parse_multi_extract_archive(Multi_extract_data *dialog) { GtkTreeIter iter; - gchar *filename,*file,*path,*message = NULL,*name,*dest_path = NULL; + gchar *filename = NULL,*file,*path,*message = NULL,*name,*dest_path = NULL; GString *output = g_string_new(""); + Progress_bar_data *pb_struct; gboolean overwrite,full_path; gint response; + double percent = 0.0; gtk_widget_show_all(dialog->multi_extract); run: @@ -903,11 +906,14 @@ overwrite = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->overwrite)); full_path = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->full_path)); - + batch_mode = TRUE; + double fraction = 100 / dialog->nr; + pb_struct = xa_create_progress_bar(); do { gtk_tree_model_get (GTK_TREE_MODEL(dialog->files_liststore),&iter,0,&file,2,&path,-1); filename = g_strconcat (path,"/",file,NULL); + xa_increase_progress_bar(pb_struct,filename,percent,TRUE); g_free(file); g_free(path); message = xa_multi_extract_archive(filename,overwrite,full_path,dest_path); @@ -917,15 +923,20 @@ g_string_append(output,name); } g_free(filename); + percent += fraction; } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(dialog->files_liststore),&iter)); - + gtk_widget_destroy(pb_struct->progress_window); + g_free(pb_struct); + if (strlen(output->str) > 0) xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("Some errors occurred:"),output->str ); g_string_free(output,TRUE); if (dest_path != NULL) g_free(dest_path); + + batch_mode = FALSE; } static gchar *xa_multi_extract_archive(gchar *filename,gboolean overwrite,gboolean full_path,gchar *dest_path) @@ -960,11 +971,6 @@ archive->escaped_path = xa_escape_bad_chars (filename,"$\'`\"\\!?* ()&|@#:;"); archive->extraction_path = g_strdup(dest_path); (*archive->extract) (archive,NULL); - - /* - * Have a progress bar set according to the number of chosen archives - * each time you extract a new archive increment the progress bar and store - * the message output */ xa_clean_archive_structure(archive); return NULL; } Modified: xarchiver/trunk/src/extract_dialog.h =================================================================== --- xarchiver/trunk/src/extract_dialog.h 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/extract_dialog.h 2008-08-18 12:25:20 UTC (rev 27505) @@ -37,7 +37,7 @@ GtkWidget *multi_extract,*files_treeview,*hbox2,*extract_to,*entry1,*extract_to_archive_name,*label1,*frame2,*alignment2,*vbox3,*overwrite,*full_path,*label2,*dialog_action_area1, *extract_button,*extract_image,*extract_hbox,*extract_label,*image1; GtkListStore *files_liststore; - gulong handler; + gint nr; } Multi_extract_data; GtkWidget *label1,*label2,*label3,*label4,*label_password; @@ -64,7 +64,7 @@ void xa_treeview_exposed (GtkWidget *,GdkEventExpose *,gpointer ); Multi_extract_data *xa_create_multi_extract_dialog(); void xa_activate_remove_button (GtkTreeModel *, GtkTreePath *, GtkTreeIter *, GtkWidget *); -void xa_add_files_liststore (gchar *, GtkListStore *); +void xa_add_files_liststore (gchar *, Multi_extract_data *); void xa_parse_multi_extract_archive(Multi_extract_data *); #endif Modified: xarchiver/trunk/src/interface.c =================================================================== --- xarchiver/trunk/src/interface.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/interface.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -479,12 +479,6 @@ gtk_widget_show (hbox_sb); gtk_box_pack_end (GTK_BOX (vbox1),hbox_sb,FALSE,TRUE,0); - /* - progressbar = gtk_progress_bar_new (); - gtk_widget_show (progressbar); - gtk_widget_set_size_request(progressbar,-1,10); - gtk_container_add (GTK_CONTAINER (viewport2),progressbar);*/ - total_frame = gtk_frame_new (NULL); gtk_widget_show (total_frame); gtk_box_pack_start (GTK_BOX (hbox_sb),total_frame,TRUE,TRUE,0); @@ -1469,65 +1463,68 @@ return TRUE; } -void xa_increase_progress_bar(gchar *archive_name,double fraction) +Progress_bar_data *xa_create_progress_bar() { - static GtkWidget *progress_window = NULL; - GtkWidget *vbox1,*vbox2,*extract_message,*hbox1,*icon_pixbuf,*archive_label,*total_label,*progressbar1; + GtkWidget *vbox1,*vbox2,*extract_message,*hbox1,*icon_pixbuf,*total_label; GdkPixbuf *pixbuf; + Progress_bar_data *pb = NULL; - if (progress_window == NULL) - { - progress_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (progress_window), _("Xarchiver")); - gtk_window_set_position (GTK_WINDOW (progress_window), GTK_WIN_POS_CENTER_ON_PARENT); - gtk_window_set_default_size(GTK_WINDOW(progress_window),-1,117); - gtk_window_set_resizable(GTK_WINDOW (progress_window),FALSE); - gtk_container_set_border_width (GTK_CONTAINER (progress_window),6); - gtk_window_set_transient_for (GTK_WINDOW (progress_window),GTK_WINDOW (xa_main_window)); + pb = g_new0(Progress_bar_data,1); + pb->progress_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (pb->progress_window), _("Xarchiver")); + gtk_window_set_position (GTK_WINDOW (pb->progress_window), GTK_WIN_POS_CENTER_ON_PARENT); + gtk_window_set_default_size(GTK_WINDOW(pb->progress_window),-1,117); + gtk_window_set_resizable(GTK_WINDOW (pb->progress_window),FALSE); + gtk_container_set_border_width (GTK_CONTAINER (pb->progress_window),6); + gtk_window_set_transient_for (GTK_WINDOW (pb->progress_window),GTK_WINDOW (xa_main_window)); - vbox1 = gtk_vbox_new (FALSE,12); - gtk_container_add (GTK_CONTAINER (progress_window), vbox1); - gtk_container_set_border_width (GTK_CONTAINER (vbox1),6); + vbox1 = gtk_vbox_new (FALSE,12); + gtk_container_add (GTK_CONTAINER (pb->progress_window), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1),6); - hbox1 = gtk_hbox_new (FALSE,12); - gtk_box_pack_start (GTK_BOX (vbox1),hbox1,TRUE,TRUE,0); + hbox1 = gtk_hbox_new (FALSE,12); + gtk_box_pack_start (GTK_BOX (vbox1),hbox1,TRUE,TRUE,0); - pixbuf = gtk_icon_theme_load_icon(icon_theme,"gnome-mime-application-zip",40,0,NULL); - icon_pixbuf = gtk_image_new_from_pixbuf(pixbuf); - g_object_unref(pixbuf); + pixbuf = gtk_icon_theme_load_icon(icon_theme,"gnome-mime-application-zip",40,0,NULL); + icon_pixbuf = gtk_image_new_from_pixbuf(pixbuf); + g_object_unref(pixbuf); - gtk_box_pack_start (GTK_BOX (hbox1), icon_pixbuf, FALSE, FALSE, 0); - gtk_misc_set_alignment (GTK_MISC (icon_pixbuf), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (hbox1), icon_pixbuf, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (icon_pixbuf), 0.0, 0.0); - vbox2 = gtk_vbox_new (FALSE,0); - gtk_box_pack_start (GTK_BOX (hbox1),vbox2,TRUE,TRUE,0); + vbox2 = gtk_vbox_new (FALSE,0); + gtk_box_pack_start (GTK_BOX (hbox1),vbox2,TRUE,TRUE,0); - extract_message = gtk_label_new (_("Extracting archive:")); - gtk_label_set_use_markup (GTK_LABEL (extract_message), TRUE); - gtk_box_pack_start (GTK_BOX (vbox2), extract_message, FALSE, FALSE, 0); - gtk_misc_set_alignment (GTK_MISC (extract_message),0,0.5); + extract_message = gtk_label_new (_("Extracting archive:")); + gtk_label_set_use_markup (GTK_LABEL (extract_message), TRUE); + gtk_box_pack_start (GTK_BOX (vbox2), extract_message, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (extract_message),0,0.5); - archive_label = gtk_label_new (archive_name); - gtk_box_pack_start (GTK_BOX (vbox2),archive_label,FALSE,FALSE,12); - gtk_misc_set_alignment (GTK_MISC (archive_label),0,0.5); + pb->archive_label = gtk_label_new(""); + gtk_box_pack_start (GTK_BOX (vbox2),pb->archive_label,FALSE,FALSE,12); + gtk_misc_set_alignment (GTK_MISC (pb->archive_label),0,0.5); - total_label = gtk_label_new (_("Total Progress:")); - gtk_box_pack_start (GTK_BOX (vbox2), total_label, FALSE, FALSE, 0); - gtk_misc_set_alignment (GTK_MISC (total_label), 0, 0); + total_label = gtk_label_new (_("Total Progress:")); + gtk_box_pack_start (GTK_BOX (vbox2), total_label,FALSE,FALSE,0); + gtk_misc_set_alignment (GTK_MISC (total_label),0,0); - progressbar1 = gtk_progress_bar_new (); - if (fraction < 0) - g_print ("This means we are using a bounce progress bar"); - gtk_box_pack_start (GTK_BOX (vbox2), progressbar1, FALSE, FALSE, 0); - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar1), 0.5); - gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (progressbar1), 0); - gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar1), _("50%")); - gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (progressbar1), PANGO_ELLIPSIZE_MIDDLE); - /*gchar *message = g_strdup_printf("%.0f complete", percent); - gtk_progress_bar_set_fraction(progress, percent/100.0 ); - gtk_progress_bar_set_text(progress, message); - progress +=*/ - gtk_widget_show_all(vbox1); - } - gtk_widget_show(progress_window); + pb->progressbar1 = gtk_progress_bar_new (); + gtk_box_pack_start (GTK_BOX (vbox2), pb->progressbar1,FALSE,FALSE,0); + gtk_progress_bar_set_ellipsize (GTK_PROGRESS_BAR (pb->progressbar1),PANGO_ELLIPSIZE_MIDDLE); + gtk_widget_show_all(pb->progress_window); + return pb; } + +void xa_increase_progress_bar(Progress_bar_data *pb,gchar *archive_name,double percent,gboolean multi_extract) +{ + gchar *message = NULL; + + GDK_THREADS_ENTER (); + gtk_label_set_text(GTK_LABEL(pb->archive_label),archive_name); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (pb->progressbar1),CLAMP (percent, 0.0, 1.0)); + //gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (progressbar1),0); + message = g_strdup_printf("%.0f%s",percent,"%"); + gtk_progress_bar_set_text (GTK_PROGRESS_BAR(pb->progressbar1),message); + g_free(message); + GDK_THREADS_LEAVE (); +} Modified: xarchiver/trunk/src/interface.h =================================================================== --- xarchiver/trunk/src/interface.h 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/interface.h 2008-08-18 12:25:20 UTC (rev 27505) @@ -22,6 +22,15 @@ #include "archive.h" #include "pref_dialog.h" +typedef struct _Progress_bar_data Progress_bar_data; + +struct _Progress_bar_data +{ + GtkWidget *progress_window; + GtkWidget *progressbar1; + GtkWidget *archive_label; +}; + GtkNotebook *notebook; GtkIconSize tmp_toolbar_icon_size; GtkTreeStore *archive_dir_model; @@ -60,4 +69,6 @@ void xa_sidepane_drag_data_received ( GtkWidget*,GdkDragContext *,int x,int y,GtkSelectionData *, unsigned int info,unsigned int time,gpointer ); gboolean xa_sidepane_drag_motion_expand_timeout (GtkTreePath **); gboolean xa_sidepane_drag_motion ( GtkWidget*,GdkDragContext *,gint x,gint y,guint ,gpointer ); +Progress_bar_data *xa_create_progress_bar(); +void xa_increase_progress_bar(Progress_bar_data *,gchar *,double ,gboolean ); #endif Modified: xarchiver/trunk/src/main.c =================================================================== --- xarchiver/trunk/src/main.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/main.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -119,7 +119,6 @@ if (batch_mode == TRUE) { xa_main_window = NULL; - //gtk_main_iteration_do (FALSE); archive = xa_init_structure_from_cmd_line (argv[1]); g_print ("Xarchiver " VERSION " (\xC2\xA9)2005-2008 Giuseppe Torelli\n"); @@ -170,7 +169,7 @@ Multi_extract_data *multi_extract = NULL; multi_extract = xa_create_multi_extract_dialog(); for (x = 1; x< argc; x++) - xa_add_files_liststore(argv[x],multi_extract->files_liststore); + xa_add_files_liststore(argv[x],multi_extract); xa_parse_multi_extract_archive(multi_extract); gtk_widget_destroy (multi_extract->multi_extract); g_free(multi_extract); Modified: xarchiver/trunk/src/pref_dialog.c =================================================================== --- xarchiver/trunk/src/pref_dialog.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/pref_dialog.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -372,9 +372,9 @@ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_data->check_save_geometry)) ) { /* Main window coords */ - prefs_data->geometry[4] = gtk_paned_get_position(GTK_PANED(hpaned1)); gtk_window_get_position (GTK_WINDOW(xa_main_window),&prefs_data->geometry[0],&prefs_data->geometry[1]); gtk_window_get_size (GTK_WINDOW(xa_main_window),&prefs_data->geometry[2],&prefs_data->geometry[3]); + prefs_data->geometry[4] = gtk_paned_get_position(GTK_PANED(hpaned1)); g_key_file_set_integer_list(xa_key_file, PACKAGE, "mainwindow", prefs_data->geometry,5); /* Extract dialog coords */ gtk_window_get_size (GTK_WINDOW(extract_window->dialog1),&prefs_data->extract_dialog[0],&prefs_data->extract_dialog[1]); Modified: xarchiver/trunk/src/window.c =================================================================== --- xarchiver/trunk/src/window.c 2008-08-18 05:36:39 UTC (rev 27504) +++ xarchiver/trunk/src/window.c 2008-08-18 12:25:20 UTC (rev 27505) @@ -60,7 +60,7 @@ g_free (msg); } else if (archive->status == XA_ARCHIVESTATUS_OPEN) - gtk_widget_set_sensitive (check_menu,FALSE ); + gtk_widget_set_sensitive (check_menu,FALSE); xa_set_button_state (1,1,1,1,archive->can_add,archive->can_extract,archive->has_sfx,archive->has_test,archive->has_properties); return; _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits