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

Stephan Arts stephan at xfce.org
Mon Oct 30 00:43:32 CET 2006


Author: stephan
Date: 2006-10-29 23:43:28 +0000 (Sun, 29 Oct 2006)
New Revision: 23552

Modified:
   xarchiver/branches/xarchiver-psybsd/libxarchiver/Makefile.am
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
   xarchiver/branches/xarchiver-psybsd/src/archive_store.c
   xarchiver/branches/xarchiver-psybsd/src/archive_store.h
   xarchiver/branches/xarchiver-psybsd/src/main.c
   xarchiver/branches/xarchiver-psybsd/src/main_window.c
   xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
   xarchiver/branches/xarchiver-psybsd/src/settings.c
   xarchiver/branches/xarchiver-psybsd/src/settings.h
   xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
Log:
Fixed stuff
Added config options
Broke PathBar



Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/Makefile.am
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/Makefile.am	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/Makefile.am	2006-10-29 23:43:28 UTC (rev 23552)
@@ -7,6 +7,7 @@
 	slist.c slist.h \
 	archive.c archive.h \
 	archive-support.c archive-support.h \
+	archive-support-zip.c archive-support-zip.h \
 	archive-support-gnu-tar.c archive-support-gnu-tar.h
 
 libxarchiver_a_CFLAGS = \

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -243,7 +243,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime)))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -254,21 +254,21 @@
 		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_ADD);
 		if(!g_file_test(archive->path, G_FILE_TEST_EXISTS))
 		{
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tar"))
+			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);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+			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);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+			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);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+			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);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+			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);
 			if(command)
 				lxa_execute(command, archive, NULL, NULL, NULL, NULL);
 		} else
 		{
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tar"))
+			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, " -rf ", archive->path, " ", archive->files, NULL);
 				lxa_execute(command, archive, NULL, NULL, NULL, NULL);
@@ -278,13 +278,13 @@
 			archive->tmp_file = g_strconcat(lxa_tmp_dir, "/xarchiver-XXXXXX" , NULL);
 			g_mkstemp(archive->tmp_file);
 			g_unlink(archive->tmp_file);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tarz"))
 				command = g_strconcat("uncompress -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-compressed-tar"))
 				command = g_strconcat("gunzip -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-bzip-compressed-tar"))
 				command = g_strconcat("bunzip2 -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tzo"))
 				command = g_strconcat("lzop -dc ", archive->path, NULL);
 			lxa_execute(command, archive, lxa_archive_support_gnu_tar_decompress_watch, NULL, lxa_archive_support_gnu_tar_decompress_parse_output, NULL);
 			LXA_FREE(command);
@@ -303,7 +303,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime)))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -313,7 +313,7 @@
 		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_EXTRACT);
 		if(g_file_test(archive->path, G_FILE_TEST_EXISTS))
 		{
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tar"))
+			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, " -xf ", archive->path,
 						" -C \"", dest_path, "\"", 
@@ -321,7 +321,7 @@
 						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
 						archive->files, NULL);
 			}
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+			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, "\"", 
@@ -329,7 +329,7 @@
 						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
 						archive->files, NULL);
 			}
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+			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, "\"", 
@@ -337,7 +337,7 @@
 						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
 						archive->files, NULL);
 			}
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+			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, "\"", 
@@ -345,7 +345,7 @@
 						LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->_extr_touch?" --touch ":" ",
 						archive->files, NULL);
 			}
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+			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, "\"", 
@@ -374,7 +374,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime)))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -385,7 +385,7 @@
 		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_REMOVE);
 		if(g_file_test(archive->path, G_FILE_TEST_EXISTS))
 		{
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tar"))
+			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, " -f ", archive->path, " --delete ", archive->files, NULL);
 				lxa_execute(command, archive, NULL, NULL, NULL, NULL);
@@ -395,13 +395,13 @@
 			archive->tmp_file = g_strconcat(lxa_tmp_dir, "/xarchiver-XXXXXX" , NULL);
 			g_mkstemp(archive->tmp_file);
 			g_unlink(archive->tmp_file);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tarz"))
 				command = g_strconcat("uncompress -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-compressed-tar"))
 				command = g_strconcat("gunzip -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-bzip-compressed-tar"))
 				command = g_strconcat("bunzip2 -c ", archive->path, NULL);
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+			if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tzo"))
 				command = g_strconcat("lzop -dc ", archive->path, NULL);
 			lxa_execute(command, archive, lxa_archive_support_gnu_tar_decompress_watch, NULL, lxa_archive_support_gnu_tar_decompress_parse_output, NULL);
 			LXA_FREE(command);
