Author: colossus
Date: 2008-10-20 10:58:01 +0000 (Mon, 20 Oct 2008)
New Revision: 28321

Modified:
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/archive.h
   xarchiver/trunk/src/arj.c
   xarchiver/trunk/src/extract_dialog.c
   xarchiver/trunk/src/interface.c
   xarchiver/trunk/src/interface.h
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/window.h
Log:
Have the progress bar when using the switches from cmd-line to move nicely.
Fixed crash when pressing the stop button after using the Multi-Extract dialog.
Fixed crash when opening arj archives with hardlinks.
Fixed missed error handling when using the switches from cmd-line.


Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c       2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/archive.c       2008-10-20 10:58:01 UTC (rev 28321)
@@ -83,7 +83,6 @@
                &archive->output_fd,
                &archive->error_fd,
                &error))
-       //TODO: change the string to: An error occurred!
        {
                response = xa_show_message_dialog 
(NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("Can't run the 
archiver executable:"),error->message);
                g_error_free (error);
@@ -356,7 +355,11 @@
                        archive->pb_source = g_timeout_add 
(350,(GSourceFunc)xa_flash_led_indicator,archive);
        }
        else
+       {
                pb = xa_create_progress_bar(TRUE,archive);
+               if (archive->pb_source == 0)
+                       archive->pb_source = g_timeout_add 
(100,(GSourceFunc)xa_pulse_progress_bar_window,pb);
+       }
 
        while (_commands)
        {

Modified: xarchiver/trunk/src/archive.h
===================================================================
--- xarchiver/trunk/src/archive.h       2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/archive.h       2008-10-20 10:58:01 UTC (rev 28321)
@@ -108,6 +108,7 @@
        gboolean can_extract;
        gboolean has_properties;
        gboolean cut_copy_string;
+       gboolean create_image;
        GString *comment;
        GSList *error_output;
        GType *column_types;

Modified: xarchiver/trunk/src/arj.c
===================================================================
--- xarchiver/trunk/src/arj.c   2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/arj.c   2008-10-20 10:58:01 UTC (rev 28321)
@@ -57,7 +57,7 @@
        unsigned int linesize,n,a;
        static gchar *filename;
 
-       if (last_line)
+       if (last_line || strstr(line,"HardLink"))
                return;
 
        if (arj_line == 3)
@@ -104,14 +104,14 @@
        {
                linesize = strlen(line);
                /* Size */
-               for(n=12; n < linesize && line[n] == ' '; n++);
+               for(n=0; n < linesize && line[n] == ' '; n++);
                a = n;
                for(; n < linesize && line[n] != ' '; n++);
                line[n]='\0';
                item[0] = line + a;
                archive->dummy_size += strtoll(item[0],NULL,0);
                n++;
-               
+
                /* Compressed */
                for(; n < linesize && line[n] == ' '; n++);
                a = n;

Modified: xarchiver/trunk/src/extract_dialog.c
===================================================================
--- xarchiver/trunk/src/extract_dialog.c        2008-10-20 10:40:09 UTC (rev 
28320)
+++ xarchiver/trunk/src/extract_dialog.c        2008-10-20 10:58:01 UTC (rev 
28321)
@@ -405,7 +405,6 @@
        gtk_widget_set_size_request(dialog_data->multi_extract,-1,300);
        gtk_dialog_set_has_separator (GTK_DIALOG 
(dialog_data->multi_extract),FALSE);
        gtk_window_set_title (GTK_WINDOW 
(dialog_data->multi_extract),_("Multi-Extract"));
-       gtk_window_set_transient_for (GTK_WINDOW 
(dialog_data->multi_extract),GTK_WINDOW (xa_main_window));
 
        dialog_vbox1 = GTK_DIALOG (dialog_data->multi_extract)->vbox;
        vbox1 = gtk_vbox_new (FALSE,5);

Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c     2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/interface.c     2008-10-20 10:58:01 UTC (rev 28321)
@@ -537,7 +537,7 @@
        g_signal_connect ((gpointer) extract_menu,"activate",G_CALLBACK 
(xa_extract_archive),NULL);
        g_signal_connect ((gpointer) exe_menu,"activate",G_CALLBACK 
(xa_convert_sfx),NULL);
        g_signal_connect ((gpointer) addfile,"activate",G_CALLBACK 
(xa_add_files_archive),NULL);
-       g_signal_connect ((gpointer) view_shell_output1,"activate",G_CALLBACK 
(xa_show_cmd_line_output),(gpointer) 0);
+       g_signal_connect ((gpointer) view_shell_output1,"activate",G_CALLBACK 
(xa_show_cmd_line_output),NULL);
        g_signal_connect ((gpointer) select_all,"activate",G_CALLBACK 
(xa_select_all),NULL);
        g_signal_connect ((gpointer) deselect_all,"activate",G_CALLBACK 
(xa_deselect_all),NULL);
        g_signal_connect ((gpointer) select_pattern,"activate",G_CALLBACK 
(xa_select_by_pattern_dialog),NULL);
@@ -1067,7 +1067,6 @@
 
        gtk_container_set_border_width (GTK_CONTAINER 
(archive_properties_window),6);
        gtk_window_set_position (GTK_WINDOW 
(archive_properties_window),GTK_WIN_POS_CENTER_ON_PARENT);
-       gtk_window_set_transient_for (GTK_WINDOW 
(archive_properties_window),GTK_WINDOW (xa_main_window));
        gtk_window_set_type_hint (GTK_WINDOW 
(archive_properties_window),GDK_WINDOW_TYPE_HINT_DIALOG);
        gtk_window_set_resizable (GTK_WINDOW (archive_properties_window),FALSE);
        gtk_window_set_modal (GTK_WINDOW (archive_properties_window),TRUE);
@@ -1556,6 +1555,7 @@
 
        if (flag)
        {
+               
gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(pb->progressbar1),0.033);
                pb->file_label = gtk_label_new("");
                italic_attr = pango_attr_list_new ();
                pango_attr_list_insert (italic_attr, pango_attr_style_new 
(PANGO_STYLE_ITALIC));
@@ -1591,10 +1591,8 @@
                g_free(message);
        }
        else
-       {
-               gtk_progress_bar_pulse(GTK_PROGRESS_BAR(pb->progressbar1));
                gtk_label_set_text(GTK_LABEL(pb->file_label),filename);
-       }
+
        while (gtk_events_pending())
                gtk_main_iteration();
 }
@@ -1617,3 +1615,14 @@
 {
        kill (pid,SIGABRT);
 }
+
+gboolean xa_pulse_progress_bar_window (Progress_bar_data *pb)
+{
+       if (GTK_WIDGET_VISIBLE(pb->progress_window))
+       {
+               gtk_progress_bar_pulse(GTK_PROGRESS_BAR(pb->progressbar1));
+               return TRUE;
+       }
+       else
+               return FALSE;
+}

Modified: xarchiver/trunk/src/interface.h
===================================================================
--- xarchiver/trunk/src/interface.h     2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/interface.h     2008-10-20 10:58:01 UTC (rev 28321)
@@ -55,6 +55,7 @@
 gchar *xa_create_password_dialog(XArchive *);
 void set_label (GtkWidget *label,gchar *);
 gboolean xa_flash_led_indicator (XArchive *);
+gboolean xa_pulse_progress_bar_window (Progress_bar_data *);
 void xa_create_popup_menu();
 void xa_create_main_window (GtkWidget *,gboolean,gboolean,gboolean);
 GtkWidget *xa_create_archive_properties_window();

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c  2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/main.c  2008-10-20 10:58:01 UTC (rev 28321)
@@ -239,6 +239,7 @@
                gtk_window_set_transient_for (GTK_WINDOW 
(extract_window->dialog1),GTK_WINDOW (xa_main_window));
                gtk_window_set_transient_for (GTK_WINDOW 
(add_window->dialog1),GTK_WINDOW (xa_main_window));
                gtk_window_set_transient_for (GTK_WINDOW 
(prefs_window->dialog1),GTK_WINDOW (xa_main_window));
+               gtk_window_set_transient_for (GTK_WINDOW 
(multi_extract_window->multi_extract),GTK_WINDOW (xa_main_window));
                if 
(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_window->check_save_geometry))
 && prefs_window->geometry[0] != -1)
                {
                        gtk_window_move (GTK_WINDOW(xa_main_window), 
prefs_window->geometry[0], prefs_window->geometry[1]);

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c        2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/window.c        2008-10-20 10:58:01 UTC (rev 28321)
@@ -47,6 +47,8 @@
        {
                if (WEXITSTATUS (status))
                {
+                       if (xa_main_window == NULL)
+                               goto error;
                        if ((WEXITSTATUS (status) == 1 && archive->type == 
XARCHIVETYPE_ZIP) || (WEXITSTATUS (status) == 6 && archive->type == 
XARCHIVETYPE_ARJ))
                                goto there;
                        if ( ! 
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(prefs_window->store_output)))
@@ -56,16 +58,18 @@
                        }
                        if (xa_main_window)
                        {
+                               archive->status = XA_ARCHIVESTATUS_ERROR;
+                               gtk_widget_set_sensitive(Stop_button,FALSE);
                                xa_set_button_state 
(1,1,1,1,archive->can_add,archive->can_extract,0,archive->has_test,archive->has_properties,archive->has_passwd,1);
-                               xa_show_cmd_line_output 
(NULL,GINT_TO_POINTER(1));
+               error:
+                               archive->create_image = TRUE;
+                               xa_show_cmd_line_output (NULL,archive);
                                /* In case the user supplies a wrong password 
we reset it so he can try again */
                                if ( (archive->status == XA_ARCHIVESTATUS_TEST 
|| archive->status == XA_ARCHIVESTATUS_SFX) && archive->passwd != NULL)
                                {
                                        g_free (archive->passwd);
                                        archive->passwd = NULL;
                                }
-                               archive->status = XA_ARCHIVESTATUS_ERROR;
-                               gtk_widget_set_sensitive(Stop_button,FALSE);
                                return;
                        }
                }
@@ -95,8 +99,10 @@
                xa_set_statusbar_message_for_displayed_rows(archive);
 
                if (archive->status == XA_ARCHIVESTATUS_TEST)
-                       xa_show_cmd_line_output (NULL,FALSE);
-
+               {
+                       archive->create_image = FALSE;
+                       xa_show_cmd_line_output (NULL,archive);
+               }
                if (archive->status == XA_ARCHIVESTATUS_OPEN)
                        xa_set_button_state 
(1,1,1,1,archive->can_add,archive->can_extract,archive->has_sfx,archive->has_test,archive->has_properties,1,1);
 
@@ -124,25 +130,30 @@
        xa_fill_dir_sidebar(archive,TRUE);
 }
 
-void xa_show_cmd_line_output(GtkMenuItem *menuitem,gpointer data)
+void xa_show_cmd_line_output(GtkMenuItem *menuitem,XArchive *_archive)
 {
-       gboolean create_image = GPOINTER_TO_INT(data);
        GSList *output = NULL;
+       gchar *title = NULL;
        gchar *line = NULL;
        gchar *utf8_line;
        gsize bytes_written;
        GtkWidget *dialog,*label,*image,*hbox,*vbox,*textview,*scrolledwindow;
        GtkTextBuffer *textbuffer;
        GtkTextIter iter;
-       gint current_page;
-       gint idx;
+       gint current_page,idx = -1;
+       
+       if (_archive == NULL)
+       {
+               current_page = gtk_notebook_get_current_page(notebook);
+               idx = xa_find_archive_index (current_page);
+               _archive = archive[idx];
+       }
 
-       current_page = gtk_notebook_get_current_page(notebook);
-       idx = xa_find_archive_index (current_page);
-
-       if (archive[idx] == NULL)
-               return;
-       dialog = gtk_dialog_new_with_buttons (_("Archiver output"),
+       if (xa_main_window)
+               title = _("Archiver output");
+       else
+               title = ("Xarchiver " VERSION);
+       dialog = gtk_dialog_new_with_buttons (title,
                                              
GTK_WINDOW(xa_main_window),GTK_DIALOG_MODAL,GTK_STOCK_OK,GTK_RESPONSE_OK,NULL);
        gtk_dialog_set_default_response (GTK_DIALOG (dialog),GTK_RESPONSE_OK);
 
@@ -168,16 +179,13 @@
        vbox = gtk_vbox_new (FALSE,6);
        gtk_container_set_border_width (GTK_CONTAINER (vbox),5);
        
-       if (create_image)
+       if (_archive->create_image)
        {
-               create_image = FALSE;
+               _archive->create_image = FALSE;
                image = gtk_image_new_from_stock 
(GTK_STOCK_DIALOG_ERROR,GTK_ICON_SIZE_DIALOG);
                gtk_misc_set_alignment (GTK_MISC (image),0.5,0.0);
 
                label = gtk_label_new (_("An error occurred while accessing the 
archive:"));
-               gtk_label_set_line_wrap (GTK_LABEL (label),TRUE);
-               gtk_label_set_selectable (GTK_LABEL (label),TRUE);
-
                hbox = gtk_hbox_new (FALSE,6);
                gtk_box_pack_start (GTK_BOX (hbox),image,FALSE,FALSE,0);
                gtk_box_pack_start (GTK_BOX (hbox),label,TRUE,TRUE,0);
@@ -187,7 +195,7 @@
        gtk_box_pack_start (GTK_BOX (vbox),scrolledwindow,TRUE,TRUE,0);
        gtk_box_pack_start (GTK_BOX (GTK_DIALOG 
(dialog)->vbox),vbox,TRUE,TRUE,0);
 
-       output = archive[idx]->error_output;
+       output = _archive->error_output;
        while (output)
        {
                line = output->data;
@@ -215,7 +223,6 @@
                return;
 
        xa_add_page (archive[current_page]);
-
        xa_set_button_state (0,0,0,1,1,0,0,0,0,1,0);
     xa_disable_delete_buttons(FALSE);
 
@@ -1311,7 +1318,7 @@
        current_page = gtk_notebook_get_current_page(notebook);
        idx = xa_find_archive_index (current_page);
        gtk_widget_set_sensitive(Stop_button,FALSE);
-       if (GTK_WIDGET_REALIZED(multi_extract_window->multi_extract))
+       if (GTK_WIDGET_VISIBLE(multi_extract_window->multi_extract))
        {
                multi_extract_window->stop_pressed = TRUE;
                kill (multi_extract_window->archive->child_pid,SIGABRT);
@@ -2599,13 +2606,22 @@
        row_list = 
gtk_tree_selection_get_selected_rows(selection,&archive[idx]->model);
        if (row_list == NULL)
                return;
-               
+
        nr = gtk_tree_selection_count_selected_rows(selection);
        while (row_list)
        {
                
gtk_tree_model_get_iter(archive[idx]->model,&iter,row_list->data);
                
gtk_tree_model_get(archive[idx]->model,&iter,archive[idx]->nc+1,&entry,-1);
                gtk_tree_path_free(row_list->data);
+               if (entry->is_encrypted)
+               {
+                       if (archive[idx]->passwd == NULL)
+                       {
+                               archive[idx]->passwd = 
xa_create_password_dialog(archive[idx]);
+                               if (archive[idx]->passwd == NULL)
+                                       return;
+                       }
+               }
                list = 
g_slist_append(list,xa_build_full_path_name_from_entry(entry,0));
                row_list = row_list->next;
        }
@@ -2633,7 +2649,7 @@
        }
        if (result == FALSE)
                return;
-               
+
        chdir(archive[idx]->tmp);
        do
        {

Modified: xarchiver/trunk/src/window.h
===================================================================
--- xarchiver/trunk/src/window.h        2008-10-20 10:40:09 UTC (rev 28320)
+++ xarchiver/trunk/src/window.h        2008-10-20 10:58:01 UTC (rev 28321)
@@ -68,7 +68,7 @@
 gchar *xa_open_file_dialog ();
 gchar *xa_open_sfx_file_selector ();
 
-void xa_show_cmd_line_output(GtkMenuItem *,gpointer );
+void xa_show_cmd_line_output(GtkMenuItem *,XArchive *);
 void xa_new_archive (GtkMenuItem *, gpointer);
 void xa_save_archive (GtkMenuItem *,gpointer);
 void xa_open_archive (GtkMenuItem *, gpointer);

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

Reply via email to