[Xfce4-commits] r23816 - in xarchiver/branches/xarchiver-psybsd: libxarchiver src

Stephan Arts stephan at xfce.org
Sat Nov 11 00:04:13 CET 2006


Author: stephan
Date: 2006-11-10 23:04:11 +0000 (Fri, 10 Nov 2006)
New Revision: 23816

Modified:
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
   xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/notebook.c
   xarchiver/branches/xarchiver-psybsd/src/notebook.h
   xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
Log:
- Fixed segfault in tool-bar
- Added options to gnu-tar support-object
- Window-title now shows archive-filename
- Changed some stuff to add-dialog


Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-11-10 23:04:11 UTC (rev 23816)
@@ -36,6 +36,8 @@
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE = 1,
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_TOUCH,
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP,
+	LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_KEEP_NEW,
+	LXA_ARCHIVE_SUPPORT_GNU_TAR_ADD_MODE,
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_SIZE,
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_DATE,
 	LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_TIME,
@@ -157,52 +159,66 @@
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE, pspec);
 
 	pspec = g_param_spec_boolean("extract-touch",
+		_("Touch files"),
 		"Touch files",
-		"Touch files",
 		FALSE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_TOUCH, pspec);
 
 	pspec = g_param_spec_uint("extract-strip",
+		_("Strip directories"),
 		"Strip directories",
-		"Strip directories",
 		0,
 		128,
 		0,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP, pspec);
 
+	pspec = g_param_spec_boolean("extract-keep-new",
+		_("Keep newer files"),
+		_("Do not overwrite files newer then those in the archive"),
+		FALSE,
+		G_PARAM_READWRITE);
+	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_KEEP_NEW, pspec);
+
+	pspec = g_param_spec_string("add-mode",
+		_("Override permissions"),
+		"Override permissions",
+		"",
+		G_PARAM_READWRITE);
+	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_ADD_MODE, pspec);
+
 	pspec = g_param_spec_boolean("view-size",
-		"View file-size",
-		"View file-size",
+		_("Filesize"),
+		_("View filesize"),
 		FALSE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_SIZE, pspec);
 
 	pspec = g_param_spec_boolean("view-rights",
+		_("Permissions"),
 		"View permissions",
-		"View permissions",
 		FALSE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_RIGHTS, pspec);
 
 	pspec = g_param_spec_boolean("view-owner",
+		_("Owner/Group"),
 		"View owner",
-		"View owner",
 		FALSE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_OWNER, pspec);
 
 	pspec = g_param_spec_boolean("view-date",
+		_("Date"),
 		"View date",
-		"View date",
 		FALSE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_DATE, pspec);
 
 	pspec = g_param_spec_boolean("view-time",
+		_("Time"),
 		"View time",
-		"View time",
 		TRUE,
 		G_PARAM_READWRITE);
 	g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_TIME, pspec);
@@ -255,15 +271,30 @@
 		if(!g_file_test(archive->path, G_FILE_TEST_EXISTS))
 		{
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tar"))
-				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -cf ", archive->path, " ", archive->files, NULL);
+				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name,
+				                      " -cf ", archive->path,
+															" --mode=", LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_add_mode,
+															" ", archive->files, NULL);
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tarz"))
-				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -Zcf ", archive->path, " ", archive->files, NULL);
+				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name,
+				                      " -Zcf ", archive->path,
+															" --mode=", LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_add_mode,
+															" ", archive->files, NULL);
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-compressed-tar"))
-				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -zcf ", archive->path, " ", archive->files, NULL);
+				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name,
+				                      " -zcf ", archive->path,
+															" --mode=", LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_add_mode,
+															" ", archive->files, NULL);
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-bzip-compressed-tar"))
-				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -jcf ", archive->path, " ", archive->files, NULL);
+				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name,
+				                      " -jcf ", archive->path,
+															" --mode=", LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_add_mode,
+															" ", archive->files, NULL);
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tzo"))
-				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " --use-compress-program=lzop -cf ", archive->path, " ", archive->files, NULL);
+				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name,
+				                      " --use-compress-program=lzop -cf ", archive->path,
+															" --mode=", LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_add_mode,
+															" ", archive->files, NULL);
 			if(command)
 				lxa_execute(command, archive, NULL, NULL, NULL, NULL);
 		} else
@@ -297,6 +328,13 @@
 lxa_archive_support_gnu_tar_extract(LXAArchive *archive, gchar *dest_path, GSList *filenames)
 {
 	gchar *command = NULL;
+	gchar *command_options = g_strconcat(
+			LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_keep_newer?" --keep-newer-files ":" ",
+			LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
+			LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+			NULL
+	    );
+
 	if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
 	{
 		g_critical("Support is not GNU TAR");
@@ -317,48 +355,47 @@
 			{
 				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -xf ", archive->path,
 						" -C \"", dest_path, "\"", 
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+						command_options,
 						archive->files, NULL);
 			}
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tarz"))
 			{
 				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -Zxf ", archive->path,
 						" -C \"", dest_path, "\"", 
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+						command_options,
 						archive->files, NULL);
 			}
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-compressed-tar"))
 			{
 				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -zxf ", archive->path,
 						" -C \"", dest_path, "\"", 
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+						command_options,
 						archive->files, NULL);
 			}
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-bzip-compressed-tar"))
 			{
 				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -jxf ", archive->path,
 						" -C \"", dest_path, "\"", 
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+						command_options,
 						archive->files, NULL);
 			}
 			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tzo"))
 			{
 				command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -xf --use-compress-program=lzop ", archive->path,
 						" -C \"", dest_path, "\"", 
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_overwrite?" --overwrite ":" ",
-						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
+						command_options,
 						archive->files, NULL);
 			}
 		} else
+		{
+			LXA_FREE(command_options);
 			return 1;
+		}
 		if(command)
 		{
 			lxa_execute(command, archive, NULL, NULL, NULL, NULL);
 			g_debug("Extracting archive '%s' to '%s'\nUsing command '%s'", archive->path, dest_path, command);
+			LXA_FREE(command_options);
 			LXA_FREE(command);
 		}
 	}
@@ -438,7 +475,7 @@
 			i++;
 		}
 		if(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_view_size) {
-			lxa_archive_set_property_type(archive, i, G_TYPE_UINT64, _("Size"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_UINT64, _("Filesize"));
 			i++;
 		}
 		if(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_view_date) {
@@ -703,15 +740,23 @@
 {
 	switch(prop_id)
 	{
+/* EXTRACT */
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE:
 			LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_overwrite = g_value_get_boolean(value);
 			break;
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_TOUCH:
 			LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_touch = g_value_get_boolean(value);
 			break;
+		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_KEEP_NEW:
+			LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_keep_newer = g_value_get_boolean(value);
+			break;
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP:
 			LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_strip = g_value_get_uint(value);
 			break;
+/* ADD */
+		case LXA_ARCHIVE_SUPPORT_GNU_TAR_ADD_MODE:
+			LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_add_mode = g_value_dup_string(value);
+			break;
 
 /* */
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_SIZE:
@@ -740,6 +785,7 @@
 {
 	switch(prop_id)
 	{
+/* EXTRACT */
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE:
 			g_value_set_boolean(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_overwrite);
 			break;
@@ -749,6 +795,13 @@
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP:
 			g_value_set_uint(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_strip);
 			break;
+		case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_KEEP_NEW:
+			g_value_set_boolean(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_keep_newer);
+			break;
+/* ADD */
+		case LXA_ARCHIVE_SUPPORT_GNU_TAR_ADD_MODE:
+			g_value_set_string(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_add_mode);
+			break;
 
 /* */
 		case LXA_ARCHIVE_SUPPORT_GNU_TAR_VIEW_SIZE:

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h	2006-11-10 23:04:11 UTC (rev 23816)
@@ -49,7 +49,11 @@
 	gboolean _extr_overwrite;
 	gboolean _extr_touch;
 	guint    _extr_strip;
+	gboolean _extr_keep_old;
+	gboolean _extr_keep_newer;
 
+	gchar   *_add_mode;
+
 /* Optional properties */
 	gboolean _view_size;
 	gboolean _view_date;

Modified: xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/add_dialog.c	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/src/add_dialog.c	2006-11-10 23:04:11 UTC (rev 23816)
@@ -22,6 +22,7 @@
 #include <gettext.h>
 
 #include "add_dialog.h"
+#include "widget_factory.h"
 
 static void
 xa_add_dialog_class_init(XAAddDialogClass *archive_class);
@@ -66,10 +67,10 @@
 	GtkWidget *frame = gtk_frame_new(_("Drag Files and folders to bottom list"));
 	dialog->optionframe = gtk_frame_new(_("Options:"));
 	GtkWidget *vpaned = gtk_vpaned_new();
-	GtkWidget *chooser = gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN);
+	//GtkWidget *chooser = gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_OPEN);
 	GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
-	gtk_paned_pack1(GTK_PANED(vpaned), chooser, TRUE, FALSE);
+	//gtk_paned_pack1(GTK_PANED(vpaned), chooser, TRUE, FALSE);
 	gtk_paned_pack2(GTK_PANED(vpaned), scrolled_window, TRUE, FALSE);
 
 	gtk_container_add(GTK_CONTAINER(frame), vpaned);
@@ -92,7 +93,8 @@
 {
 	GSList *add_options;
 	XAAddDialog *dialog;
-	GtkWidget *optionbox, *test, *hbox;
+	GtkWidget *optionbox, *test;
+	XAWidgetFactory *factory = xa_widget_factory_new();
 
 	dialog = g_object_new(xa_add_dialog_get_type(),
 			"title", _("Add file(s) to archive"),
@@ -107,29 +109,14 @@
 		add_options = lxa_archive_support_list_properties(support, "add");
 		while(add_options)
 		{
-			switch(G_PARAM_SPEC(add_options->data)->value_type)
-			{
-				case G_TYPE_BOOLEAN:
-					test = gtk_check_button_new_with_label(g_param_spec_get_nick(G_PARAM_SPEC(add_options->data)));
-		//			g_signal_connect(G_OBJECT(test), "toggled", G_CALLBACK(cb_xa_add_dialog_option_toggled), g_param_spec_get_name(G_PARAM_SPEC(add_options->data)));
-					gtk_box_pack_start(GTK_BOX(optionbox), test, FALSE, FALSE, 0);
-					break;
-				case G_TYPE_STRING:
-					hbox = gtk_hbox_new(FALSE, 4);
-					test = gtk_label_new(g_param_spec_get_nick(G_PARAM_SPEC(add_options->data)));
-					gtk_box_pack_start(GTK_BOX(hbox), test, FALSE, FALSE, 3);
-
-					test = gtk_entry_new();
-					gtk_box_pack_start(GTK_BOX(hbox), test, TRUE, TRUE, 3);
-
-	//				g_signal_connect(G_OBJECT(test), "child_notify", G_CALLBACK(cb_xa_add_dialog_option_child_norify), g_param_spec_get_name(G_PARAM_SPEC(add_options->data)));
-					gtk_box_pack_start(GTK_BOX(optionbox), hbox, FALSE, FALSE, 0);
-					break;
-			}
+			test = xa_widget_factory_create_property_widget(factory, G_OBJECT(support), g_param_spec_get_name(G_PARAM_SPEC(add_options->data)));
+			gtk_box_pack_start(GTK_BOX(optionbox), test, FALSE, FALSE, 0);
 			add_options = add_options->next;
 		}
 	}
 
+	gtk_widget_set_size_request(GTK_WIDGET(dialog), 600,400);
+
 	gtk_widget_show_all(optionbox);
 	return (GtkWidget*)dialog;
 }

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-11-10 23:04:11 UTC (rev 23816)
@@ -377,7 +377,7 @@
 		{
 
 		}
-		gtk_widget_destroy (GTK_WIDGET (dialog) );
+		gtk_widget_destroy (dialog );
 	}
 
 }
@@ -438,7 +438,7 @@
 	result = gtk_dialog_run (GTK_DIALOG (dialog) );
 	if(result == GTK_RESPONSE_OK)
 	{
-		gtk_widget_hide(GTK_WIDGET(dialog));
+		gtk_widget_hide(dialog);
 		extract_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
 		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(XA_EXTRACT_ARCHIVE_DIALOG(dialog)->sel_files_radio)))
 		{
@@ -461,7 +461,7 @@
 		g_free(extract_archive_path);
 		extract_archive_path = NULL;
 	}
-	gtk_widget_destroy (GTK_WIDGET (dialog) );
+	gtk_widget_destroy (dialog);
 
 }
 
@@ -472,9 +472,18 @@
 
 	LXAArchive        *lp_archive = NULL;
 	LXAArchiveSupport *lp_support = NULL;
+	GtkWidget         *dialog = NULL;
+	gint result;
+	xa_notebook_get_active_archive(XA_NOTEBOOK(window->notebook), &lp_archive, &lp_support);
 
-	xa_notebook_get_active_archive(XA_NOTEBOOK(window->notebook), &lp_archive, &lp_support);
-	gtk_dialog_run (GTK_DIALOG (xa_add_dialog_new(lp_support)));
+	dialog = xa_add_dialog_new(lp_support);
+
+	result = gtk_dialog_run (GTK_DIALOG(dialog));
+	if(result == GTK_RESPONSE_OK)
+	{
+		gtk_widget_hide(dialog);
+	}
+	gtk_widget_destroy (dialog);
 }
 
 static void
@@ -485,12 +494,17 @@
 static void
 cb_xa_main_window_notebook_page_switched(XANotebook *notebook, GtkNotebookPage *page, guint page_nr, gpointer data)
 {
+	LXAArchive *lp_archive;
 	XAMainWindow *window = XA_MAIN_WINDOW(data);
 
 	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_add), TRUE);
 	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_extract), TRUE);
 	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_remove), TRUE);
 	gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_stop), TRUE);