@@ -422,7 +422,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime)))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -449,7 +449,7 @@
 			lxa_archive_set_property_type(archive, i, G_TYPE_STRING, _("Time"));
 			i++;
 		}
-		if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+		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 -tvf " , archive->path, NULL);
 		else
 			command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -tvf " , archive->path, NULL);
@@ -473,13 +473,13 @@
 	archive->child_pid = 0;
 	gchar *command = NULL;
 
-	if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+	if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tarz"))
 		command = g_strconcat("compress -c ", archive->tmp_file, NULL);
-	if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+	if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-compressed-tar"))
 		command = g_strconcat("gzip -c ", archive->tmp_file, NULL);
-	if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+	if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-bzip-compressed-tar"))
 		command = g_strconcat("bzip2 -c ", archive->tmp_file, NULL);
-	if(!g_strcasecmp((gchar *)archive->mime, "application/x-tzo"))
+	if(!g_strcasecmp(lxa_mime_info_get_name(archive->mime_info), "application/x-tzo"))
 		command = g_strconcat("lzop -c ", archive->path, NULL);
 	lxa_execute(command, archive, NULL, NULL, lxa_archive_support_gnu_tar_compress_parse_output, NULL);
 }

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -178,10 +178,13 @@
 	LXAArchiveSupportZip *support;
 
 	support = g_object_new(LXA_TYPE_ARCHIVE_SUPPORT_ZIP,
+												 "view-length", TRUE,
 	                       "view-size", TRUE,
 												 "view-time", TRUE,
 												 "view-date", TRUE,
 												 "view-ratio", TRUE,
+												 "view-crc32", TRUE,
+												 "view-method", TRUE,
 												 NULL);
 	
 	return LXA_ARCHIVE_SUPPORT(support);
@@ -196,7 +199,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -204,8 +207,8 @@
 	{
 		gchar *command = NULL;
 		gchar *files = lxa_concat_filenames(filenames);
-		if(!g_strcasecmp((gchar *)archive->mime, "application/x-zip") || 
-		   !g_strcasecmp((gchar *)archive->mime, "application/zip"))
+		if(!g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/x-zip") || 
+		   !g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/zip"))
 		{
 			command = g_strconcat("zip -r ", archive->path, " ", files, NULL);
 			lxa_execute(command, archive, NULL, NULL, NULL, NULL);
@@ -223,7 +226,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -233,8 +236,8 @@
 		gchar *files = lxa_concat_filenames(filenames);
 		if(g_file_test(archive->path, G_FILE_TEST_EXISTS))
 		{
-			if(!g_strcasecmp((gchar *)archive->mime, "application/x-zip") || 
-		  	 !g_strcasecmp((gchar *)archive->mime, "application/zip"))
+			if(!g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/x-zip") || 
+		     !g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/zip"))
 			{
 				command = g_strconcat("unzip -o ", archive->path, " -d ", dest_path, " ", files, NULL);
 				g_debug("Extracting archive '%s' to '%s'", archive->path, dest_path);
@@ -255,7 +258,7 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
@@ -263,8 +266,8 @@
 	{
 		gchar *command = NULL;
 		gchar *files = lxa_concat_filenames(filenames);
-		if(!g_strcasecmp((gchar *)archive->mime, "application/x-zip") || 
-		   !g_strcasecmp((gchar *)archive->mime, "application/zip"))
+		if(!g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/x-zip") || 
+		   !g_strcasecmp((gchar *)lxa_mime_info_get_name(archive->mime_info), "application/zip"))
 		{
 			command = g_strconcat("zip -d ", archive->path, " ", files, NULL);
 			lxa_execute(command, archive, NULL, NULL, NULL, NULL);
@@ -283,76 +286,41 @@
 		return -1;
 	}
 
-	if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
+	if(!lxa_archive_support_mime_supported(archive->support, lxa_mime_info_get_name(archive->mime_info)))
 	{
 		return 1;
 	}
 	else
 	{
-		archive->n_property = 0;
-		archive->entry_props_size = 0;
-
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_size) 
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_length) 
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_ratio) 
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_method) 
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_crc_32)
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_date) 
-			archive->n_property++;
-		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_time) 
-			archive->n_property++;
-
-		archive->property_types = LXA_NEW0(GType, archive->n_property);
-		archive->property_names = LXA_NEW0(gchar *, archive->n_property);
-
+		i = LXA_ARCHIVE_PROP_USER;
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_length) {
-			archive->property_types[i] = G_TYPE_UINT64;
-			archive->property_names[i] = g_strdup(_("Length"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_UINT64, _("Length"));
 			i++;
-			archive->entry_props_size += sizeof(guint64);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_method) {
-			archive->property_types[i] = G_TYPE_STRING;
-			archive->property_names[i] = g_strdup(_("Compression method"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_STRING,_("Method"));
 			i++;
-			archive->entry_props_size += sizeof(gchar *);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_size) {
-			archive->property_types[i] = G_TYPE_UINT64;
-			archive->property_names[i] = g_strdup(_("Size"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_UINT64, _("Size"));
 			i++;
-			archive->entry_props_size += sizeof(guint64);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_ratio) {
-			archive->property_types[i] = G_TYPE_STRING;
-			archive->property_names[i] = g_strdup("Ratio");
+			lxa_archive_set_property_type(archive, i, G_TYPE_STRING, _("Ratio"));
 			i++;
-			archive->entry_props_size += sizeof(gchar *);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_date) {
-			archive->property_types[i] = G_TYPE_STRING;
-			archive->property_names[i] = g_strdup(_("Date"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_STRING, _("Date"));
 			i++;
-			archive->entry_props_size += sizeof(gchar *);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_time) {
-			archive->property_types[i] = G_TYPE_STRING;
-			archive->property_names[i] = g_strdup(_("Time"));
+			lxa_archive_set_property_type(archive, i, G_TYPE_STRING, _("Time"));
 			i++;
-			archive->entry_props_size += sizeof(gchar *);
 		}
 		if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_crc_32) {
-			archive->property_types[i] = G_TYPE_STRING;
-			archive->property_names[i] = g_strdup("CRC-32");
+			lxa_archive_set_property_type(archive, i, G_TYPE_STRING, _("CRC-32"));
 			i++;
-			archive->entry_props_size += sizeof(gchar *);
 		}
-
 		gchar *command = g_strconcat("unzip -lv -qq " , archive->path, NULL);
 		lxa_execute(command, archive, NULL, NULL, lxa_archive_support_zip_refresh_parse_output, NULL);
 		LXA_FREE(command);
@@ -368,11 +336,12 @@
 	gchar *line	= NULL;
 	LXAEntry *entry;
 
-	gpointer props = NULL; 
-	gpointer props_iter = NULL;
+	guint64 size;
+	guint64 length;
+	gpointer props[8]; 
 	gint n = 0, a = 0, i = 0, o = 0;
 	gchar *temp_filename = NULL;
-	gchar *_size = NULL;
+	gint linesize = 0;
 
 	if(!LXA_IS_ARCHIVE(archive))
 		return FALSE;
@@ -388,92 +357,100 @@
 			if (line == NULL)
  				break; 
 			/* length, method , size, ratio, date, time, crc-32, filename*/
+			linesize = strlen(line);
 
-			props = LXA_MALLOC0(archive->entry_props_size);
-			props_iter = props;
-			for(n=0; n < strlen(line) && line[n] == ' '; n++);
+			for(n=0; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_length)
 			{
-				_size = g_strndup(&line[a], n-a);
-				(*((guint64 *)props_iter)) = g_ascii_strtoull( _size, NULL, 0);
-				LXA_FREE (_size);
-				props_iter += sizeof(guint64);
+				line[n]='\0';
+				length = g_ascii_strtoull(line + a, NULL, 0);
+				props[i] = &length;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_method)
 			{
-				(*(gchar **)props_iter) = g_strndup (&line[a], n-a);
-				props_iter += sizeof(gchar *);
+				line[n] = '\0';
+				props[i] = line + a;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_size)
 			{
-				_size = g_strndup(&line[a], n-a);
-				(*((guint64 *)props_iter)) = g_ascii_strtoull( _size, NULL, 0);
-				LXA_FREE (_size);
-				props_iter += sizeof(guint64);
+				line[n]='\0';
+				size = g_ascii_strtoull(line + a, NULL, 0);
+				props[i] = &size;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_ratio)
 			{
-				(*(gchar **)props_iter) = g_strndup (&line[a], n-a);
-				props_iter += sizeof(gchar *);
+				line[n] = '\0';
+				props[i] = line + a;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_date)
 			{
-				(*(gchar **)props_iter) = g_strndup (&line[a], n-a);
-				props_iter += sizeof(gchar *);
-
+				line[n] = '\0';
+				props[i] = line + a;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_time)
 			{
-				(*(gchar **)props_iter) = g_strndup (&line[a], n-a);
-				props_iter += sizeof(gchar *);
-
+				line[n] = '\0';
+				props[i] = line + a;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
+			for(; n < linesize && line[n] == ' '; n++);
 			a = n;
-			for(; n < strlen(line) && line[n] != ' '; n++);
+			for(; n < linesize && line[n] != ' '; n++);
 
 			if(LXA_ARCHIVE_SUPPORT_ZIP(archive->support)->_view_crc_32)
 			{
-				(*(gchar **)props_iter) = g_strndup (&line[a], n-a);
-				props_iter += sizeof(gchar *);
+				line[n] = '\0';
+				props[i] = line + a;
+				i++;
 			}
+			n++;
 
-			for(; n < strlen(line) && line[n] == ' '; n++);
-			temp_filename = g_strstrip(g_strndup(&line[n], strlen(line)-n-1)); 
+			for(; n < linesize && line[n] == ' '; n++);
+			temp_filename = g_strchomp(line+n); 
 
 			entry = lxa_archive_add_file(archive, temp_filename);
-			entry->props = props;
+			lxa_archive_iter_set_propsv(archive, entry, (gconstpointer*)props);
 			LXA_FREE(line);
-			LXA_FREE(temp_filename);
 		}
 	}
 	if(cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -209,13 +209,13 @@
 		archive->path = NULL;
 
 	if(!mime)
-		archive->mime = lxa_mime_get_mime_info_for_file(archive->path);
+		archive->mime_info = lxa_mime_get_mime_info_for_file(archive->path);
 	else
-		archive->mime = lxa_mime_get_mime_info(mime);
+		archive->mime_info = lxa_mime_get_mime_info(mime);
 #ifdef DEBUG	
-	g_debug("Mime-type: %s", lxa_mime_info_get_name(archive->mime));
+	g_debug("Mime-type: %s", lxa_mime_info_get_name(archive->mime_info));
 #endif
-	if(!lxa_get_support_for_mime(lxa_mime_info_get_name(archive->mime)))
+	if(!lxa_get_support_for_mime(lxa_mime_info_get_name(archive->mime_info)))
 	{
 		g_object_unref(archive);
 		archive = NULL;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-10-29 23:43:28 UTC (rev 23552)
@@ -68,7 +68,7 @@
 {
 	GObject parent;
 	gchar              *path;
-	LXAMimeInfo        *mime;
+	LXAMimeInfo        *mime_info;
 	guint               n_property;
 	GType              *property_types;
 	gchar             **property_names;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -41,9 +41,9 @@
 	lxa_mime_init();
 
 	lxa_register_support(lxa_archive_support_gnu_tar_new());
+	lxa_register_support(lxa_archive_support_zip_new());
 
 /*
-	lxa_register_support(lxa_archive_support_zip_new());
 	TODO: Implement right commands in unrar
 	lxa_register_support(lxa_archive_support_rar_new());
 	lxa_register_support(lxa_archive_support_unrar_new());

Modified: xarchiver/branches/xarchiver-psybsd/src/archive_store.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/archive_store.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/archive_store.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -668,8 +668,11 @@
 		return;
 
 	
-	if(sort_col_id == 0)
-		return;
+	if(store->props._show_icons)
+	{
+		if(sort_col_id == 0)
+			return;
+	}
 
 	store->sort_column = sort_col_id;
 	store->sort_order = order;
@@ -702,6 +705,7 @@
 xa_archive_entry_compare(XAArchiveStore *store, LXAArchiveIter *a, LXAArchiveIter *b)
 {
 	gint retval = 0;
+	gint column = 0;
 	gboolean cmp_a = 0;
 	gboolean cmp_b = 0;
 	GValue  *prop_a = g_new0(GValue, 1);
@@ -725,20 +729,27 @@
 	}
 
 	LXAArchive *archive = store->archive;
-	gint column = store->sort_column;
+	if(store->props._show_icons)
+		column = store->sort_column - 1;
+	else
+	{
+		column = store->sort_column;
+	}
 
-	lxa_archive_iter_get_prop_value(archive, a, column-1, prop_a);
-	lxa_archive_iter_get_prop_value(archive, b, column-1, prop_b);
+	lxa_archive_iter_get_prop_value(archive, a, column, prop_a);
+	lxa_archive_iter_get_prop_value(archive, b, column, prop_b);
 
-	switch(lxa_archive_get_property_type(archive, column-1))
+	switch(lxa_archive_get_property_type(archive, column))
 	{
 		case G_TYPE_STRING:
 			switch(store->props._sort_case_sensitive)
 			{
 				case 0: /* case insensitive */
 					retval = g_ascii_strcasecmp(g_value_get_string(prop_a), g_value_get_string(prop_b));
+					break;
 				case 1: /* case sensitive */
 					retval = strcmp(g_value_get_string(prop_a), g_value_get_string(prop_b));
+					break;
 			}
 			break;
 		case G_TYPE_UINT64:
@@ -854,7 +865,7 @@
 
 	tree_model = g_object_new(XA_TYPE_ARCHIVE_STORE, NULL);
 
-	//tree_model->props._show_icons = show_icons?1:0;
+	tree_model->props._show_icons = show_icons?1:0;
 	tree_model->props._show_up_dir = show_up_dir?1:0;
 	tree_model->icon_theme = icon_theme;
 
@@ -1261,10 +1272,58 @@
 	return store->props._show_icons;
 }
 
+gboolean
+xa_archive_store_get_sort_case_sensitive(XAArchiveStore *store)
+{
+	return store->props._sort_case_sensitive;
+}
+
+gboolean
+xa_archive_store_get_sort_folders_first(XAArchiveStore *store)
+{
+	return store->props._sort_folders_first;
+}
+
 void
 xa_archive_store_set_show_icons(XAArchiveStore *store, gboolean show)
 {
+	GtkSortType sort_order;
+	gint sort_col = 0;
 	gint prev_size = lxa_archive_iter_n_children(store->archive, (LXAEntry*)store->current_entry->data);
 	store->props._show_icons = show?1:0;
+	if(show)
+	{
+		xa_archive_store_get_sort_column_id(GTK_TREE_SORTABLE(store), &sort_col, &sort_order);
+		xa_archive_store_set_sort_column_id(GTK_TREE_SORTABLE(store), sort_col+1, sort_order);
+	}
+	else
+	{
+		xa_archive_store_get_sort_column_id(GTK_TREE_SORTABLE(store), &sort_col, &sort_order);
+		xa_archive_store_set_sort_column_id(GTK_TREE_SORTABLE(store), sort_col-1, sort_order);
+	}
 	xa_archive_store_refresh(store, prev_size);
 }
+
+void
+xa_archive_store_set_sort_case_sensitive(XAArchiveStore *store, gboolean sort)
+{
+	store->props._sort_case_sensitive= sort?1:0;
+
+	if(store->archive)
+	{
+		gint prev_size = lxa_archive_iter_n_children(store->archive, (LXAEntry*)store->current_entry->data);
+		xa_archive_store_refresh(store, prev_size);
+	}
+}
+
+void
+xa_archive_store_set_sort_folders_first(XAArchiveStore *store, gboolean sort)
+{
+	store->props._sort_folders_first = sort?1:0;
+
+	if(store->archive)
+	{
+		gint prev_size = lxa_archive_iter_n_children(store->archive, (LXAEntry*)store->current_entry->data);
+		xa_archive_store_refresh(store, prev_size);
+	}
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/archive_store.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/archive_store.h	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/archive_store.h	2006-10-29 23:43:28 UTC (rev 23552)
@@ -86,11 +86,15 @@
 xa_archive_store_set_pwd(XAArchiveStore *store, const gchar *path);
 gboolean
 xa_archive_store_set_pwd_silent(XAArchiveStore *store, const gchar *path);
-gboolean
-xa_archive_store_get_show_icons(XAArchiveStore *store);
 void
-xa_archive_store_set_show_icons(XAArchiveStore *store, gboolean show);
-void
 xa_archive_store_set_icon_theme(XAArchiveStore *store, GtkIconTheme *icon_theme);
 
+gboolean xa_archive_store_get_show_icons(XAArchiveStore *store);
+gboolean xa_archive_store_get_sort_case_sensitive(XAArchiveStore *store);
+gboolean xa_archive_store_get_sort_folders_first(XAArchiveStore *store);
+
+void xa_archive_store_set_show_icons(XAArchiveStore *, gboolean);
+void xa_archive_store_set_sort_case_sensitive(XAArchiveStore *, gboolean);
+void xa_archive_store_set_sort_folders_first(XAArchiveStore *, gboolean);
+
 #endif /* __XARCHIVER_ARCHIVE_STORE_H__ */

Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -155,7 +155,7 @@
 			{
 				g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL);
 				opened_archives++;
-				lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime));
+				lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
 				if(!extract_archive_path)
   			{
 					dialog = xa_extract_archive_dialog_new(lpSupport, lp_archive, FALSE);
@@ -232,7 +232,7 @@
 		{
 			files = g_slist_prepend(files, argv[i]);
 		}
-		lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime));
+		lpSupport = lxa_get_support_for_mime(lxa_mime_info_get_name(lp_archive->mime_info));
 		lxa_archive_support_add(lpSupport, lp_archive, files);
 	}
 

Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -117,7 +117,6 @@
 {
 	XAMainWindow *window = XA_MAIN_WINDOW(object);
 
-	xa_archive_store_set_contents(XA_ARCHIVE_STORE(window->treemodel), NULL);
 
 	xa_settings_set_group(window->settings, "Global");
 	if(!window->navigationbar)
@@ -140,8 +139,14 @@
 	{
 		xa_settings_write_entry(window->settings, "NavigationBar", "None");
 	}
+
+	xa_settings_write_bool_entry(window->settings, "ShowIcons", xa_archive_store_get_show_icons(XA_ARCHIVE_STORE(window->treemodel)));
+	xa_settings_write_bool_entry(window->settings, "SortCaseSensitive", xa_archive_store_get_sort_case_sensitive(XA_ARCHIVE_STORE(window->treemodel)));
+	xa_settings_write_bool_entry(window->settings, "SortFoldersFirst", xa_archive_store_get_sort_folders_first(XA_ARCHIVE_STORE(window->treemodel)));
+	xa_settings_save(window->settings);
+
 	gtk_widget_unref(GTK_WIDGET(window->navigationbar));
-	xa_settings_save(window->settings);
+	xa_archive_store_set_contents(XA_ARCHIVE_STORE(window->treemodel), NULL);
 }
 
 static void
@@ -155,6 +160,9 @@
 	GtkAccelGroup *accel_group = gtk_accel_group_new();
 	const gchar   *nav_bar;
 	gboolean up_dir = TRUE;
+	gboolean show_icons = TRUE;
+	gboolean sort_case = TRUE;
+	gboolean sort_folders = TRUE;
 
 	window->settings = xa_settings_new(NULL);
 
@@ -284,7 +292,7 @@
 	g_signal_connect(G_OBJECT(window->toolbar.tool_item_stop), "clicked", G_CALLBACK(cb_xa_main_stop_archive), window);
 
 	xa_settings_set_group(window->settings, "Global");
-	nav_bar = xa_settings_read_entry(window->settings, "NavigationBar", "PathBar");
+	nav_bar = xa_settings_read_entry(window->settings, "NavigationBar", "None");
 	window->navigationbar = NULL;
 
 #ifdef ENABLE_TOOLBAR
@@ -308,6 +316,10 @@
 		window->navigationbar = xa_navigation_bar_new(NULL);
 	}
 
+	show_icons = xa_settings_read_bool_entry(window->settings, "ShowIcons", TRUE);
+	sort_case = xa_settings_read_bool_entry(window->settings, "SortCaseSensitive", TRUE);
+	sort_folders = xa_settings_read_bool_entry(window->settings, "SortFoldersFirst", TRUE);
+
 	gtk_widget_ref(GTK_WIDGET(window->navigationbar));
 
 /* main view */
