Author: colossus Date: 2008-07-19 12:56:56 +0000 (Sat, 19 Jul 2008) New Revision: 27351
Modified: xarchiver/trunk/TODO xarchiver/trunk/src/add_dialog.c xarchiver/trunk/src/archive.c 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/rpm.c xarchiver/trunk/src/window.c xarchiver/trunk/src/window.h Log: Fixed the recursing bug when adding with 7z. Enriched the status bar and changed the progress to a green/red flashing light. Removed the question asking whether to see the archiver error message. Updated TODO file. Modified: xarchiver/trunk/TODO =================================================================== --- xarchiver/trunk/TODO 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/TODO 2008-07-19 12:56:56 UTC (rev 27351) @@ -8,4 +8,3 @@ - support tar on *BSD. - avoid reset of extract dialog options when loading a new archive. - ability to create sfx archives through the Add dialog for those archives which support it. -- have two real status bars with displayed number of dirs. Modified: xarchiver/trunk/src/add_dialog.c =================================================================== --- xarchiver/trunk/src/add_dialog.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/add_dialog.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -420,7 +420,6 @@ if (xa_main_window) { - Update_StatusBar (_("Adding files to the archive, please wait...")); /* This in case the user wants to add files in the archive directories */ if (archive->location_entry_path != NULL) { Modified: xarchiver/trunk/src/archive.c =================================================================== --- xarchiver/trunk/src/archive.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/archive.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -81,7 +81,7 @@ g_strfreev ( argv ); if (archive->pb_source == 0) - archive->pb_source = g_timeout_add (200, xa_progressbar_pulse, NULL ); + archive->pb_source = g_timeout_add (350,xa_flash_led_indicator,archive); if (archive->error_output != NULL) { @@ -211,8 +211,6 @@ if (archive->tmp != NULL) { xa_delete_temp_directory (archive,0); - if(xa_main_window) - gtk_widget_hide(viewport2); g_free (archive->tmp); archive->tmp = NULL; } @@ -331,7 +329,6 @@ else { archive->parse_output = 0; - gtk_widget_show (viewport2); gtk_widget_set_sensitive (Stop_button,TRUE); while (_commands) { @@ -776,7 +773,7 @@ g_string_free(string,TRUE); xa_update_window_with_archive_entries(archive[idx],entry); - xa_handle_selected_rows(NULL,archive[idx]); + xa_set_statusbar_message_for_displayed_rows(archive[idx]); } } Modified: xarchiver/trunk/src/arj.c =================================================================== --- xarchiver/trunk/src/arj.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/arj.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -262,7 +262,7 @@ if (archive->passwd != NULL) command = g_strconcat ("arj t -g" , archive->passwd , " -i " , archive->escaped_path, NULL); else - command = g_strconcat ("arj t -i " , archive->escaped_path, NULL); + command = g_strconcat ("arj t -i -y - " , archive->escaped_path, NULL); list = g_slist_append(list,command); xa_run_command (archive,list); Modified: xarchiver/trunk/src/extract_dialog.c =================================================================== --- xarchiver/trunk/src/extract_dialog.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/extract_dialog.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -19,7 +19,6 @@ #include <gtk/gtk.h> #include <stdlib.h> #include "extract_dialog.h" -#include "interface.h" #include "window.h" #include "string_utils.h" #include "support.h" @@ -399,8 +398,6 @@ if (xa_main_window && (archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA || archive->type == XARCHIVETYPE_BZIP2) ) { gtk_widget_set_sensitive (Stop_button,FALSE); - Update_StatusBar (_("Operation canceled.")); - gtk_widget_hide (viewport2); xa_set_button_state (1,1,GTK_WIDGET_IS_SENSITIVE(save1),GTK_WIDGET_IS_SENSITIVE(close1),0,0,0,0,0); archive->status = XA_ARCHIVESTATUS_IDLE; } @@ -456,12 +453,7 @@ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (dialog_data->files_radio))) { if (xa_main_window) - { - gchar *text = g_strdup_printf(_("Extracting files to %s"),destination_path); - Update_StatusBar ( text ); gtk_widget_set_sensitive (Stop_button,TRUE); - g_free (text); - } } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (dialog_data->selected_radio))) gtk_tree_selection_selected_foreach(selection,(GtkTreeSelectionForeachFunc) xa_concat_filenames,&names); Modified: xarchiver/trunk/src/interface.c =================================================================== --- xarchiver/trunk/src/interface.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/interface.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -441,25 +441,44 @@ gtk_widget_show (hbox_sb); gtk_box_pack_end (GTK_BOX (vbox1), hbox_sb, FALSE, TRUE,0); - viewport1 = gtk_viewport_new (NULL, NULL); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport1),GTK_SHADOW_NONE); - gtk_widget_show (viewport1); - gtk_box_pack_start (GTK_BOX (hbox_sb), viewport1, TRUE, TRUE, 0); - - info_label = gtk_label_new (NULL); - gtk_misc_set_alignment (GTK_MISC(info_label), 0.0, 0.5); - gtk_widget_show (info_label); - gtk_container_add (GTK_CONTAINER (viewport1), info_label); - - viewport2 = gtk_viewport_new (NULL, NULL); - gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport2),GTK_SHADOW_NONE); - gtk_box_pack_start (GTK_BOX (hbox_sb), viewport2, TRUE, TRUE, 0); - + /* progressbar = gtk_progress_bar_new (); gtk_widget_show (progressbar); gtk_widget_set_size_request(progressbar,-1,10); - gtk_container_add (GTK_CONTAINER (viewport2), progressbar); + gtk_container_add (GTK_CONTAINER (viewport2), progressbar);*/ + + frame1 = gtk_frame_new (NULL); + gtk_widget_show (frame1); + gtk_box_pack_start (GTK_BOX (hbox_sb), frame1, TRUE, TRUE, 0); + gtk_frame_set_label_align (GTK_FRAME (frame1), 0, 0); + gtk_frame_set_shadow_type (GTK_FRAME (frame1), GTK_SHADOW_IN); + total_label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC(total_label), 0.0, 0.5); + gtk_widget_show (total_label); + gtk_container_add (GTK_CONTAINER (frame1), total_label); + + frame2 = gtk_frame_new (NULL); + gtk_widget_show (frame2); + gtk_box_pack_start (GTK_BOX (hbox_sb), frame2, TRUE, TRUE, 0); + gtk_frame_set_label_align (GTK_FRAME (frame2), 0, 0); + gtk_frame_set_shadow_type (GTK_FRAME (frame2), GTK_SHADOW_IN); + + selected_label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC(selected_label), 0.0, 0.5); + gtk_widget_show (selected_label); + gtk_container_add (GTK_CONTAINER (frame2), selected_label); + + green_led = gtk_image_new_from_icon_name ("gtk-yes", GTK_ICON_SIZE_BUTTON); + gtk_widget_show (green_led); + gtk_box_pack_start (GTK_BOX (hbox_sb), green_led, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (green_led), 1, 1); + gtk_tooltips_set_tip (tooltips,green_led, _("This is Xarchiver led status indicator. When the red light is on Xarchiver is busy"), NULL); + + red_led = gtk_image_new_from_icon_name ("gtk-no", GTK_ICON_SIZE_BUTTON); + gtk_box_pack_start (GTK_BOX (hbox_sb),red_led,FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (red_led),1,1); + g_signal_connect ((gpointer) new1, "activate", G_CALLBACK (xa_new_archive), NULL); g_signal_connect ((gpointer) open1, "activate", G_CALLBACK (xa_open_archive), NULL); g_signal_connect ((gpointer) save1, "activate", G_CALLBACK (xa_save_archive), NULL); @@ -497,14 +516,27 @@ gtk_window_add_accel_group (GTK_WINDOW (xa_main_window), accel_group); } -int xa_progressbar_pulse (gpointer data) +int xa_flash_led_indicator (gpointer data) { - if (xa_main_window == NULL) + XArchive *archive = data; + + if (xa_main_window == NULL || archive->child_pid == 0) + { + gtk_widget_show(green_led); + gtk_widget_hide(red_led); return FALSE; - if ( ! GTK_WIDGET_VISIBLE(viewport2) ) - return FALSE; + } - gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progressbar) ); + if (GTK_WIDGET_VISIBLE(green_led)) + { + gtk_widget_hide(green_led); + gtk_widget_show(red_led); + } + else + { + gtk_widget_show(green_led); + gtk_widget_hide(red_led); + } return TRUE; } @@ -520,7 +552,7 @@ xa_set_window_title (xa_main_window , archive[id]->path); - if ( GTK_WIDGET_VISIBLE (viewport2) ) + if (archive[id]->child_pid) { if (archive[id]->status == XA_ARCHIVESTATUS_IDLE) { @@ -625,7 +657,7 @@ gtk_tree_view_set_rubber_banding(GTK_TREE_VIEW(archive->treeview),TRUE); gtk_drag_source_set (archive->treeview, GDK_BUTTON1_MASK, drag_targets, 1, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); - g_signal_connect ((gpointer) sel, "changed", G_CALLBACK (xa_handle_selected_rows),archive); + g_signal_connect ((gpointer) sel, "changed", G_CALLBACK (xa_set_statusbar_message_for_selected_rows),archive); g_signal_connect (G_OBJECT (archive->treeview), "drag-begin", G_CALLBACK (drag_begin),archive); g_signal_connect (G_OBJECT (archive->treeview), "drag-data-get",G_CALLBACK (drag_data_get),archive); g_signal_connect (G_OBJECT (archive->treeview), "drag-end", G_CALLBACK (drag_end),NULL); @@ -1301,7 +1333,7 @@ return; } array = gtk_selection_data_get_uris(data); - if (array == NULL || GTK_WIDGET_VISIBLE(viewport2)) + if (array == NULL || archive[idx]->child_pid) { response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Sorry, I could not perform the operation!"),"" ); gtk_drag_finish(context,FALSE,FALSE,time); @@ -1441,7 +1473,7 @@ 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 working on the archive:")); + 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); Modified: xarchiver/trunk/src/interface.h =================================================================== --- xarchiver/trunk/src/interface.h 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/interface.h 2008-07-19 12:56:56 UTC (rev 27351) @@ -33,9 +33,10 @@ GtkWidget *open1; GtkWidget *save1; GtkWidget *entry1; +GtkWidget *green_led; +GtkWidget *red_led; GtkWidget *progressbar; -GtkWidget *info_label; -GtkWidget *viewport1,*viewport2; +GtkWidget *total_label,*selected_label; GtkWidget *archive_properties_window; GtkWidget *table1; GtkWidget *path_label; @@ -125,7 +126,7 @@ gchar *xa_create_password_dialog(gchar *); void set_label (GtkWidget *label,gchar *); -int xa_progressbar_pulse (gpointer ); +int xa_flash_led_indicator (gpointer ); void xa_create_popup_menu(); widget_data *xa_create_output_window(gchar *); void xa_create_main_window (GtkWidget *,gboolean,gboolean,gboolean); Modified: xarchiver/trunk/src/main.c =================================================================== --- xarchiver/trunk/src/main.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/main.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -223,7 +223,6 @@ gtk_window_set_default_size (GTK_WINDOW(xa_main_window), 600, 400); gtk_paned_set_position (GTK_PANED (hpaned1),200); } - Update_StatusBar ( _("Ready.")); gtk_widget_show (xa_main_window); /* This to open the archive from the command line */ Modified: xarchiver/trunk/src/rpm.c =================================================================== --- xarchiver/trunk/src/rpm.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/rpm.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -124,17 +124,14 @@ idx = xa_find_archive_index (current_page); gchar *gzip = data; + archive[idx]->child_pid = 0; if (WIFEXITED( exit_code) ) { if ( WEXITSTATUS (exit_code) ) { - gtk_widget_hide ( viewport2 ); xa_set_window_title (xa_main_window , NULL); - response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,GTK_BUTTONS_OK_CANCEL,_("An error occurred while decompressing the cpio archive."),_("Do you want to view the command line output?") ); - if (response == GTK_RESPONSE_OK) - xa_show_cmd_line_output (NULL); + xa_show_cmd_line_output (NULL); xa_set_button_state (1,1,GTK_WIDGET_IS_SENSITIVE(save1),GTK_WIDGET_IS_SENSITIVE(close1),0,0,0,0,0); - //TODO: xa_hide_progress_bar_stop_button(archive[idx]); return FALSE; } } Modified: xarchiver/trunk/src/window.c =================================================================== --- xarchiver/trunk/src/window.c 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/window.c 2008-07-19 12:56:56 UTC (rev 27351) @@ -43,10 +43,10 @@ gboolean xa_check_child_for_error_on_exit(XArchive *archive,gint status) { + archive->child_pid = archive->pb_source = 0; if (xa_main_window) { gtk_widget_set_sensitive(Stop_button,FALSE); - gtk_widget_hide(viewport2); } if (WIFEXITED (status)) { @@ -79,7 +79,6 @@ if(xa_main_window) { gtk_widget_set_sensitive(Stop_button,FALSE); - gtk_widget_hide(viewport2); if (archive->has_comment) gtk_widget_set_sensitive (comment_menu,TRUE); @@ -113,19 +112,13 @@ XEntry *entry; if (xa_main_window != NULL) { - if (archive->type == XARCHIVETYPE_BZIP2 || archive->type == XARCHIVETYPE_GZIP || archive->type == XARCHIVETYPE_LZMA) - Update_StatusBar ( _("Operation completed.")); - else - { - Update_StatusBar ( _("Please wait while the content of the archive is being updated...")); - xa_free_entry (archive,archive->root_entry); - if (archive->column_types != NULL) - g_free(archive->column_types); - xa_remove_columns(); - entry = g_new0(XEntry,1); - entry->filename = ""; - archive->root_entry = entry; - } + xa_free_entry (archive,archive->root_entry); + if (archive->column_types != NULL) + g_free(archive->column_types); + xa_remove_columns(); + entry = g_new0(XEntry,1); + entry->filename = ""; + archive->root_entry = entry; switch (archive->type) { @@ -177,9 +170,9 @@ XArchive *archive = data; gboolean result; + archive->child_pid = archive->pb_source = 0; if (WIFSIGNALED (status) ) { - Update_StatusBar (_("Operation canceled.")); if (archive->status == XA_ARCHIVESTATUS_EXTRACT) { gchar *msg = g_strdup_printf(_("Please check \"%s\" since some files could have been already extracted."),archive->extraction_path); @@ -226,8 +219,6 @@ gtk_widget_set_sensitive(properties,FALSE ); xa_disable_delete_buttons(FALSE); - Update_StatusBar ( _("Choose Add to begin creating the archive.")); - archive[current_page]->passwd = NULL; archive[current_page]->dummy_size = 0; archive[current_page]->nr_of_files = 0; @@ -376,10 +367,6 @@ g_free (path); gtk_widget_set_sensitive (Stop_button,TRUE); - gtk_widget_show (viewport2); - - Update_StatusBar (_("Please wait while the content of the archive is being read...")); - gtk_widget_set_sensitive (check_menu,FALSE); gtk_widget_set_sensitive (properties,FALSE); xa_set_button_state ( 0,0,0,0,0,0,0,0,0); @@ -453,7 +440,6 @@ return; } } - Update_StatusBar (_("Testing archive integrity, please wait...")); (*archive[id]->test) (archive[id]); } @@ -488,8 +474,7 @@ xa_clean_archive_structure (archive[idx]); archive[idx] = NULL; - - Update_StatusBar (_("Ready.")); + gtk_label_set_text(GTK_LABEL(total_label),""); } void xa_quit_application (GtkMenuItem *menuitem, gpointer user_data) @@ -497,11 +482,11 @@ gint i; gint idx; - if (GTK_WIDGET_VISIBLE (viewport2)) - { - Update_StatusBar ( _("Please hit the Stop button first!")); + i = gtk_notebook_get_current_page (notebook); + idx = xa_find_archive_index (i); + if (idx > -1 && archive[idx]->child_pid) return; - } + g_list_free ( Suffix ); g_list_free ( Name ); @@ -572,7 +557,6 @@ return; } - Update_StatusBar ( _("Deleting files from the archive, please wait...")); archive[id]->status = XA_ARCHIVESTATUS_DELETE; (*archive[id]->delete) (archive[id],list); } @@ -642,7 +626,6 @@ current_page = gtk_notebook_get_current_page (notebook); idx = xa_find_archive_index ( current_page ); - Update_StatusBar ( _("Converting archive to self-extracting, please wait...")); gtk_widget_set_sensitive (Stop_button,TRUE); archive[idx]->status = XA_ARCHIVESTATUS_SFX; switch ( archive[idx]->type ) @@ -690,7 +673,6 @@ if (archive_name == NULL) { gtk_widget_set_sensitive (Stop_button,FALSE); - Update_StatusBar ( _("Operation canceled.")); return; } archive_name_escaped = xa_escape_bad_chars ( archive_name ,"$\'`\"\\!?* ()[]&|@#:;" ); @@ -761,7 +743,6 @@ if (archive_name == NULL) { gtk_widget_set_sensitive (Stop_button,FALSE); - Update_StatusBar ( _("Operation canceled.")); return; } archive_name_escaped = xa_escape_bad_chars ( archive_name ,"$\'`\"\\!?* ()[]&|@#:;" ); @@ -798,7 +779,6 @@ else { gtk_widget_destroy ( locate_7zcon ); - Update_StatusBar (_("Operation canceled.")); return; } } @@ -1232,7 +1212,6 @@ if (response == GTK_RESPONSE_CANCEL) return; } - Update_StatusBar (_("Operation aborted.")); if (archive[idx]->child_pid) { kill (archive[idx]->child_pid,SIGABRT); @@ -1356,22 +1335,79 @@ gtk_widget_show_all (archive_properties_window); } -void xa_handle_selected_rows (GtkTreeSelection *selection,gpointer data) +void xa_set_statusbar_message_for_displayed_rows(XArchive *archive) { + gchar *info = NULL; + GtkTreePath *path = NULL; + GtkTreeIter iter; + gint n_elem = 0,pos = 0,dirs = 0; + unsigned long int total_size = 0; + unsigned int size = 0; + XEntry *entry; + + path = gtk_tree_path_new_first(); + if (gtk_tree_model_get_iter (archive->model, &iter, path) == FALSE) + return; + + switch (archive->type) + { + case XARCHIVETYPE_GZIP: + case XARCHIVETYPE_BZIP2: + case XARCHIVETYPE_LZMA: + case XARCHIVETYPE_RPM: + pos = 3; + break; + + case XARCHIVETYPE_RAR: + case XARCHIVETYPE_ARJ: + case XARCHIVETYPE_7ZIP: + pos = 2; + break; + + case XARCHIVETYPE_LHA: + pos = 4; + break; + + case XARCHIVETYPE_TAR_GZ: + case XARCHIVETYPE_TAR_BZ2: + case XARCHIVETYPE_TAR_LZMA: + case XARCHIVETYPE_TAR: + case XARCHIVETYPE_DEB: + case XARCHIVETYPE_ZIP: + pos = 5; + break; + + default: + break; + } + gtk_tree_path_free(path); + do + { + n_elem++; + gtk_tree_model_get (archive->model,&iter,pos,&size,-1); + gtk_tree_model_get (archive->model,&iter,archive->nc+1,&entry,-1); + if (entry->is_dir) + dirs++; + total_size += size; + } + while (gtk_tree_model_iter_next (archive->model,&iter)); + info = xa_get_statusbar_message(total_size,n_elem,dirs,FALSE); + gtk_label_set_text (GTK_LABEL(total_label),info); + g_free(info); +} + +void xa_set_statusbar_message_for_selected_rows (GtkTreeSelection *selection,gpointer data) +{ XArchive *archive = data; GList *list = NULL; - gchar *measure = NULL; - gchar *info = NULL; + gchar *msg = NULL; GtkTreeIter iter; GtkTreeModel *model; - GtkTreePath *path = NULL; - gint selected,n_elem = 0,pos = 0; + gint selected = 0,pos = 0, dirs = 0; unsigned long int total_size = 0; unsigned int size = 0; + XEntry *entry; - /*if ( ! GTK_WIDGET_VISIBLE (Extract_button) ) - return;*/ - switch (archive->type) { case XARCHIVETYPE_GZIP: @@ -1401,102 +1437,76 @@ break; default: - size = 0; + break; } model = gtk_tree_view_get_model(GTK_TREE_VIEW(archive->treeview)); - if (selection == NULL) - goto here; selected = gtk_tree_selection_count_selected_rows (selection); if (selected == 0 ) + { xa_disable_delete_buttons (FALSE); - else + gtk_label_set_text (GTK_LABEL(selected_label),_("No files selected")); + return; + } + if (archive->type == XARCHIVETYPE_RAR && unrar) + gtk_widget_set_sensitive (delete_menu,FALSE); + else if ( archive->type != XARCHIVETYPE_RPM && archive->type != XARCHIVETYPE_DEB) + gtk_widget_set_sensitive (delete_menu,TRUE); + + list = gtk_tree_selection_get_selected_rows(selection,NULL); + while (list) { - if (archive->type == XARCHIVETYPE_RAR && unrar) - gtk_widget_set_sensitive ( delete_menu,FALSE); - else if ( archive->type != XARCHIVETYPE_RPM && archive->type != XARCHIVETYPE_DEB) - gtk_widget_set_sensitive (delete_menu,TRUE); + gtk_tree_model_get_iter(model,&iter,list->data); + gtk_tree_model_get (model,&iter,pos,&size,-1); + gtk_tree_model_get (archive->model,&iter,archive->nc+1,&entry,-1); + if (entry->is_dir) + dirs++; + gtk_tree_path_free (list->data); + total_size += size; + list = list->next; } - if (selected > 0) + g_list_free(list); + msg = xa_get_statusbar_message(total_size,selected,dirs,TRUE); + gtk_label_set_text (GTK_LABEL(selected_label),msg); + g_free(msg); +} + +gchar *xa_get_statusbar_message(unsigned long int total_size,gint n_elem,gint dirs,gboolean selection) +{ + gchar *measure = NULL, *info = NULL; + + if (total_size > 1024*1024*1024) { - list = gtk_tree_selection_get_selected_rows(selection,NULL); - while (list) - { - gtk_tree_model_get_iter(model,&iter,list->data); - gtk_tree_model_get (model,&iter,pos,&size,-1); - gtk_tree_path_free (list->data); - total_size += size; - list = list->next; - } - g_list_free(list); - if (total_size > 1024*1024*1024 ) - { - content_size = (double)total_size / (1024*1024*1024); - measure = "GB"; - } - else if (total_size > 1024*1024 ) - { - content_size = (double)total_size / (1024*1024); - measure = "MB"; - } - else if (total_size > 1024 ) - { - content_size = (double)total_size / 1024; - measure = "KB"; - } - else - { - measure = "Bytes"; - content_size = total_size; - } - info = g_strdup_printf(ngettext ("%d item selected (%.1f %s)", "%d items selected (%.1f %s)", selected),selected,content_size,measure); + content_size = (double)total_size / (1024*1024*1024); + measure = "GB"; } + else if (total_size > 1024*1024) + { + content_size = (double)total_size / (1024*1024); + measure = "MB"; + } + else if (total_size > 1024) + { + content_size = (double)total_size / 1024; + measure = "KB"; + } else { -here: - if (model == NULL) - return; - path = gtk_tree_path_new_first(); - if (gtk_tree_model_get_iter (model, &iter, path) == FALSE) - return; - do - { - n_elem++; - gtk_tree_model_get (model,&iter,pos,&size,-1); - total_size += size; - } - while (gtk_tree_model_iter_next (model,&iter)); - if (total_size > 1024*1024*1024 ) - { - content_size = (double)total_size / (1024*1024*1024); - measure = "GB"; - } - else if (total_size > 1024*1024 ) - { - content_size = (double)total_size / (1024*1024); - measure = "MB"; - } - else if (total_size > 1024 ) - { - content_size = (double)total_size / 1024; - measure = "KB"; - } - else - { - measure = "Bytes"; - content_size = total_size; - } - info = g_strdup_printf(ngettext ("%d item (%.1f %s)", "%d items (%.1f %s)", n_elem),n_elem,content_size,measure); + measure = "Bytes"; + content_size = total_size; } - Update_StatusBar(info); - g_free(info); + if (selection) + info = g_strdup_printf(ngettext ("%d file and %d dir selected (%.1f %s)","%d files and %d dirs selected (%.1f %s)",n_elem),n_elem,dirs,content_size,measure); + else + info = g_strdup_printf(ngettext ("%d file, %d dir (%.1f %s)", "%d files, %d dirs (%.1f %s)", n_elem),n_elem,dirs,content_size,measure); + return info; } void Update_StatusBar (gchar *msg) { if (xa_main_window == NULL) return; - gtk_label_set_text (GTK_LABEL(info_label),msg); + gtk_label_set_text (GTK_LABEL(total_label),msg); } void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data) @@ -1630,8 +1640,10 @@ gint idx; current_page = gtk_notebook_get_current_page(notebook); + idx = xa_find_archive_index (current_page); array = gtk_selection_data_get_uris(data); - if (array == NULL || GTK_WIDGET_VISIBLE(viewport2)) + + if (array == NULL || archive[idx]->child_pid) { response = xa_show_message_dialog (GTK_WINDOW (xa_main_window),GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Sorry, I could not perform the operation!"),"" ); gtk_drag_finish(context,FALSE,FALSE,time); @@ -1720,8 +1732,7 @@ switch (event->keyval) { case GDK_Escape: - if ( GTK_WIDGET_VISIBLE (viewport2) ) - xa_cancel_archive (NULL, NULL); + xa_cancel_archive (NULL, NULL); break; } @@ -2059,5 +2070,5 @@ entry = entry->next; } xa_fill_dir_sidebar(archive,FALSE); - xa_handle_selected_rows(NULL,archive); + xa_set_statusbar_message_for_displayed_rows(archive); } Modified: xarchiver/trunk/src/window.h =================================================================== --- xarchiver/trunk/src/window.h 2008-07-19 06:47:03 UTC (rev 27350) +++ xarchiver/trunk/src/window.h 2008-07-19 12:56:56 UTC (rev 27351) @@ -82,31 +82,33 @@ void xa_cancel_archive ( GtkMenuItem * , gpointer); void xa_add_files_archive ( GtkMenuItem *, gpointer); void xa_show_prefs_dialog ( GtkMenuItem * , gpointer); -void xa_handle_selected_rows (GtkTreeSelection *treeselection,gpointer data); -void on_drag_data_received (GtkWidget *widget,GdkDragContext *context, int x,int y,GtkSelectionData *data, unsigned int info, unsigned int time, gpointer ); -void drag_begin (GtkWidget *treeview1,GdkDragContext *context, gpointer data); -void drag_end (GtkWidget *treeview1, GdkDragContext *context, gpointer data); -void drag_data_get (GtkWidget *widget, GdkDragContext *dc, GtkSelectionData *selection_data, guint info, guint t, gpointer data); +void xa_set_statusbar_message_for_selected_rows (GtkTreeSelection *,gpointer ); +void xa_set_statusbar_message_for_displayed_rows(XArchive *); +void on_drag_data_received (GtkWidget *,GdkDragContext *, int x,int y,GtkSelectionData *, unsigned int , unsigned int , gpointer ); +void drag_begin (GtkWidget *,GdkDragContext *, gpointer ); +void drag_end (GtkWidget *, GdkDragContext *, gpointer ); +void drag_data_get (GtkWidget *, GdkDragContext *dc, GtkSelectionData *, guint , guint t, gpointer ); -int xa_show_message_dialog ( GtkWindow *window, int mode,int type,int button, const gchar *,const gchar *); -int xa_detect_archive_type ( gchar *filename ); +int xa_show_message_dialog ( GtkWindow *, int,int ,int , const gchar *,const gchar *); +int xa_detect_archive_type ( gchar * ); gboolean xa_detect_archive_comment ( int type, gchar *, XArchive * ); -gboolean key_press_function ( GtkWidget* widget, GdkEventKey* event,gpointer data); -gboolean treeview_select_search (GtkTreeModel *model,gint column,const gchar *key,GtkTreeIter *,gpointer ); -gboolean xa_check_child_for_error_on_exit(XArchive *,gint status); +gboolean key_press_function ( GtkWidget* , GdkEventKey* ,gpointer ); +gboolean treeview_select_search (GtkTreeModel *,gint ,const gchar *,GtkTreeIter *,gpointer ); +gboolean xa_check_child_for_error_on_exit(XArchive *,gint ); void xa_archive_operation_finished(XArchive *); void xa_reload_archive_content(XArchive *); -void xa_watch_child ( GPid pid, gint status, gpointer data); +void xa_watch_child ( GPid , gint , gpointer ); void xa_remove_columns(); -void xa_create_liststore ( XArchive *, gchar *columns_names[]); +void xa_create_liststore (XArchive *,gchar *[]); +gchar *xa_get_statusbar_message(unsigned long int,gint,gint,gboolean); void Update_StatusBar (gchar *); gchar *xa_open_file_dialog (); gchar *xa_open_sfx_file_selector (); -void xa_activate_link (GtkAboutDialog *about,const gchar *link,gpointer data); +void xa_activate_link (GtkAboutDialog *about,const gchar *,gpointer ); void xa_location_entry_activated (GtkEntry *entry,gpointer ); -int xa_mouse_button_event(GtkWidget *widget,GdkEventButton *event,gpointer data); -void xa_treeview_row_activated(GtkTreeView *tree_view,GtkTreePath *path,GtkTreeViewColumn *column,gpointer ); -void xa_update_window_with_archive_entries(XArchive *archive,XEntry *entry); +int xa_mouse_button_event(GtkWidget *,GdkEventButton *,gpointer ); +void xa_treeview_row_activated(GtkTreeView *,GtkTreePath *,GtkTreeViewColumn *,gpointer ); +void xa_update_window_with_archive_entries(XArchive *,XEntry *); #endif _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits