Author: colossus
Date: 2006-08-23 11:38:59 +0000 (Wed, 23 Aug 2006)
New Revision: 22853

Modified:
   xarchiver/trunk/ChangeLog
   xarchiver/trunk/src/add_dialog.c
   xarchiver/trunk/src/add_dialog.h
   xarchiver/trunk/src/bzip2.c
   xarchiver/trunk/src/bzip2.h
   xarchiver/trunk/src/callbacks.c
   xarchiver/trunk/src/gzip.c
   xarchiver/trunk/src/main.c
   xarchiver/trunk/src/rpm.c
   xarchiver/trunk/src/rpm.h
Log:
Alphabetically sorted archive extensions in main.c.
Updated ChangeLog.
Removed ability to compress a single files with bzip2/gzip since it's buggy to 
do it from the GUI.
Modified code to decompress bzip2/gzip files.
Moved some functions from bzip2.c to rpm.c since they are not used because of 
the above modification in bzip2.c


Modified: xarchiver/trunk/ChangeLog
===================================================================
--- xarchiver/trunk/ChangeLog   2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/ChangeLog   2006-08-23 11:38:59 UTC (rev 22853)
@@ -3,11 +3,11 @@
 xx/06/06 - 0.4:
                - Added symbolic link column in tar/tar.bz2/tar.gz and RPM 
archives.
                - Ability to extract files inside RPM archives without the 
directory they are contained in.
-               - View ability works with files inside RPM archives nested in 
more than one directory.
+               - View ability works now with files inside RPM archives nested 
in more than one directory.
                - Increased speed ! Xarchiver is faster than ever when opening 
archives.
                - The GUI looks neat and clean respect to the 0.3.3 release.
                - Added a brand extract and add dialog supporting most of the 
archiver command line options.
-               - Added Drag and Drop from and to Xarchiver window by using the 
XDS protocol.
+               - Added drag and drop from and to Xarchiver window by using the 
XDS protocol.
                - Added the (in)famous cmd-line switches; see xarchiver -? for 
details.
                - Added a Stop button who cancels the current operation or you 
can use the ESC key.
                - Added the ability to test archives.

Modified: xarchiver/trunk/src/add_dialog.c
===================================================================
--- xarchiver/trunk/src/add_dialog.c    2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/add_dialog.c    2006-08-23 11:38:59 UTC (rev 22853)
@@ -40,10 +40,6 @@
        gtk_window_set_transient_for ( GTK_WINDOW (add_dialog->dialog1) , 
GTK_WINDOW (MainWindow) );
        gtk_window_set_resizable (GTK_WINDOW (add_dialog->dialog1), FALSE);
 
-       if (archive->type == XARCHIVETYPE_GZIP || archive->type == 
XARCHIVETYPE_BZIP2)
-               add_dialog->one_file = TRUE;
-       else
-               add_dialog->one_file = FALSE;
        add_dialog->add_option_tooltip = gtk_tooltips_new ();
        add_dialog->dialog_vbox1 = GTK_DIALOG (add_dialog->dialog1)->vbox;
        gtk_widget_show (add_dialog->dialog_vbox1);
@@ -100,23 +96,20 @@
        gtk_widget_show (add_dialog->vbox8);
        gtk_box_pack_start (GTK_BOX (add_dialog->hbox1), add_dialog->vbox8, 
TRUE, FALSE, 0);
 
-       if ( ! add_dialog->one_file)
-       {
-               add_dialog->files_radio = gtk_radio_button_new_with_mnemonic 
(NULL, _("Files"));
-               gtk_widget_show (add_dialog->files_radio);
-               gtk_box_pack_start (GTK_BOX (add_dialog->vbox8), 
add_dialog->files_radio, FALSE, FALSE, 0);
-               gtk_button_set_focus_on_click (GTK_BUTTON 
(add_dialog->files_radio), FALSE);
-               gtk_radio_button_set_group (GTK_RADIO_BUTTON 
(add_dialog->files_radio), add_dialog->file_dir_radio_group);
-               add_dialog->file_dir_radio_group = gtk_radio_button_get_group 
(GTK_RADIO_BUTTON (add_dialog->files_radio));
+       add_dialog->files_radio = gtk_radio_button_new_with_mnemonic (NULL, 
_("Files"));
+       gtk_widget_show (add_dialog->files_radio);
+       gtk_box_pack_start (GTK_BOX (add_dialog->vbox8), 
add_dialog->files_radio, FALSE, FALSE, 0);
+       gtk_button_set_focus_on_click (GTK_BUTTON (add_dialog->files_radio), 
FALSE);
+       gtk_radio_button_set_group (GTK_RADIO_BUTTON (add_dialog->files_radio), 
add_dialog->file_dir_radio_group);
+       add_dialog->file_dir_radio_group = gtk_radio_button_get_group 
(GTK_RADIO_BUTTON (add_dialog->files_radio));
 
-               add_dialog->directories_radio = 
gtk_radio_button_new_with_mnemonic (NULL, _("Directories"));
-               gtk_widget_show (add_dialog->directories_radio);
-               gtk_box_pack_start (GTK_BOX (add_dialog->vbox8), 
add_dialog->directories_radio, FALSE, FALSE, 0);
-               gtk_button_set_focus_on_click (GTK_BUTTON 
(add_dialog->directories_radio), FALSE);
-               gtk_radio_button_set_group (GTK_RADIO_BUTTON 
(add_dialog->directories_radio), add_dialog->file_dir_radio_group);
-               add_dialog->file_dir_radio_group = gtk_radio_button_get_group 
(GTK_RADIO_BUTTON (add_dialog->directories_radio));
-               g_signal_connect (G_OBJECT 
(add_dialog->files_radio),"toggled",G_CALLBACK (toggle_recurse) , add_dialog);
-       }
+       add_dialog->directories_radio = gtk_radio_button_new_with_mnemonic 
(NULL, _("Directories"));
+       gtk_widget_show (add_dialog->directories_radio);
+       gtk_box_pack_start (GTK_BOX (add_dialog->vbox8), 
add_dialog->directories_radio, FALSE, FALSE, 0);
+       gtk_button_set_focus_on_click (GTK_BUTTON 
(add_dialog->directories_radio), FALSE);
+       gtk_radio_button_set_group (GTK_RADIO_BUTTON 
(add_dialog->directories_radio), add_dialog->file_dir_radio_group);
+       add_dialog->file_dir_radio_group = gtk_radio_button_get_group 
(GTK_RADIO_BUTTON (add_dialog->directories_radio));
+       g_signal_connect (G_OBJECT 
(add_dialog->files_radio),"toggled",G_CALLBACK (toggle_recurse) , add_dialog);
 
        add_dialog->hbuttonbox2 = gtk_hbutton_box_new ();
        gtk_widget_show (add_dialog->hbuttonbox2);
@@ -139,157 +132,152 @@
        GTK_WIDGET_SET_FLAGS (add_dialog->add_files_button, GTK_CAN_DEFAULT);
        g_signal_connect ( (gpointer) add_dialog->add_files_button, "clicked", 
G_CALLBACK (xa_select_files_to_add) , add_dialog );
        
-       if ( add_dialog->one_file)
-               add_dialog->label3 = gtk_label_new (_("<b>File to add </b>"));
-       else
-               add_dialog->label3 = gtk_label_new (_("<b>Files and directories 
to add </b>"));
+       add_dialog->label3 = gtk_label_new (_("<b>Files and directories to add 
</b>"));
        gtk_widget_show (add_dialog->label3);
        gtk_frame_set_label_widget (GTK_FRAME (add_dialog->frame5), 
add_dialog->label3);
        gtk_label_set_use_markup (GTK_LABEL (add_dialog->label3), TRUE);
 
-       if ( ! add_dialog->one_file )
-       {
-               add_dialog->frame4 = gtk_frame_new (NULL);
-               gtk_widget_show (add_dialog->frame4);
-               gtk_box_pack_start (GTK_BOX (add_dialog->dialog_vbox1), 
add_dialog->frame4, TRUE, FALSE, 0);
+       add_dialog->frame4 = gtk_frame_new (NULL);
+       gtk_widget_show (add_dialog->frame4);
+       gtk_box_pack_start (GTK_BOX (add_dialog->dialog_vbox1), 
add_dialog->frame4, TRUE, FALSE, 0);
 
-               add_dialog->alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1);
-               gtk_widget_show (add_dialog->alignment4);
-               gtk_container_add (GTK_CONTAINER (add_dialog->frame4), 
add_dialog->alignment4);
-               gtk_alignment_set_padding (GTK_ALIGNMENT 
(add_dialog->alignment4), 0, 0, 12, 0);
+       add_dialog->alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1);
+       gtk_widget_show (add_dialog->alignment4);
+       gtk_container_add (GTK_CONTAINER (add_dialog->frame4), 
add_dialog->alignment4);
+       gtk_alignment_set_padding (GTK_ALIGNMENT (add_dialog->alignment4), 0, 
0, 12, 0);
 
-               add_dialog->vbox6 = gtk_vbox_new (FALSE, 0);
-               gtk_widget_show (add_dialog->vbox6);
-               gtk_container_add (GTK_CONTAINER (add_dialog->alignment4), 
add_dialog->vbox6);
+       add_dialog->vbox6 = gtk_vbox_new (FALSE, 0);
+       gtk_widget_show (add_dialog->vbox6);
+       gtk_container_add (GTK_CONTAINER (add_dialog->alignment4), 
add_dialog->vbox6);
                
-               add_dialog->recurse = gtk_check_button_new_with_mnemonic 
(_("Recurse subdirectories"));
-               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->recurse), archive->add_recurse);
-               if (gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON(add_dialog->files_radio)))
-                       gtk_widget_set_sensitive (add_dialog->recurse, FALSE);
-               gtk_widget_show (add_dialog->recurse);
-               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->recurse, FALSE, FALSE, 0);
-               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->recurse , _("Include everything in the 
directory recursively starting from the current directory."), NULL);
+       add_dialog->recurse = gtk_check_button_new_with_mnemonic (_("Recurse 
subdirectories"));
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (add_dialog->recurse), 
archive->add_recurse);
+       if (gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON(add_dialog->files_radio)))
+               gtk_widget_set_sensitive (add_dialog->recurse, FALSE);
+       gtk_widget_show (add_dialog->recurse);
+       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), add_dialog->recurse, 
FALSE, FALSE, 0);
+       gtk_tooltips_set_tip (add_dialog->option_tooltip,add_dialog->recurse , 
_("Include everything in the directory recursively starting from the current 
directory."), NULL);
                
-               if ( (archive->type == XARCHIVETYPE_RAR) || (archive->type == 
XARCHIVETYPE_7ZIP && archive->nr_of_files == 0 && archive->nr_of_dirs == 0))
-               {
-                       add_dialog->solid_archive = 
gtk_check_button_new_with_mnemonic (_("Generate a solid archive"));
-                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->solid_archive), archive->solid_archive);
-                       gtk_widget_show (add_dialog->solid_archive);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->solid_archive, FALSE, FALSE, 0);
-                       gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->solid_archive , _("In a solid archive 
the files are grouped together featuring a better compression ratio."), NULL);
-               }
+       if ( (archive->type == XARCHIVETYPE_RAR) || (archive->type == 
XARCHIVETYPE_7ZIP && archive->nr_of_files == 0 && archive->nr_of_dirs == 0))
+       {
+               add_dialog->solid_archive = gtk_check_button_new_with_mnemonic 
(_("Generate a solid archive"));
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->solid_archive), archive->solid_archive);
+               gtk_widget_show (add_dialog->solid_archive);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->solid_archive, FALSE, FALSE, 0);
+               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->solid_archive , _("In a solid archive 
the files are grouped together featuring a better compression ratio."), NULL);
+       }
 
-               if (archive->type == XARCHIVETYPE_TAR || archive->type == 
XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type 
== XARCHIVETYPE_RAR || archive->type == XARCHIVETYPE_ARJ || archive->type == 
XARCHIVETYPE_ZIP)
-               {
-                       add_dialog->remove_files = 
gtk_check_button_new_with_mnemonic (_("Remove files after adding"));
-                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->remove_files), archive->remove_files);
-                       gtk_widget_show (add_dialog->remove_files);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->remove_files, FALSE, FALSE, 0);
-               }
+       if (archive->type == XARCHIVETYPE_TAR || archive->type == 
XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type 
== XARCHIVETYPE_RAR || archive->type == XARCHIVETYPE_ARJ || archive->type == 
XARCHIVETYPE_ZIP)
+       {
+               add_dialog->remove_files = gtk_check_button_new_with_mnemonic 
(_("Remove files after adding"));
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->remove_files), archive->remove_files);
+               gtk_widget_show (add_dialog->remove_files);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->remove_files, FALSE, FALSE, 0);
+       }
 
-               if (archive->type != XARCHIVETYPE_7ZIP && archive->type != 
XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != 
XARCHIVETYPE_TAR_BZ2)
-               {
-                       add_dialog->add_full_path = 
gtk_check_button_new_with_mnemonic (_("Do not add file paths"));
-                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->add_full_path), archive->full_path);
-                       gtk_widget_show (add_dialog->add_full_path);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->add_full_path, FALSE, FALSE, 0);
-                       gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->add_full_path , _("Store just the name 
of a file without its directory names."), NULL);
+       if (archive->type != XARCHIVETYPE_7ZIP && archive->type != 
XARCHIVETYPE_TAR && archive->type != XARCHIVETYPE_TAR_GZ && archive->type != 
XARCHIVETYPE_TAR_BZ2)
+       {
+               add_dialog->add_full_path = gtk_check_button_new_with_mnemonic 
(_("Do not add file paths"));
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->add_full_path), archive->full_path);
+               gtk_widget_show (add_dialog->add_full_path);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->add_full_path, FALSE, FALSE, 0);
+               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->add_full_path , _("Store just the name 
of a file without its directory names."), NULL);
 
-                       add_dialog->freshen = 
gtk_check_button_new_with_mnemonic (_("Freshen an existing entry in the 
archive"));
-                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->freshen), archive->freshen);
-                       gtk_widget_show (add_dialog->freshen);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->freshen, FALSE, FALSE, 0);
-                       gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->freshen , _("This option affects the 
archive only if it has been modified more recently than the version already in 
the archive; unlike the update option it will not add files that are not 
already in the archive."), NULL );
-                       g_signal_connect (G_OBJECT 
(add_dialog->freshen),"toggled",G_CALLBACK (add_fresh_update_toggled_cb) , 
add_dialog);
-               }
+               add_dialog->freshen = gtk_check_button_new_with_mnemonic 
(_("Freshen an existing entry in the archive"));
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->freshen), archive->freshen);
+               gtk_widget_show (add_dialog->freshen);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->freshen, FALSE, FALSE, 0);
+               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->freshen , _("This option affects the 
archive only if it has been modified more recently than the version already in 
the archive; unlike the update option it will not add files that are not 
already in the archive."), NULL );
+               g_signal_connect (G_OBJECT 
(add_dialog->freshen),"toggled",G_CALLBACK (add_fresh_update_toggled_cb) , 
add_dialog);
+       }
                
-               add_dialog->update = gtk_check_button_new_with_mnemonic 
(_("Update an existing entry in the archive"));
-               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(add_dialog->update), archive->update);
-               gtk_widget_show (add_dialog->update);
-               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->update, FALSE, FALSE, 0);
-               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->update, _("This option will add any new 
files and update any files which have been modified since the archive was last 
created/modified."), NULL );
+       add_dialog->update = gtk_check_button_new_with_mnemonic (_("Update an 
existing entry in the archive"));
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (add_dialog->update), 
archive->update);
+       gtk_widget_show (add_dialog->update);
+       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), add_dialog->update, 
FALSE, FALSE, 0);
+       gtk_tooltips_set_tip (add_dialog->option_tooltip,add_dialog->update, 
_("This option will add any new files and update any files which have been 
modified since the archive was last created/modified."), NULL );
 
-               if (archive->type != XARCHIVETYPE_7ZIP)
-                       g_signal_connect (G_OBJECT 
(add_dialog->update),"toggled",G_CALLBACK (add_update_fresh_toggled_cb) , 
add_dialog);
+       if (archive->type != XARCHIVETYPE_7ZIP)
+               g_signal_connect (G_OBJECT 
(add_dialog->update),"toggled",G_CALLBACK (add_update_fresh_toggled_cb) , 
add_dialog);
 
-               if (archive->type != XARCHIVETYPE_TAR && archive->type != 
XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_BZ2)
+       if (archive->type != XARCHIVETYPE_TAR && archive->type != 
XARCHIVETYPE_TAR_GZ && archive->type != XARCHIVETYPE_TAR_BZ2)
+       {
+               if (archive->type == XARCHIVETYPE_7ZIP)
                {
-                       if (archive->type == XARCHIVETYPE_7ZIP)
-                       {
-                               compression_msg = _("0 = no compression, 5 is 
default, 9 = best compression but slowest");
-                               default_value = 5;
-                               max_value = 9;
-                       }
+                       compression_msg = _("0 = no compression, 5 is default, 
9 = best compression but slowest");
+                       default_value = 5;
+                       max_value = 9;
+               }
                
-                       else if (archive->type == XARCHIVETYPE_ZIP)
-                       {
-                               compression_msg = _("0 = no compression, 6 is 
default, 9 = best compression but slowest");
-                               default_value = 6;
-                               max_value = 9;
-                       }
+               else if (archive->type == XARCHIVETYPE_ZIP)
+               {
+                       compression_msg = _("0 = no compression, 6 is default, 
9 = best compression but slowest");
+                       default_value = 6;
+                       max_value = 9;
+               }
 
-                       else if (archive->type == XARCHIVETYPE_RAR)
-                       {
-                               compression_msg = _("0 = no compression, 3 is 
default, 5 = best compression but slowest");
-                               default_value = 3;
-                               max_value = 5;
-                       }
+               else if (archive->type == XARCHIVETYPE_RAR)
+               {
+                       compression_msg = _("0 = no compression, 3 is default, 
5 = best compression but slowest");
+                       default_value = 3;
+                       max_value = 5;
+               }
 
-                       else if (archive->type == XARCHIVETYPE_ARJ)
-                       {
-                               compression_msg = _("0 = no compression, 1 is 
default, 4 = fastest but least compression.");
-                               default_value = 1;
-                               max_value = 4;
-                       }
+               else if (archive->type == XARCHIVETYPE_ARJ)
+               {
+                       compression_msg = _("0 = no compression, 1 is default, 
4 = fastest but least compression.");
+                       default_value = 1;
+                       max_value = 4;
+               }
 
-                       add_dialog->hbox3 = gtk_hbox_new (FALSE, 0);
-                       gtk_widget_show (add_dialog->hbox3);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->hbox3, TRUE, TRUE, 0);
+               add_dialog->hbox3 = gtk_hbox_new (FALSE, 0);
+               gtk_widget_show (add_dialog->hbox3);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->hbox3, TRUE, TRUE, 0);
 
-                       add_dialog->add_password = 
gtk_check_button_new_with_mnemonic (_("Password:"));
-                       gtk_widget_show (add_dialog->add_password);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->hbox3), 
add_dialog->add_password, FALSE, FALSE, 0);
-                       g_signal_connect (G_OBJECT (add_dialog->add_password), 
"toggled",G_CALLBACK (password_toggled_cb) , add_dialog);
+               add_dialog->add_password = gtk_check_button_new_with_mnemonic 
(_("Password:"));
+               gtk_widget_show (add_dialog->add_password);
+               gtk_box_pack_start (GTK_BOX (add_dialog->hbox3), 
add_dialog->add_password, FALSE, FALSE, 0);
+               g_signal_connect (G_OBJECT (add_dialog->add_password), 
"toggled",G_CALLBACK (password_toggled_cb) , add_dialog);
 
-                       add_dialog->add_password_entry = gtk_entry_new ();
-                       gtk_widget_show (add_dialog->add_password_entry);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->hbox3), 
add_dialog->add_password_entry, FALSE, FALSE, 0);
-                       gtk_entry_set_visibility (GTK_ENTRY 
(add_dialog->add_password_entry), FALSE);
-                       gtk_widget_set_sensitive 
(add_dialog->add_password_entry, FALSE);
+               add_dialog->add_password_entry = gtk_entry_new ();
+               gtk_widget_show (add_dialog->add_password_entry);
+               gtk_box_pack_start (GTK_BOX (add_dialog->hbox3), 
add_dialog->add_password_entry, FALSE, FALSE, 0);
+               gtk_entry_set_visibility (GTK_ENTRY 
(add_dialog->add_password_entry), FALSE);
+               gtk_widget_set_sensitive (add_dialog->add_password_entry, 
FALSE);
                        
-                       add_dialog->hbox2 = gtk_hbox_new (FALSE, 6);
-                       gtk_widget_show (add_dialog->hbox2);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->hbox2, TRUE, TRUE, 0);
-                       add_dialog->label4 = gtk_label_new (_("Compression 
level:"));
-                       gtk_widget_show (add_dialog->label4);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->hbox2), 
add_dialog->label4, FALSE, FALSE, 0);
+               add_dialog->hbox2 = gtk_hbox_new (FALSE, 6);
+               gtk_widget_show (add_dialog->hbox2);
+               gtk_box_pack_start (GTK_BOX (add_dialog->vbox6), 
add_dialog->hbox2, TRUE, TRUE, 0);
+               add_dialog->label4 = gtk_label_new (_("Compression level:"));
+               gtk_widget_show (add_dialog->label4);
+               gtk_box_pack_start (GTK_BOX (add_dialog->hbox2), 
add_dialog->label4, FALSE, FALSE, 0);
        
-                       if (archive->type == XARCHIVETYPE_7ZIP)
-                               add_dialog->compression_value = 
gtk_adjustment_new (default_value, 0, max_value, 2, 2, 0);
-                       else
-                               add_dialog->compression_value = 
gtk_adjustment_new (default_value, 0, max_value, 0, 0, 0);
+               if (archive->type == XARCHIVETYPE_7ZIP)
+                       add_dialog->compression_value = gtk_adjustment_new 
(default_value, 0, max_value, 2, 2, 0);
+               else
+                       add_dialog->compression_value = gtk_adjustment_new 
(default_value, 0, max_value, 0, 0, 0);
 
-                       add_dialog->compression_scale = gtk_hscale_new ( 
GTK_ADJUSTMENT (add_dialog->compression_value) );
-                       gtk_widget_show (add_dialog->compression_scale);
-                       gtk_box_pack_start (GTK_BOX (add_dialog->hbox2), 
add_dialog->compression_scale, TRUE, TRUE, 0);
-                       gtk_scale_set_value_pos (GTK_SCALE 
(add_dialog->compression_scale), GTK_POS_LEFT);
-                       gtk_scale_set_digits (GTK_SCALE 
(add_dialog->compression_scale), 0);
-                       if (archive->compression_level == 0)
-                               archive->compression_level = default_value;
-                       gtk_adjustment_set_value 
(GTK_ADJUSTMENT(add_dialog->compression_value), archive->compression_level);
+               add_dialog->compression_scale = gtk_hscale_new ( GTK_ADJUSTMENT 
(add_dialog->compression_value) );
+               gtk_widget_show (add_dialog->compression_scale);
+               gtk_box_pack_start (GTK_BOX (add_dialog->hbox2), 
add_dialog->compression_scale, TRUE, TRUE, 0);
+               gtk_scale_set_value_pos (GTK_SCALE 
(add_dialog->compression_scale), GTK_POS_LEFT);
+               gtk_scale_set_digits (GTK_SCALE 
(add_dialog->compression_scale), 0);
+               if (archive->compression_level == 0)
+                       archive->compression_level = default_value;
+               gtk_adjustment_set_value 
(GTK_ADJUSTMENT(add_dialog->compression_value), archive->compression_level);
 
-                       if (archive->type == XARCHIVETYPE_ARJ)
-                               gtk_range_set_inverted (GTK_RANGE 
(add_dialog->compression_scale), TRUE);
-                       else if (archive->type == XARCHIVETYPE_7ZIP)
-                               g_signal_connect (G_OBJECT 
(add_dialog->compression_value),"value-changed",G_CALLBACK 
(fix_adjustment_value), NULL);
-                       gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->compression_scale, compression_msg, 
NULL );
-               }
-
-               add_dialog->label2 = gtk_label_new (_("<b>Options </b>"));
-               gtk_widget_show (add_dialog->label2);
-               gtk_frame_set_label_widget (GTK_FRAME (add_dialog->frame4), 
add_dialog->label2);
-               gtk_label_set_use_markup (GTK_LABEL (add_dialog->label2), TRUE);
+               if (archive->type == XARCHIVETYPE_ARJ)
+                       gtk_range_set_inverted (GTK_RANGE 
(add_dialog->compression_scale), TRUE);
+               else if (archive->type == XARCHIVETYPE_7ZIP)
+                       g_signal_connect (G_OBJECT 
(add_dialog->compression_value),"value-changed",G_CALLBACK 
(fix_adjustment_value), NULL);
+               gtk_tooltips_set_tip 
(add_dialog->option_tooltip,add_dialog->compression_scale, compression_msg, 
NULL );
        }
+
+       add_dialog->label2 = gtk_label_new (_("<b>Options </b>"));
+       gtk_widget_show (add_dialog->label2);
+       gtk_frame_set_label_widget (GTK_FRAME (add_dialog->frame4), 
add_dialog->label2);
+       gtk_label_set_use_markup (GTK_LABEL (add_dialog->label2), TRUE);
+       
        add_dialog->dialog_action_area2 = GTK_DIALOG 
(add_dialog->dialog1)->action_area;
        gtk_widget_show (add_dialog->dialog_action_area2);
        gtk_button_box_set_layout (GTK_BUTTON_BOX 
(add_dialog->dialog_action_area2), GTK_BUTTONBOX_END);
@@ -367,25 +355,16 @@
        GSList *dummy = NULL;
        unsigned short int flag;
 
-       if (add_dialog->one_file == FALSE)
+       if ( gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON(add_dialog->files_radio)) )
        {
-               if ( gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON(add_dialog->files_radio)) )
-               {
-                       title = _("Please select the files you want to add");
-                       flag = GTK_FILE_CHOOSER_ACTION_OPEN;
-               }
-               else
-               {
-                       title = _("Please select the directories you want to 
add");
-                       flag = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
-               }
+               title = _("Please select the files you want to add");
+               flag = GTK_FILE_CHOOSER_ACTION_OPEN;
        }
        else
        {
-               title = _("Please select the file you want to add");
-               flag = GTK_FILE_CHOOSER_ACTION_OPEN;
+               title = _("Please select the directories you want to add");
+               flag = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
        }
-
        
        File_Selector = gtk_file_chooser_dialog_new ( title,
                                                        GTK_WINDOW (MainWindow),
@@ -395,8 +374,7 @@
                                                        GTK_STOCK_OPEN,
                                                        GTK_RESPONSE_ACCEPT,
                                                        NULL);
-       if (add_dialog->one_file == FALSE)
-               gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER 
(File_Selector) , TRUE );
+       gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER (File_Selector) 
, TRUE );
        response = gtk_dialog_run (GTK_DIALOG (File_Selector));
        if (response == GTK_RESPONSE_ACCEPT)
        {
@@ -571,21 +549,10 @@
        if (tar == NULL)
                tar = g_strdup ("tar");
        
-       if (archive->type != XARCHIVETYPE_BZIP2 && archive->type != 
XARCHIVETYPE_GZIP)
-               Update_StatusBar ( _("Adding files to the archive, please 
wait..."));
+       Update_StatusBar ( _("Adding files to the archive, please wait..."));
        
        switch (archive->type)
        {
-               case XARCHIVETYPE_BZIP2:
-               Update_StatusBar ( _("Compressing file with bzip2, please 
wait..."));
-               Bzip2Add ( names->str , archive , 0 );
-               break;
-
-               case XARCHIVETYPE_GZIP:
-               Update_StatusBar ( _("Compressing file with gzip, please 
wait..."));
-               Bzip2Add ( names->str , archive , 1 );
-               break;
-                       
                case XARCHIVETYPE_RAR:
                if (compression_string == NULL)
                        compression_string = "3";

Modified: xarchiver/trunk/src/add_dialog.h
===================================================================
--- xarchiver/trunk/src/add_dialog.h    2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/add_dialog.h    2006-08-23 11:38:59 UTC (rev 22853)
@@ -36,7 +36,6 @@
        GtkWidget *frame4;
        GtkWidget *remove_button;
        GtkWidget *add_files_button;
-       gboolean one_file;
        GtkWidget *label2;
        GtkWidget *label3;
        GtkWidget *label4;

Modified: xarchiver/trunk/src/bzip2.c
===================================================================
--- xarchiver/trunk/src/bzip2.c 2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/bzip2.c 2006-08-23 11:38:59 UTC (rev 22853)
@@ -25,11 +25,7 @@
 extern int output_fd;
 extern gboolean cli;
 
-FILE *stream = NULL;
-gchar *tmp = NULL;
-int fd;
 short int l;
-gboolean error_output,result;
 
 void OpenBzip2 ( XArchive *archive )
 {
@@ -64,15 +60,19 @@
     }
     else
        {
-               Bzip2Extract ( archive , 0 );
+               gzip_bzip2_extract ( archive , 0 );
                archive->format ="BZIP2";
        }
 }
 
-void Bzip2Extract ( XArchive *archive , gboolean flag )
+void gzip_bzip2_extract ( XArchive *archive , gboolean flag )
 {
-    gchar *text;
+    gchar *text = NULL;
+       gchar *filename_only = NULL;
        gchar *command = NULL;
+       gboolean result = FALSE;
+       gboolean ext;
+       
        extract_window = xa_create_extract_dialog ( 0 , archive);
        gtk_dialog_set_default_response (GTK_DIALOG (extract_window->dialog1), 
GTK_RESPONSE_OK);
        done = FALSE;
@@ -90,32 +90,62 @@
                        if ( strlen ( archive->extraction_path ) > 0 )
                        {
                                done = TRUE;
-                               archive->parse_output = 0;
-                               command = g_strconcat ( flag ? "gzip -dc " : 
"bzip2 -dc " , archive->escaped_path , NULL );
-                               SpawnAsyncProcess ( archive , command , 0, 0);
-                               if ( archive->child_pid == 0 )
+
+                               if (! cli)
                                {
-                                       g_free ( command );
-                                       return;
+                                       if (flag)
+                                               text = 
g_strdup_printf(_("Extracting gzip file to %s"), archive->extraction_path);
+                                       else
+                                               text = 
g_strdup_printf(_("Extracting bzip2 file to %s"), archive->extraction_path);
+                                       Update_StatusBar ( text );
+                                       g_free (text);
                                }
-                               if (flag)
-                                       text = g_strdup_printf(_("Extracting 
gzip file to %s"), archive->extraction_path);
+
+                               filename_only = StripPathFromFilename 
(archive->escaped_path , "/");
+                               if (file_extension_is (filename_only,".gz") || 
file_extension_is (filename_only,".bz2") )
+                                       ext = TRUE;
                                else
-                                       text = g_strdup_printf(_("Extracting 
bzip2 file to %s"), archive->extraction_path);
-                               Update_StatusBar ( text );
-                               g_free (text);
+                                       ext = FALSE;
+                                       
+                               if (ext)
+                                       command = g_strconcat ("cp -f ", 
archive->escaped_path, " /tmp", NULL);
+                               else
+                                       command = g_strconcat ("cp -f ", 
archive->escaped_path, " /tmp" , filename_only, flag ? ".gz" : ".bz2", NULL);
 
-                               stream = fopen ( archive->extraction_path , "w" 
);
-                               if ( stream == NULL )
+                               result = xa_run_command (command , 0);
+                               g_free (command);
+                               if (result == 0)
+                                       break;
+                               if ( ext  )
+                                       command = g_strconcat (flag ? "gzip -f 
-d -n " : "bzip2 -f -d ", "/tmp",filename_only, NULL);
+                               else
+                                       command = g_strconcat (flag ? "gzip -f 
-d -n " : "bzip2 -f -d ","/tmp",filename_only, flag ? ".gz" : ".bz2", NULL);
+
+                               result = xa_run_command (command , 0);
+                               g_free (command);
+                               if (result == 0)
+                                       break;
+
+                               if (ext)
                                {
-                                       response = ShowGtkMessageDialog 
(GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't write 
file:"),g_strerror(errno));
-                    done = FALSE;
-                    break;                                     
+                                       if (flag)
+                                               
filename_only[strlen(filename_only) - 3] = '\0';
+                                       else
+                                               
filename_only[strlen(filename_only) - 4] = '\0';
+                                       command = g_strconcat ("mv -f 
/tmp",filename_only, " ", archive->extraction_path,NULL);
                                }
-                               GIOChannel *ioc = g_io_channel_unix_new ( 
output_fd );
-                               g_io_channel_set_encoding (ioc, NULL , NULL);
-                               g_io_channel_set_flags ( ioc , 
G_IO_FLAG_NONBLOCK , NULL );
-                               g_io_add_watch (ioc, 
G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, ExtractToDifferentLocation, 
stream);
+                               else
+                               {
+                                       if ( g_file_test 
(archive->extraction_path, G_FILE_TEST_IS_DIR) )
+                                               command = g_strconcat ("mv -f 
/tmp",filename_only, " ", archive->extraction_path,filename_only,NULL);
+                                       else
+                                               command = g_strconcat ("mv -f 
/tmp",filename_only, " ", archive->extraction_path,NULL);
+                               }
+
+                               result = xa_run_command (command , 0);
+                               g_free (command);
+                               if (result == 0)
+                                       break;
                        }
                        else
                                response = ShowGtkMessageDialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("You missed 
the extraction path!"),("Please type it.") );
@@ -125,57 +155,24 @@
        gtk_widget_destroy ( extract_window->dialog1 );
        g_free (extract_window);
        extract_window = NULL;
-       xa_set_button_state (1,1,0,0,0);
-       if (command != NULL)
+
+       if (result == 0)
        {
-               g_free ( command );
-               g_child_watch_add ( archive->child_pid, 
(GChildWatchFunc)xa_watch_child, archive);    
-       }
-       else
-       {
+               xa_set_button_state (1,1,0,0,0);
                archive->status = XA_ARCHIVESTATUS_IDLE;
                gtk_widget_set_sensitive (Stop_button, FALSE);
                gtk_widget_hide ( viewport2 );
                Update_StatusBar ( _("Operation canceled."));
        }
-}
-
-gchar *OpenTempFile ( gboolean dummy , gchar *temp_path )
-{
-       gchar *command = NULL;
-       tmp = g_strdup ("/tmp/xarchiver-XXXXXX");
-       fd = g_mkstemp ( tmp );
-       stream = fdopen ( fd , "w" );
-       if ( stream == NULL)
-       {
-               response = ShowGtkMessageDialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't write 
to /tmp:"),g_strerror(errno) );
-               g_free (tmp);
-               return NULL;
-       }
-       if ( temp_path == NULL)
-               command = g_strconcat ( dummy ? "gzip -dc " : "bzip2 -dc " , 
archive->escaped_path , NULL );
        else
-               command = g_strconcat ( dummy ? "gzip -dc " : "bzip2 -dc " , 
temp_path , NULL );
-       archive->parse_output = 0;
-       SpawnAsyncProcess ( archive , command , 0, 0);
-       g_free ( command );
-       if ( archive->child_pid == 0 )
-       {
-               fclose ( stream );
-               unlink ( tmp );
-               g_free (tmp);
-               return NULL;
-       }
-       GIOChannel *ioc = g_io_channel_unix_new ( output_fd );
-       g_io_channel_set_encoding (ioc, NULL , NULL);
-       g_io_channel_set_flags ( ioc , G_IO_FLAG_NONBLOCK , NULL );
-       g_io_add_watch (ioc, G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, 
ExtractToDifferentLocation, stream);
-       return tmp;
+               xa_watch_child (archive->child_pid, 0, archive);
 }
 
 void xa_add_delete_tar_bzip2_gzip ( GString *list , XArchive *archive , 
gboolean dummy , gboolean add )
 {
        gchar *command, *msg, *tar,*temp_name,*temp_name2;
+       gboolean result;
+
        if ( ! cli )
        {
                gtk_widget_show (viewport2);
@@ -287,77 +284,3 @@
                return;
 }
 
-void Bzip2Add ( gchar *filename , XArchive *archive , gboolean flag )
-{
-       gchar *command = NULL;
-       gtk_widget_show ( viewport2 );
-       command = g_strconcat ( flag ? "gzip -f " : "bzip2 -zk " , filename , 
NULL );
-       if ( ! cli)
-       {
-               result = xa_run_command (command , 0);
-               g_free (command);
-               if ( result == 0 )
-                       return;
-       }
-       else
-       {
-               error_output = SpawnSyncCommand ( command );
-               g_free (command);
-               if (error_output == FALSE)
-                       return;
-       }
-
-       command = g_strconcat ( "mv -f " , filename , flag ? ".gz" : ".bz2 ", " 
" , archive->escaped_path , NULL );
-       if (! cli)
-       {
-               result = xa_run_command (command , 1);
-               g_free (command);
-       }
-       else
-       {
-               error_output = SpawnSyncCommand ( command );
-               g_free (command);
-       }
-}
-
-gboolean ExtractToDifferentLocation (GIOChannel *ioc, GIOCondition cond, 
gpointer data)
-{
-       FILE *stream = data;
-       gchar buffer[65536];
-       gsize bytes_read;
-       GIOStatus status;
-       GError *error = NULL;
-
-       if (cond & (G_IO_IN | G_IO_PRI) )
-       {
-               do
-           {
-                       status = g_io_channel_read_chars (ioc, buffer, 
sizeof(buffer), &bytes_read, &error);
-                       if (bytes_read > 0)
-                       {
-                               /* Write the content of the bzip/gzip extracted 
file to the file pointed by the file stream */
-                               fwrite (buffer, 1, bytes_read, stream);
-                       }
-                       else if (error != NULL)
-                       {
-                       response = ShowGtkMessageDialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("An error 
occurred:"),error->message);
-                       g_error_free (error);
-                       return FALSE;
-                       }
-               }
-               while (status == G_IO_STATUS_NORMAL);
-
-               if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF)
-               goto done;
-       }
-       else if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )
-       {
-               done:
-               fclose ( stream );
-               g_io_channel_shutdown ( ioc,TRUE,NULL );
-               g_io_channel_unref (ioc);
-               return FALSE;
-       }
-       return TRUE;
-}
-

Modified: xarchiver/trunk/src/bzip2.h
===================================================================
--- xarchiver/trunk/src/bzip2.h 2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/bzip2.h 2006-08-23 11:38:59 UTC (rev 22853)
@@ -27,11 +27,8 @@
 #include "archive.h"
 
 void OpenBzip2 ( XArchive *archive );
-void Bzip2Extract ( XArchive *archive , gboolean flag );
-gboolean ExtractToDifferentLocation (GIOChannel *ioc, GIOCondition cond , 
gpointer data);
+void gzip_bzip2_extract ( XArchive *archive , gboolean flag );
 void xa_add_delete_tar_bzip2_gzip ( GString *list , XArchive *archive , 
gboolean dummy , gboolean add );
 GChildWatchFunc *AddToTar (GPid pid,gint status , gpointer data);
-void Bzip2Add ( gchar *filename , XArchive *archive , gboolean flag );
-gchar *OpenTempFile ( gboolean dummy , gchar *temp_path );
 gboolean file_extension_is (const char *filename, const char *ext);
 #endif

Modified: xarchiver/trunk/src/callbacks.c
===================================================================
--- xarchiver/trunk/src/callbacks.c     2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/callbacks.c     2006-08-23 11:38:59 UTC (rev 22853)
@@ -78,10 +78,12 @@
        else if (archive->type == XARCHIVETYPE_TAR_BZ2 || archive->type == 
XARCHIVETYPE_TAR_GZ || archive->type == XARCHIVETYPE_TAR )
         gtk_widget_set_sensitive ( check_menu , FALSE);
        else
-        gtk_widget_set_sensitive ( check_menu , TRUE);
+       {
+               gtk_widget_set_sensitive ( check_menu , TRUE);
+               xa_set_button_state (1,1,1,1,1);
+       }
+       
 
-       xa_set_button_state (1,1,1,1,1);
-
        if ( WIFSIGNALED (status) )
        {
                Update_StatusBar ( _("Operation canceled."));
@@ -227,7 +229,7 @@
     gtk_widget_set_sensitive ( view_shell_output1 , TRUE );
     gtk_widget_set_sensitive ( check_menu , FALSE);
     gtk_widget_set_sensitive ( properties , FALSE );
-    /* Let's off the delete and view buttons and the menu entries to avoid 
misterious behaviour */
+    /* Let's off the delete and view buttons and the menu entries to avoid 
strange behaviours */
     OffDeleteandViewButtons ();
 
        if ( liststore != NULL )
@@ -736,7 +738,7 @@
                Name = g_list_first ( ArchiveType );
                while ( Name != NULL )
                {
-                       if (Name->data != ".tgz" && Name->data != ".rpm" && 
Name->data != ".iso"  )
+                       if (Name->data != ".tgz" && Name->data != ".rpm" && 
Name->data != ".iso" && Name->data != ".gz" && Name->data != ".bz2" )
                                gtk_combo_box_append_text (GTK_COMBO_BOX 
(combo_box), Name->data );
                        Name = g_list_next ( Name );
                }
@@ -762,8 +764,6 @@
                        ComboArchiveType = gtk_combo_box_get_active_text 
(GTK_COMBO_BOX (combo_box));
                        current_archive_suffix = gtk_combo_box_get_active 
(GTK_COMBO_BOX (combo_box));
             if (strcmp ( ComboArchiveType,".arj") == 0) archive->type = 
XARCHIVETYPE_ARJ;
-                else if (strcmp ( ComboArchiveType,".bz2") == 0) archive->type 
= XARCHIVETYPE_BZIP2;
-                else if (strcmp ( ComboArchiveType,".gz") == 0) archive->type 
= XARCHIVETYPE_GZIP;
                 else if (strcmp ( ComboArchiveType,".rar") == 0) archive->type 
= XARCHIVETYPE_RAR;
                 else if (strcmp ( ComboArchiveType,".tar") == 0) archive->type 
= XARCHIVETYPE_TAR;
                 else if (strcmp ( ComboArchiveType,".tar.bz2") == 0) 
archive->type = XARCHIVETYPE_TAR_BZ2;

Modified: xarchiver/trunk/src/gzip.c
===================================================================
--- xarchiver/trunk/src/gzip.c  2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/gzip.c  2006-08-23 11:38:59 UTC (rev 22853)
@@ -58,7 +58,7 @@
        else
        {
                archive->format ="GZIP";
-               Bzip2Extract ( archive , 1 );
+               gzip_bzip2_extract ( archive , 1 );
        }
 }
 

Modified: xarchiver/trunk/src/main.c
===================================================================
--- xarchiver/trunk/src/main.c  2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/main.c  2006-08-23 11:38:59 UTC (rev 22853)
@@ -273,14 +273,6 @@
                g_free (absolute_path);
        }
 
-       absolute_path = g_find_program_in_path("rar");
-    if ( absolute_path )
-       {
-               ArchiveType = g_list_prepend ( ArchiveType, ".rar");
-               ArchiveSuffix = g_list_prepend ( ArchiveSuffix, "*.rar");
-               g_free (absolute_path);
-       }
-
        absolute_path = g_find_program_in_path("cpio");
     if ( absolute_path )
        {
@@ -307,13 +299,13 @@
                }
        }
 
-       absolute_path = g_find_program_in_path("7za");
+       absolute_path = g_find_program_in_path("rar");
     if ( absolute_path )
-    {
-        ArchiveType = g_list_prepend ( ArchiveType, ".7z");
-           ArchiveSuffix = g_list_prepend ( ArchiveSuffix, "*.7z");
+       {
+               ArchiveType = g_list_prepend ( ArchiveType, ".rar");
+               ArchiveSuffix = g_list_prepend ( ArchiveSuffix, "*.rar");
                g_free (absolute_path);
-    }
+       }
 
        absolute_path = g_find_program_in_path("zip");
     if ( absolute_path )
@@ -325,6 +317,14 @@
                ArchiveType = g_list_prepend ( ArchiveType, ".zip");
                ArchiveSuffix = g_list_prepend ( ArchiveSuffix, "*.zip");
        }
+
+       absolute_path = g_find_program_in_path("7za");
+    if ( absolute_path )
+    {
+        ArchiveType = g_list_prepend ( ArchiveType, ".7z");
+           ArchiveSuffix = g_list_prepend ( ArchiveSuffix, "*.7z");
+               g_free (absolute_path);
+    }
 }
 
 void xa_set_button_state (gboolean New, gboolean Open,gboolean 
AddFile,gboolean Extract, gboolean select)

Modified: xarchiver/trunk/src/rpm.c
===================================================================
--- xarchiver/trunk/src/rpm.c   2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/rpm.c   2006-08-23 11:38:59 UTC (rev 22853)
@@ -24,6 +24,7 @@
 FILE *stream;
 int fd;
 gchar *cpio_tmp = NULL;
+gchar *tmp = NULL;
 gchar buffer[2048];
 gsize bytes_read = 0;
 gsize bytes_written = 0;
@@ -359,3 +360,78 @@
     g_io_channel_shutdown ( ioc,TRUE,NULL );
     g_io_channel_unref (ioc);
 }
+
+gchar *OpenTempFile ( gboolean dummy , gchar *temp_path )
+{
+       gchar *command = NULL;
+       tmp = g_strdup ("/tmp/xarchiver-XXXXXX");
+       fd = g_mkstemp ( tmp );
+       stream = fdopen ( fd , "w" );
+       if ( stream == NULL)
+       {
+               response = ShowGtkMessageDialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't write 
to /tmp:"),g_strerror(errno) );
+               g_free (tmp);
+               return NULL;
+       }
+       if ( temp_path == NULL)
+               command = g_strconcat ( dummy ? "gzip -dc " : "bzip2 -dc " , 
archive->escaped_path , NULL );
+       else
+               command = g_strconcat ( dummy ? "gzip -dc " : "bzip2 -dc " , 
temp_path , NULL );
+       archive->parse_output = 0;
+       SpawnAsyncProcess ( archive , command , 0, 0);
+       g_free ( command );
+       if ( archive->child_pid == 0 )
+       {
+               fclose ( stream );
+               unlink ( tmp );
+               g_free (tmp);
+               return NULL;
+       }
+       GIOChannel *ioc = g_io_channel_unix_new ( output_fd );
+       g_io_channel_set_encoding (ioc, NULL , NULL);
+       g_io_channel_set_flags ( ioc , G_IO_FLAG_NONBLOCK , NULL );
+       g_io_add_watch (ioc, G_IO_IN|G_IO_PRI|G_IO_ERR|G_IO_HUP|G_IO_NVAL, 
ExtractToDifferentLocation, stream);
+       return tmp;
+}
+
+gboolean ExtractToDifferentLocation (GIOChannel *ioc, GIOCondition cond, 
gpointer data)
+{
+       FILE *stream = data;
+       gchar buffer[65536];
+       gsize bytes_read;
+       GIOStatus status;
+       GError *error = NULL;
+
+       if (cond & (G_IO_IN | G_IO_PRI) )
+       {
+               do
+           {
+                       status = g_io_channel_read_chars (ioc, buffer, 
sizeof(buffer), &bytes_read, &error);
+                       if (bytes_read > 0)
+                       {
+                               /* Write the content of the bzip/gzip extracted 
file to the file pointed by the file stream */
+                               fwrite (buffer, 1, bytes_read, stream);
+                       }
+                       else if (error != NULL)
+                       {
+                       response = ShowGtkMessageDialog (GTK_WINDOW 
(MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK, _("An error 
occurred:"),error->message);
+                       g_error_free (error);
+                       return FALSE;
+                       }
+               }
+               while (status == G_IO_STATUS_NORMAL);
+
+               if (status == G_IO_STATUS_ERROR || status == G_IO_STATUS_EOF)
+               goto done;
+       }
+       else if (cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )
+       {
+               done:
+               fclose ( stream );
+               g_io_channel_shutdown ( ioc,TRUE,NULL );
+               g_io_channel_unref (ioc);
+               return FALSE;
+       }
+       return TRUE;
+}
+

Modified: xarchiver/trunk/src/rpm.h
===================================================================
--- xarchiver/trunk/src/rpm.h   2006-08-22 09:48:45 UTC (rev 22852)
+++ xarchiver/trunk/src/rpm.h   2006-08-23 11:38:59 UTC (rev 22853)
@@ -31,5 +31,7 @@
 gboolean ReadCPIOOutput (GIOChannel *ioc, GIOCondition cond, gpointer data);
 gboolean WriteCPIOInput (GIOChannel *ioc, GIOCondition cond, gpointer data);
 void CloseChannels ( GIOChannel *ioc );
+gboolean ExtractToDifferentLocation (GIOChannel *ioc, GIOCondition cond , 
gpointer data);
+gchar *OpenTempFile ( gboolean dummy , gchar *temp_path );
 
 #endif

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to