@@ -346,8 +358,11 @@
 	gtk_container_add(GTK_CONTAINER(window), main_vbox);
 
 	/* archive model */
-	window->treemodel = xa_archive_store_new(NULL, TRUE, up_dir, window->icon_theme);
+	window->treemodel = xa_archive_store_new(NULL, show_icons, up_dir, window->icon_theme);
 
+	xa_archive_store_set_sort_case_sensitive(XA_ARCHIVE_STORE(window->treemodel), sort_case);
+	xa_archive_store_set_sort_folders_first (XA_ARCHIVE_STORE(window->treemodel), sort_folders);
+
 	xa_archive_store_connect_treeview(XA_ARCHIVE_STORE(window->treemodel), GTK_TREE_VIEW(window->treeview));
 	gtk_tree_view_set_model(GTK_TREE_VIEW(window->treeview), GTK_TREE_MODEL(window->treemodel));
 
@@ -447,7 +462,7 @@
 		{
 			g_debug("Archive opened");
 			g_signal_connect(G_OBJECT(window->lp_xa_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), window);
-			lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime));
+			lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime_info));
 
 			gtk_widget_set_sensitive(GTK_WIDGET(window->menubar.menu_item_close), TRUE);
 			gtk_widget_set_sensitive(GTK_WIDGET(window->menubar.menu_item_new), TRUE);
@@ -530,17 +545,7 @@
 void
 cb_xa_main_add_to_archive(GtkWidget *widget, gpointer userdata)
 {
-	XAMainWindow *window = XA_MAIN_WINDOW(userdata);
-	if(xa_archive_store_get_show_icons(XA_ARCHIVE_STORE(window->treemodel)))
-	{
-		xa_archive_store_set_show_icons(XA_ARCHIVE_STORE(window->treemodel), FALSE);
-		xa_main_window_reset_columns(window);
-	}
-	else
-	{
-		xa_archive_store_set_show_icons(XA_ARCHIVE_STORE(window->treemodel), TRUE);
-		xa_main_window_reset_columns(window);
-	}
+/*	XAMainWindow *window = XA_MAIN_WINDOW(userdata);*/
 }
 
 void
@@ -557,7 +562,7 @@
 	GtkTreeIter iter;
 	GtkTreeSelection *selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW (window->treeview) );
 
-	lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime));
+	lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime_info));
 
 
 	dialog = xa_extract_archive_dialog_new(lp_support, window->lp_xa_archive, gtk_tree_selection_count_selected_rows (selection));
@@ -641,7 +646,7 @@
 	if(!lxa_open_archive(archive_path, &window->lp_xa_archive))
 	{
 		g_signal_connect(G_OBJECT(window->lp_xa_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), window);
-		lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime));
+		lp_support = lxa_get_support_for_mime(lxa_mime_info_get_name(window->lp_xa_archive->mime_info));
 
 		lxa_archive_support_refresh(lp_support, window->lp_xa_archive);
 		return 0;

Modified: xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/navigation_bar.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -34,6 +34,8 @@
 
 static void
 xa_navigation_bar_init(XANavigationBar *archive);
+static void
+xa_navigation_bar_finalize(GObject *object);
 
 static void
 cb_xa_navigation_bar_pwd_changed(XAArchiveStore *store, XANavigationBar *bar);
@@ -85,6 +87,7 @@
 
 	object_class->set_property = xa_navigation_bar_set_property;
 	object_class->get_property = xa_navigation_bar_get_property;
+	object_class->finalize     = xa_navigation_bar_finalize;
 
 	pspec = g_param_spec_uint("navigation_history",
 		"",
@@ -109,6 +112,16 @@
 	navigation_bar->history = NULL;
 }
 
+static void
+xa_navigation_bar_finalize(GObject *object)
+{
+	XANavigationBar *navigation_bar = XA_NAVIGATION_BAR(object);
+	if(navigation_bar->_cb_pwd_changed)
+		g_signal_handlers_disconnect_by_func(navigation_bar->store, navigation_bar->_cb_pwd_changed, navigation_bar);
+	if(navigation_bar->_cb_new_archive)
+		g_signal_handlers_disconnect_by_func(navigation_bar->store, navigation_bar->_cb_new_archive, navigation_bar);
+}
+
 void
 xa_navigation_bar_set_store(XANavigationBar *navigation_bar, XAArchiveStore *store)
 {

Modified: xarchiver/branches/xarchiver-psybsd/src/settings.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/settings.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/settings.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -122,6 +122,16 @@
 #endif /* HAVE_LIBXFCE4UTIL */
 }
 
