Author: colossus Date: 2006-11-07 13:52:10 +0000 (Tue, 07 Nov 2006) New Revision: 23770
Modified: xarchiver/trunk/src/archive.c xarchiver/trunk/src/archive.h xarchiver/trunk/src/callbacks.c xarchiver/trunk/src/callbacks.h xarchiver/trunk/src/interface.c xarchiver/trunk/src/interface.h xarchiver/trunk/src/main.c Log: Fixed seg fault when closing tabs. Modified: xarchiver/trunk/src/archive.c =================================================================== --- xarchiver/trunk/src/archive.c 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/archive.c 2006-11-07 13:52:10 UTC (rev 23770) @@ -196,6 +196,5 @@ g_free (effective_date); effective_date = NULL; } - g_free (archive); } Modified: xarchiver/trunk/src/archive.h =================================================================== --- xarchiver/trunk/src/archive.h 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/archive.h 2006-11-07 13:52:10 UTC (rev 23770) @@ -77,7 +77,6 @@ gboolean remove_files; unsigned short int compression_level; gint nr_of_files; - gint tab_id; gint nr_of_dirs; GPid child_pid; guint pb_source; Modified: xarchiver/trunk/src/callbacks.c =================================================================== --- xarchiver/trunk/src/callbacks.c 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/callbacks.c 2006-11-07 13:52:10 UTC (rev 23770) @@ -37,7 +37,6 @@ gchar *current_open_directory = NULL; GtkFileFilter *open_file_filter = NULL; GList *Suffix , *Name; -gint page_id = 0; #ifndef HAVE_STRCASESTR /* @@ -150,7 +149,7 @@ gtk_widget_set_sensitive ( check_menu , check); gtk_widget_set_sensitive ( properties , info); xa_hide_progress_bar_stop_button(archive); - xa_set_button_state (new,open,0,0,0,0); + xa_set_button_state (1,1,0,0,0,0); Update_StatusBar ( _("Operation failed.")); response = ShowGtkMessageDialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("An error occurred while accessing the archive."),_("Do you want to view the command line output?") ); if (response == GTK_RESPONSE_YES) @@ -267,14 +266,18 @@ if (user_data != NULL) path = g_path_get_basename ( user_data); - archive[page_id] = xa_new_archive_dialog ( path ); + current_page = xa_get_new_archive_idx(); + if (current_page == -1) + return; + + archive[current_page] = xa_new_archive_dialog ( path ); if (path != NULL) g_free (path); - if (archive[page_id] == NULL) + if (archive[current_page] == NULL) return; - xa_add_page (archive[page_id]); + xa_add_page (archive[current_page]); xa_set_button_state (1,1,1,0,0,0 ); EmptyTextBuffer(); @@ -320,11 +323,9 @@ return; } - current_page = gtk_notebook_get_current_page ( notebook); + current_page = xa_get_new_archive_idx(); if (current_page == -1) - current_page = 0; - else - current_page++; + return; archive[current_page] = xa_init_archive_structure(); if (archive[current_page] == NULL) @@ -346,7 +347,11 @@ archive[current_page]->type = xa_detect_archive_type ( archive[current_page] , NULL ); if ( archive[current_page]->type == -2 ) + { + xa_close_archive ( NULL, NULL); + xa_set_button_state (1,1,0,0,0,0); return; + } if ( archive[current_page]->type == -1 ) { gchar *utf8_path,*msg; @@ -532,12 +537,7 @@ gtk_notebook_set_show_tabs (notebook,TRUE); EmptyTextBuffer(); - gtk_widget_set_sensitive (properties,FALSE); - gtk_widget_set_sensitive (check_menu,FALSE); - xa_set_button_state (1,1,0,0,0,0); - xa_clean_archive_structure (archive[idx]); - archive[idx] = NULL; gtk_widget_hide ( viewport3 ); Update_StatusBar (_("Ready.")); @@ -545,7 +545,6 @@ void xa_quit_application (GtkMenuItem *menuitem, gpointer user_data) { - gint n_pages; gint i; gint idx; @@ -557,7 +556,7 @@ g_list_free ( Suffix ); g_list_free ( Name ); - for (i = 0; i <= gtk_notebook_get_n_pages(notebook) ; i++) + for (i = 0; i < gtk_notebook_get_n_pages(notebook) ; i++) { idx = xa_find_archive_index ( i ); if (archive[idx] != NULL) @@ -1827,22 +1826,25 @@ gtk_widget_show_all ( archive_properties_win ); } -void Activate_buttons () +void xa_activate_delete_and_view () { gint current_page; + gint idx; + g_print ("Son qui"); current_page = gtk_notebook_get_current_page (notebook); + idx = xa_find_archive_index (current_page); if ( ! GTK_WIDGET_VISIBLE (Extract_button) ) return; - GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (archive[current_page]->treeview) ); + GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (archive[idx]->treeview) ); gint selected = gtk_tree_selection_count_selected_rows ( selection ); if (selected == 0 ) OffDeleteandViewButtons(); else { - if ( archive[current_page]->type != XARCHIVETYPE_RPM && archive[current_page]->type != XARCHIVETYPE_ISO && archive[current_page]->type != XARCHIVETYPE_DEB) + if ( archive[idx]->type != XARCHIVETYPE_RPM && archive[idx]->type != XARCHIVETYPE_ISO && archive[idx]->type != XARCHIVETYPE_DEB) { gtk_widget_set_sensitive ( delete_menu , TRUE ); gtk_widget_set_sensitive ( Delete_button , TRUE ); @@ -1936,22 +1938,25 @@ gboolean xa_run_command ( gchar *command , gboolean watch_child_flag ) { gint current_page; + gint idx; int status; gboolean waiting = TRUE; int ps; current_page = gtk_notebook_get_current_page (notebook); + idx = xa_find_archive_index ( current_page ); + if (watch_child_flag) EmptyTextBuffer(); - archive[current_page]->parse_output = 0; - SpawnAsyncProcess ( archive[current_page] , command , 0, 1); - if ( archive[current_page]->child_pid == 0 ) + archive[idx]->parse_output = 0; + SpawnAsyncProcess ( archive[idx] , command , 0, 1); + if ( archive[idx]->child_pid == 0 ) return FALSE; gtk_widget_show (viewport2); while (waiting) { - ps = waitpid ( archive[current_page]->child_pid, &status, WNOHANG); + ps = waitpid ( archive[idx]->child_pid, &status, WNOHANG); if (ps < 0) waiting = FALSE; else @@ -1959,7 +1964,7 @@ } if (watch_child_flag) { - xa_watch_child (archive[current_page]->child_pid, status, archive[current_page]); + xa_watch_child (archive[idx]->child_pid, status, archive[idx]); return TRUE; } else @@ -1975,7 +1980,7 @@ response = ShowGtkMessageDialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,_("An error occurred while accessing the archive."),_("Do you want to view the command line output?") ); if (response == GTK_RESPONSE_YES) xa_show_cmd_line_output (NULL); - archive[current_page]->status = XA_ARCHIVESTATUS_IDLE; + archive[idx]->status = XA_ARCHIVESTATUS_IDLE; gtk_widget_set_sensitive (Stop_button,FALSE); Update_StatusBar ( _("Operation failed.")); return FALSE; @@ -2087,14 +2092,17 @@ GList *row_list, *_row_list; GString *names; gint current_page; + gint idx; current_page = gtk_notebook_get_current_page(notebook); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[current_page]->treeview)); + idx = xa_find_archive_index (current_page); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[idx]->treeview)); + row_list = _row_list = gtk_tree_selection_get_selected_rows (selection, NULL); if ( row_list == NULL) return; - if ( archive[current_page]->status == XA_ARCHIVESTATUS_EXTRACT ) + if ( archive[idx]->status == XA_ARCHIVESTATUS_EXTRACT ) { response = ShowGtkMessageDialog (GTK_WINDOW (MainWindow),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Can't perform another extraction:"),_("Please wait until the completion of the current one!") ); return; @@ -2116,54 +2124,54 @@ gtk_drag_finish (dc, FALSE, FALSE, t); return; } - if ( archive[current_page]->has_passwd ) + if ( archive[idx]->has_passwd ) { - if ( archive[current_page]->passwd == NULL) + if ( archive[idx]->passwd == NULL) { - archive[current_page]->passwd = password_dialog (); - if ( archive[current_page]->passwd == NULL) + archive[idx]->passwd = password_dialog (); + if ( archive[idx]->passwd == NULL) { gtk_drag_finish (dc, FALSE, FALSE, t); return; } } } - gtk_tree_model_get_iter(archive[current_page]->model, &iter, (GtkTreePath*)(_row_list->data)); - gtk_tree_model_get (archive[current_page]->model, &iter, 0, &name, -1); + gtk_tree_model_get_iter(archive[idx]->model, &iter, (GtkTreePath*)(_row_list->data)); + gtk_tree_model_get (archive[idx]->model, &iter, 0, &name, -1); - archive[current_page]->extraction_path = extract_local_path ( no_uri_path , name ); + archive[idx]->extraction_path = extract_local_path ( no_uri_path , name ); g_free (name); g_free ( no_uri_path ); - if (archive[current_page]->extraction_path != NULL) + if (archive[idx]->extraction_path != NULL) to_send = "S"; names = g_string_new (""); gtk_tree_selection_selected_foreach (selection, (GtkTreeSelectionForeachFunc) ConcatenateFileNames, names ); - full_path = archive[current_page]->full_path; - overwrite = archive[current_page]->overwrite; - archive[current_page]->full_path = 0; - archive[current_page]->overwrite = 1; - command = xa_extract_single_files ( archive[current_page] , names, archive[current_page]->extraction_path ); + full_path = archive[idx]->full_path; + overwrite = archive[idx]->overwrite; + archive[idx]->full_path = 0; + archive[idx]->overwrite = 1; + command = xa_extract_single_files ( archive[idx] , names, archive[idx]->extraction_path ); g_string_free (names, TRUE); if ( command != NULL ) { - archive[current_page]->status = XA_ARCHIVESTATUS_EXTRACT; + archive[idx]->status = XA_ARCHIVESTATUS_EXTRACT; xa_run_command ( command , 1); g_free (command); } - archive[current_page]->full_path = full_path; - archive[current_page]->overwrite = overwrite; + archive[idx]->full_path = full_path; + archive[idx]->overwrite = overwrite; gtk_selection_data_set (selection_data, selection_data->target, 8, (guchar*)to_send, 1); } - if (archive[current_page]->extraction_path != NULL) + if (archive[idx]->extraction_path != NULL) { - g_free (archive[current_page]->extraction_path); - archive[current_page]->extraction_path = NULL; + g_free (archive[idx]->extraction_path); + archive[idx]->extraction_path = NULL; } g_list_foreach (row_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (row_list); - archive[current_page]->status = XA_ARCHIVESTATUS_IDLE; + archive[idx]->status = XA_ARCHIVESTATUS_IDLE; } void on_drag_data_received (GtkWidget *widget,GdkDragContext *context, int x,int y,GtkSelectionData *data, unsigned int info, unsigned int time, gpointer user_data) @@ -2205,7 +2213,9 @@ } if (current_page == -1) { - current_page = 0; + current_page = xa_get_new_archive_idx(); + if (current_page == -1) + return; archive[current_page] = xa_new_archive_dialog ( filename ); if (archive[current_page] == NULL) return; @@ -2290,10 +2300,14 @@ void xa_select_all ( GtkMenuItem *menuitem , gpointer user_data ) { + gint idx; gint current_page; current_page = gtk_notebook_get_current_page (notebook); - gtk_tree_selection_select_all ( gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[current_page]->treeview) ) ); + idx = xa_find_archive_index (current_page); + + current_page = gtk_notebook_get_current_page (notebook); + gtk_tree_selection_select_all ( gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[idx]->treeview) ) ); gtk_widget_set_sensitive (select_all,FALSE); gtk_widget_set_sensitive (deselect_all,TRUE); } @@ -2301,9 +2315,12 @@ void xa_deselect_all ( GtkMenuItem *menuitem , gpointer user_data ) { gint current_page; + gint idx; current_page = gtk_notebook_get_current_page (notebook); - gtk_tree_selection_unselect_all ( gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[current_page]->treeview) ) ); + idx = xa_find_archive_index (current_page); + + gtk_tree_selection_unselect_all ( gtk_tree_view_get_selection (GTK_TREE_VIEW (archive[idx]->treeview) ) ); gtk_widget_set_sensitive (select_all,TRUE); gtk_widget_set_sensitive (deselect_all,FALSE); } @@ -2359,15 +2376,18 @@ void xa_reset_password (GtkMenuItem *menuitem , gpointer user_data ) { gint current_page; + gint idx; current_page = gtk_notebook_get_current_page(notebook); - if (archive[current_page] == NULL) + idx = xa_find_archive_index ( current_page ); + + if (archive[idx] == NULL) return; - if (archive[current_page]->passwd != NULL) + if (archive[idx]->passwd != NULL) { - g_free (archive[current_page]->passwd); - archive[current_page]->passwd = NULL; + g_free (archive[idx]->passwd); + archive[idx]->passwd = NULL; Update_StatusBar (_("The password has been reset.")); } else @@ -2378,10 +2398,12 @@ { GtkWidget *comment_window; gint current_page; + gint idx; current_page = gtk_notebook_get_current_page(notebook); + idx = xa_find_archive_index (current_page); comment_window = view_win ( _("Archive comment window") ); - gtk_text_buffer_insert (viewtextbuf, &viewenditer, archive[current_page]->comment->str, archive[current_page]->comment->len); + gtk_text_buffer_insert (viewtextbuf, &viewenditer, archive[idx]->comment->str, archive[idx]->comment->len); gtk_widget_show (comment_window); } Modified: xarchiver/trunk/src/callbacks.h =================================================================== --- xarchiver/trunk/src/callbacks.h 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/callbacks.h 2006-11-07 13:52:10 UTC (rev 23770) @@ -83,7 +83,7 @@ void xa_view_file_inside_archive ( GtkMenuItem *menuitem , gpointer user_data ); void xa_cancel_archive ( GtkMenuItem *menuitem , gpointer user_data); void xa_add_files_archive ( GtkMenuItem *menuitem, gpointer user_data ); -void Activate_buttons(); +void xa_activate_delete_and_view(); void on_drag_data_received (GtkWidget *widget,GdkDragContext *context, int x,int y,GtkSelectionData *data, unsigned int info, unsigned int time, gpointer user_data); void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data); void drag_end (GtkWidget *treeview1, GdkDragContext *context, gpointer data); Modified: xarchiver/trunk/src/interface.c =================================================================== --- xarchiver/trunk/src/interface.c 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/interface.c 2006-11-07 13:52:10 UTC (rev 23770) @@ -827,15 +827,25 @@ gint xa_find_archive_index ( gint page_num ) { GtkWidget *scrollwindow; - gint max_pages; gint i; scrollwindow = gtk_notebook_get_nth_page(notebook, page_num); - max_pages = gtk_notebook_get_n_pages ( notebook); - for (i = 0; i <= max_pages; i++) + for (i = 0; i < 1024; i++) { if (archive[i] != NULL && archive[i]->scrollwindow == scrollwindow) return i; } return -1; } + +gint xa_get_new_archive_idx() +{ + gint i; + + for(i = 0; i < 1024; i++) + { + if (archive[i] == NULL) + return i; + } + return -1; +} Modified: xarchiver/trunk/src/interface.h =================================================================== --- xarchiver/trunk/src/interface.h 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/interface.h 2006-11-07 13:52:10 UTC (rev 23770) @@ -116,6 +116,7 @@ void xa_page_has_changed (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data); void xa_close_page (GtkWidget *widget, gpointer data); gint xa_find_archive_index ( gint page_num ); +gint xa_get_new_archive_idx(); gchar *password_dialog (); #endif Modified: xarchiver/trunk/src/main.c =================================================================== --- xarchiver/trunk/src/main.c 2006-11-07 08:02:57 UTC (rev 23769) +++ xarchiver/trunk/src/main.c 2006-11-07 13:52:10 UTC (rev 23770) @@ -372,6 +372,7 @@ void xa_set_button_state (gboolean New, gboolean Open,gboolean AddFile,gboolean Extract, gboolean exe, gboolean select) { + g_print ("xa_setbs\n"); gtk_widget_set_sensitive ( New_button, New); gtk_widget_set_sensitive ( new1, New); gtk_widget_set_sensitive ( Open_button, Open); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits