[Xfce4-commits] r23224 - in xarchiver/branches/xarchiver-psybsd: libxarchiver src
Stephan Arts
stephan at xfce.org
Thu Sep 28 11:03:18 UTC 2006
Author: stephan
Date: 2006-09-28 11:03:18 +0000 (Thu, 28 Sep 2006)
New Revision: 23224
Modified:
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
xarchiver/branches/xarchiver-psybsd/src/main_window.c
xarchiver/branches/xarchiver-psybsd/src/main_window.h
Log:
Added 'extract-selection'
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-28 09:44:20 UTC (rev 23223)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-28 11:03:18 UTC (rev 23224)
@@ -470,7 +470,7 @@
gpointer props = NULL;
gpointer props_iter = NULL;
- gint n = 0, a = 0, i = 0;
+ gint n = 0, a = 0, i = 0, o = 0;
gchar *temp_filename = NULL;
gchar *_size = NULL;
@@ -480,7 +480,7 @@
if(cond & (G_IO_PRI | G_IO_IN))
{
- while(TRUE)
+ for(o = 0; o < 500; o++)
{
i = 0;
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c 2006-09-28 09:44:20 UTC (rev 23223)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c 2006-09-28 11:03:18 UTC (rev 23224)
@@ -39,11 +39,6 @@
{
if(archive->status != LXA_ARCHIVESTATUS_REFRESH)
lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_IDLE);
- if(archive->files)
- {
- g_free(archive->files);
- archive->files = NULL;
- }
}
}
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-28 09:44:20 UTC (rev 23223)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-28 11:03:18 UTC (rev 23224)
@@ -255,6 +255,8 @@
window->treeview = gtk_tree_view_new();
gtk_tree_view_set_enable_search(GTK_TREE_VIEW(window->treeview), TRUE);
+ GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (window->treeview) );
+ gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
gtk_container_add(GTK_CONTAINER(window->scrollwindow), window->treeview);
@@ -510,16 +512,43 @@
gint result = 0;
XAMainWindow *window = XA_MAIN_WINDOW(userdata);
LXAArchiveSupport *lp_support = NULL;
+ GSList *filenames = NULL;
+ GValue *value = g_new0(GValue, 1);
+ GtkTreeModel *treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(window->treeview));
+ GtkTreeIter iter;
+ GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (window->treeview) );
lp_support = lxa_get_support_for_mime(window->lp_xa_archive->mime);
- dialog = xa_extract_archive_dialog_new(lp_support, window->lp_xa_archive, FALSE);
+
+ dialog = xa_extract_archive_dialog_new(lp_support, window->lp_xa_archive, gtk_tree_selection_count_selected_rows (selection));
result = gtk_dialog_run (GTK_DIALOG (dialog) );
if(result == GTK_RESPONSE_OK)
{
gtk_widget_hide(GTK_WIDGET(dialog));
extract_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- lxa_archive_support_extract(lp_support, window->lp_xa_archive, extract_archive_path, NULL);
+ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(XA_EXTRACT_ARCHIVE_DIALOG(dialog)->sel_files_radio)))
+ {
+ GList *rows = gtk_tree_selection_get_selected_rows(selection, &treemodel);
+ GList *_rows = rows;
+ gchar *working_dir = xa_main_window_get_working_dir(window);
+ while(_rows != NULL)
+ {
+ gtk_tree_model_get_iter(GTK_TREE_MODEL(treemodel), &iter, rows->data);
+ if(window->props._show_icons)
+ gtk_tree_model_get_value(GTK_TREE_MODEL(treemodel), &iter, 1, value);
+ else
+ gtk_tree_model_get_value(GTK_TREE_MODEL(treemodel), &iter, 0, value);
+
+ filenames = g_slist_prepend(filenames, g_strconcat(working_dir, g_value_get_string(value), NULL));
+ g_value_unset(value);
+ _rows = _rows->next;
+ }
+ g_free(working_dir);
+ g_list_free(rows);
+ lxa_archive_support_extract(lp_support, window->lp_xa_archive, extract_archive_path, filenames);
+ } else
+ lxa_archive_support_extract(lp_support, window->lp_xa_archive, extract_archive_path, NULL);
g_free(extract_archive_path);
extract_archive_path = NULL;
}
@@ -868,3 +897,22 @@
g_free(value);
}
+gchar *
+xa_main_window_get_working_dir(XAMainWindow *window)
+{
+ gchar *temp = ((LXAEntry *)window->working_node->data)->filename;
+ gchar *path = NULL, *_temp = NULL;
+ GSList *_path = window->working_node->next;
+ while(_path)
+ {
+ _temp = path;
+ if(temp)
+ path = g_strconcat(((LXAEntry *)_path->data)->filename, "/", temp, NULL);
+ else
+ path = g_strconcat(((LXAEntry *)_path->data)->filename, "/", _temp,NULL);
+
+ g_free(_temp);
+ _path = _path->next;
+ }
+ return temp;
+}
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-28 09:44:20 UTC (rev 23223)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-28 11:03:18 UTC (rev 23224)
@@ -119,6 +119,7 @@
void xa_main_window_archive_status_changed(LXAArchive *archive, gpointer userdata);
gint xa_main_window_open_archive(XAMainWindow *window, gchar *archive_path);
+gchar *xa_main_window_get_working_dir(XAMainWindow *window);
G_END_DECLS
#endif /* __XARCHIVER_MAIN_WINDOW_H__ */
More information about the Xfce4-commits
mailing list