+void
+xa_settings_write_bool_entry(XASettings *settings, const gchar *key, const gboolean value)
+{
+#ifdef HAVE_LIBXFCE4UTIL
+	xfce_rc_write_bool_entry(XFCE_RC(settings->xfce_rc), key, value);
+#else
+
+#endif /* HAVE_LIBXFCE4UTIL */
+}
+
 const gchar *
 xa_settings_read_entry(XASettings *settings, const gchar *key, const gchar *fallback)
 {
@@ -131,3 +141,13 @@
 	return g_strdup(fallback);
 #endif /* HAVE_LIBXFCE4UTIL */
 }
+
+gboolean
+xa_settings_read_bool_entry(XASettings *settings, const gchar *key, const gboolean fallback)
+{
+#ifdef HAVE_LIBXFCE4UTIL
+	return xfce_rc_read_bool_entry(XFCE_RC(settings->xfce_rc), key, fallback);
+#else
+	return fallback;
+#endif /* HAVE_LIBXFCE4UTIL */
+}

Modified: xarchiver/branches/xarchiver-psybsd/src/settings.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/settings.h	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/settings.h	2006-10-29 23:43:28 UTC (rev 23552)
@@ -62,7 +62,11 @@
 gboolean      xa_settings_save(XASettings *);
 
 const gchar  *xa_settings_read_entry(XASettings *settings, const gchar *key, const gchar *fallback);
+gboolean      xa_settings_read_bool_entry(XASettings *settings, const gchar *key, const gboolean fallback);
+
 void          xa_settings_write_entry(XASettings *settings, const gchar *key, const gchar *value);
+void          xa_settings_write_bool_entry(XASettings *settings, const gchar *key, const gboolean value);
+
 void          xa_settings_set_group(XASettings *settings, const gchar *group);
 
 G_END_DECLS

Modified: xarchiver/branches/xarchiver-psybsd/src/tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-10-29 22:59:52 UTC (rev 23551)
+++ xarchiver/branches/xarchiver-psybsd/src/tool_bar.c	2006-10-29 23:43:28 UTC (rev 23552)
@@ -49,6 +49,8 @@
 
 static void
 cb_xa_tool_bar_pwd_changed(XAArchiveStore *store, XAToolBar *bar);
+static void
+cb_xa_tool_bar_new_archive(XAArchiveStore *store, XAToolBar *bar);
 
 static void
 cb_xa_tool_bar_history_back(GtkWidget *button, XAToolBar *nav_bar);
@@ -112,6 +114,7 @@
 {
 	GtkToolItem *button = NULL;
 	XA_NAVIGATION_BAR(tool_bar)->_cb_pwd_changed = (GCallback)cb_xa_tool_bar_pwd_changed;
+	XA_NAVIGATION_BAR(tool_bar)->_cb_new_archive = (GCallback)cb_xa_tool_bar_new_archive;
 
 	GTK_WIDGET_SET_FLAGS(tool_bar, GTK_NO_WINDOW);
 	gtk_widget_set_redraw_on_allocate(GTK_WIDGET(tool_bar), FALSE);
@@ -302,6 +305,19 @@
 }
 
 static void
+cb_xa_tool_bar_new_archive(XAArchiveStore *store, XAToolBar *bar)
+{
+	g_return_if_fail(XA_IS_TOOL_BAR(bar));
+
+	xa_navigation_bar_clear_history(XA_NAVIGATION_BAR(bar));
+	gtk_widget_set_sensitive(GTK_WIDGET(bar->hbox), FALSE);
+	gtk_widget_set_sensitive(GTK_WIDGET(bar->up_button), FALSE);
+	gtk_widget_set_sensitive(GTK_WIDGET(bar->home_button), FALSE);
+	gtk_widget_set_sensitive(GTK_WIDGET(bar->forward_button), FALSE);
+	gtk_widget_set_sensitive(GTK_WIDGET(bar->back_button), FALSE);
+}
+
+static void
 cb_xa_tool_bar_history_back(GtkWidget *back_button, XAToolBar *tool_bar)
 {
 	xa_navigation_bar_history_back(XA_NAVIGATION_BAR(tool_bar));



More information about the Xfce4-commits mailing list