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