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

Reply via email to