+
+	lp_archive = xa_notebook_page_get_archive(notebook, page_nr);
+
+	gtk_window_set_title(GTK_WINDOW(window), lxa_archive_get_filename(lp_archive));
 }
 
 static void

Modified: xarchiver/branches/xarchiver-psybsd/src/notebook.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/notebook.c	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/src/notebook.c	2006-11-10 23:04:11 UTC (rev 23816)
@@ -360,8 +360,10 @@
 	GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
 	GtkTreeModel *archive_store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
 
-	(*lp_archive) = xa_archive_store_get_archive(XA_ARCHIVE_STORE(archive_store));
-	(*lp_support) = xa_archive_store_get_support(XA_ARCHIVE_STORE(archive_store));
+	if(lp_archive)
+		(*lp_archive) = xa_archive_store_get_archive(XA_ARCHIVE_STORE(archive_store));
+	if(lp_support)
+		(*lp_support) = xa_archive_store_get_support(XA_ARCHIVE_STORE(archive_store));
 }
 
 GtkWidget *
@@ -394,3 +396,13 @@
 	else
 		xa_notebook_add_archive(XA_NOTEBOOK(notebook), archive, support);
 }
+
+LXAArchive*
+xa_notebook_page_get_archive(XANotebook *notebook, gint n)
+{
+		GtkWidget *scrolledwindow = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), n);
+		GtkWidget *treeview = gtk_bin_get_child(GTK_BIN(scrolledwindow));
+		GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview));
+		
+		return xa_archive_store_get_archive(XA_ARCHIVE_STORE(store));
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/notebook.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/notebook.h	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/src/notebook.h	2006-11-10 23:04:11 UTC (rev 23816)
@@ -63,14 +63,15 @@
 	GtkNotebookClass parent;
 };
 
-GtkWidget   *xa_notebook_new (XANavigationBar *bar, gboolean use_tabs);
-GType xa_notebook_get_type ();
+GtkWidget  *xa_notebook_new (XANavigationBar *bar, gboolean use_tabs);
+GType       xa_notebook_get_type ();
 
-void  xa_notebook_set_navigation_bar(XANotebook *, XANavigationBar *);
-void  xa_notebook_add_archive(XANotebook *, LXAArchive *, LXAArchiveSupport *);
-void xa_notebook_page_set_archive(XANotebook *, LXAArchive *, LXAArchiveSupport *, gint n);
-void  xa_notebook_set_icon_theme(XANotebook *, GtkIconTheme *);
-void  xa_notebook_get_active_archive(XANotebook *, LXAArchive **, LXAArchiveSupport **);
+void        xa_notebook_set_navigation_bar(XANotebook *, XANavigationBar *);
+void        xa_notebook_add_archive(XANotebook *, LXAArchive *, LXAArchiveSupport *);
+void        xa_notebook_page_set_archive(XANotebook *, LXAArchive *, LXAArchiveSupport *, gint n);
+LXAArchive* xa_notebook_page_get_archive(XANotebook *, gint n);
+void        xa_notebook_set_icon_theme(XANotebook *, GtkIconTheme *);
+void        xa_notebook_get_active_archive(XANotebook *, LXAArchive **, LXAArchiveSupport **);
 GtkWidget * xa_notebook_get_active_child(XANotebook *notebook);
 gboolean    xa_notebook_get_multi_tab(XANotebook *notebook);
 

Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-11-10 22:00:24 UTC (rev 23815)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-11-10 23:04:11 UTC (rev 23816)
@@ -200,15 +200,23 @@
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->up_button), 1);
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->home_button), 1);
 	}
-	if(xa_archive_store_has_future(XA_NAVIGATION_BAR(tool_bar)->store))
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 1);
-	else
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
+	if(XA_NAVIGATION_BAR(tool_bar)->store)
+	{
+		if(xa_archive_store_has_future(XA_NAVIGATION_BAR(tool_bar)->store))
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 1);
+		else
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
 
-	if(xa_archive_store_has_history(XA_NAVIGATION_BAR(tool_bar)->store))
-		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 1);
+		if(xa_archive_store_has_history(XA_NAVIGATION_BAR(tool_bar)->store))
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 1);
+		else
+			gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
+	}
 	else
+	{
 		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->back_button), 0);
+		gtk_widget_set_sensitive(GTK_WIDGET(tool_bar->forward_button), 0);
+	}
 }
 
 static void



More information about the Xfce4-commits mailing list