[Xfce4-commits] r22840 - in xarchiver/branches/xarchiver-psybsd: . libxarchiver po src
Stephan Arts
stephan at xfce.org
Sun Aug 20 22:03:26 UTC 2006
Author: stephan
Date: 2006-08-20 22:03:24 +0000 (Sun, 20 Aug 2006)
New Revision: 22840
Added:
xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
xarchiver/branches/xarchiver-psybsd/src/add_dialog.h
Modified:
xarchiver/branches/xarchiver-psybsd/TODO
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.h
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h
xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
xarchiver/branches/xarchiver-psybsd/po/nl.po
xarchiver/branches/xarchiver-psybsd/src/Makefile.am
xarchiver/branches/xarchiver-psybsd/src/extract_dialog.h
xarchiver/branches/xarchiver-psybsd/src/main.c
xarchiver/branches/xarchiver-psybsd/src/main_window.c
xarchiver/branches/xarchiver-psybsd/src/main_window.h
xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c
xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.h
xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c
Log:
Added extract options
Fixed .tar (.Z .gz and .bz2) add and remove (latter is untested)
Modified: xarchiver/branches/xarchiver-psybsd/TODO
===================================================================
--- xarchiver/branches/xarchiver-psybsd/TODO 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/TODO 2006-08-20 22:03:24 UTC (rev 22840)
@@ -26,6 +26,9 @@
(Can be replaced by an internal libmime)
+-+-+-+
+ Increase performance
++-+-+-+
+
Implement multi-threading (for libarchive support)
+-+-+-+
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -19,6 +19,7 @@
#define EXO_API_SUBJECT_TO_CHANGE
#include <glib.h>
+#include <glib/gstdio.h>
#include <glib-object.h>
#include <thunar-vfs/thunar-vfs.h>
@@ -29,11 +30,33 @@
#include "internals.h"
+enum
+{
+ LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE = 1,
+ LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_TOUCH,
+ LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP
+};
+
void
lxa_archive_support_gnu_tar_init(LXAArchiveSupportGnuTar *support);
void
lxa_archive_support_gnu_tar_class_init(LXAArchiveSupportGnuTarClass *supportclass);
+void
+lxa_archive_support_gnu_tar_compress_watch(GPid pid, gint status, gpointer data);
+void
+lxa_archive_support_gnu_tar_decompress_watch(GPid pid, gint status, gpointer data);
+
+gboolean
+lxa_archive_support_gnu_tar_compress_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data);
+gboolean
+lxa_archive_support_gnu_tar_decompress_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data);
+
+void
+lxa_archive_support_gnu_tar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+void
+lxa_archive_support_gnu_tar_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+
GType
lxa_archive_support_gnu_tar_get_type ()
{
@@ -90,10 +113,34 @@
void
lxa_archive_support_gnu_tar_class_init(LXAArchiveSupportGnuTarClass *supportclass)
{
- /* TODO
- * Implement properties.
- *
- */
+ GObjectClass *object_class = G_OBJECT_CLASS (supportclass);
+ GParamSpec *pspec = NULL;
+
+ object_class->set_property = lxa_archive_support_gnu_tar_set_property;
+ object_class->get_property = lxa_archive_support_gnu_tar_get_property;
+
+ pspec = g_param_spec_boolean("extract-overwrite",
+ _("Overwrite existing files"),
+ _("Overwrite existing files on extraction"),
+ FALSE,
+ G_PARAM_READWRITE);
+ 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",
+ 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",
+ 0,
+ 128,
+ 0,
+ G_PARAM_READWRITE);
+ g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP, pspec);
}
LXAArchiveSupport*
@@ -107,115 +154,327 @@
}
gint
-lxa_archive_support_gnu_tar_add(LXAArchiveSupport *support, LXAArchive *archive, GSList *filenames)
+lxa_archive_support_gnu_tar_add(LXAArchive *archive, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
{
g_critical("Support is not GNU TAR");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
else
{
gchar *command = NULL;
- gchar *files = lxa_concat_filenames(filenames);
- if(g_file_test(archive->path, G_FILE_TEST_EXISTS))
+ archive->files = lxa_concat_filenames(filenames);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -rf ", archive->path, " ", files, NULL);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -Zrf ", archive->path, " ", files, NULL);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -zrf ", archive->path, " ", files, NULL);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -jrf ", archive->path, " ", files, NULL);
+ command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -jcf ", 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -cf ", archive->path, " ", files, NULL);
+ {
+ 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);
+ g_free(command);
+ return 0;
+ }
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -Zcf ", archive->path, " ", files, NULL);
+ command = g_strconcat("uncompress -c ", archive->path, NULL);
if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -zcf ", archive->path, " ", files, NULL);
+ command = g_strconcat("gunzip -c ", archive->path, NULL);
if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -jcf ", archive->path, " ", files, NULL);
+ command = g_strconcat("bunzip -c ", archive->path, NULL);
+ lxa_execute(command, archive, lxa_archive_support_gnu_tar_decompress_watch, NULL, lxa_archive_support_gnu_tar_decompress_parse_output, NULL);
+ g_free(command);
}
- if(command)
- lxa_execute(command, archive, NULL, NULL, NULL, NULL);
}
return 0;
}
gint
-lxa_archive_support_gnu_tar_extract(LXAArchiveSupport *support, LXAArchive *archive, gchar *dest_path, GSList *filenames)
+lxa_archive_support_gnu_tar_extract(LXAArchive *archive, gchar *dest_path, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
{
g_critical("Support is not GNU TAR");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
else
{
gchar *command = NULL;
- gchar *files = lxa_concat_filenames(filenames);
+ archive->files = lxa_concat_filenames(filenames);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -xf ", archive->path, " -C ", dest_path, " ", files, NULL);
+ {
+ 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 ":" ",
+ archive->files, NULL);
+ }
if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -Zxf ", archive->path, " -C ", dest_path, " ", files, NULL);
+ {
+ 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 ":" ",
+ archive->files, NULL);
+ }
if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -zxf ", archive->path, " -C ", dest_path, " ", files, NULL);
+ {
+ 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 ":" ",
+ archive->files, NULL);
+ }
if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -jxf ", archive->path, " -C ", dest_path, " ", files, NULL);
+ {
+ 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 ":" ",
+ archive->files, NULL);
+ }
} else
return 1;
if(command)
+ {
lxa_execute(command, archive, NULL, NULL, NULL, NULL);
+ g_free(command);
+ }
}
return 0;
}
gint
-lxa_archive_support_gnu_tar_remove(LXAArchiveSupport *support, LXAArchive *archive, GSList *filenames)
+lxa_archive_support_gnu_tar_remove(LXAArchive *archive, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support))
{
g_critical("Support is not GNU TAR");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
else
{
gchar *command = NULL;
- gchar *files = lxa_concat_filenames(filenames);
+ archive->files = lxa_concat_filenames(filenames);
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -f ", archive->path, " --delete ", files, NULL);
+ {
+ 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);
+ g_free(command);
+ return 0;
+ }
+ 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"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -Zf ", archive->path, " --delete ", files, NULL);
+ command = g_strconcat("uncompress -c ", archive->path, NULL);
if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -zf ", archive->path, " --delete ", files, NULL);
+ command = g_strconcat("gunzip -c ", archive->path, NULL);
if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
- command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(support)->app_name, " -jf ", archive->path, " --delete ", files, NULL);
+ command = g_strconcat("bunzip -c ", archive->path, NULL);
+ lxa_execute(command, archive, lxa_archive_support_gnu_tar_decompress_watch, NULL, lxa_archive_support_gnu_tar_decompress_parse_output, NULL);
+ g_free(command);
} else
return 1;
- if(command)
- lxa_execute(command, archive, NULL, NULL, NULL, NULL);
}
return 0;
}
+
+void
+lxa_archive_support_gnu_tar_decompress_watch(GPid pid, gint status, gpointer data)
+{
+ LXAArchive *archive = data;
+ archive->child_pid = 0;
+
+}
+
+void
+lxa_archive_support_gnu_tar_compress_watch(GPid pid, gint status, gpointer data)
+{
+ LXAArchive *archive = data;
+ archive->child_pid = 0;
+ gchar *command = NULL;
+
+ if(!g_strcasecmp((gchar *)archive->mime, "application/x-tarz"))
+ command = g_strconcat("compress -c ", archive->tmp_file, NULL);
+ if(!g_strcasecmp((gchar *)archive->mime, "application/x-compressed-tar"))
+ command = g_strconcat("gzip -c ", archive->tmp_file, NULL);
+ if(!g_strcasecmp((gchar *)archive->mime, "application/x-bzip-compressed-tar"))
+ command = g_strconcat("bzip -c ", archive->tmp_file, NULL);
+ lxa_execute(command, archive, NULL, NULL, lxa_archive_support_gnu_tar_compress_parse_output, NULL);
+}
+
+gboolean
+lxa_archive_support_gnu_tar_decompress_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data)
+{
+ FILE *out_file = NULL;
+ LXAArchive *archive = data;
+ gchar *buf = g_new0(gchar, 1024);
+ guint read = 0;
+ GError *error = NULL;
+ gchar *command = NULL;
+
+ if(cond & (G_IO_PRI | G_IO_IN))
+ {
+ out_file = fopen(archive->tmp_file, "ab");
+ if(!out_file)
+ g_critical("Could not open file");
+
+ while(g_io_channel_read_chars(ioc, buf, 1024, &read, &error) == G_IO_STATUS_NORMAL)
+ {
+ if(read)
+ {
+ fwrite(buf, 1, read, out_file);
+ }
+ read = 0;
+ }
+ fclose(out_file);
+ }
+ g_free(buf);
+ if(cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )
+ {
+#ifdef DEBUG
+ g_debug("shutting down ioc");
+#endif
+ g_io_channel_shutdown ( ioc,TRUE,NULL );
+ g_io_channel_unref (ioc);
+
+ if(!(cond & G_IO_ERR))
+ {
+ switch(archive->status)
+ {
+ case(LXA_ARCHIVESTATUS_ADD):
+ g_unlink(archive->path);
+ command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -rf ", archive->tmp_file, " ", archive->files, NULL);
+ lxa_execute(command, archive, lxa_archive_support_gnu_tar_compress_watch, NULL, NULL, NULL);
+ g_free(command);
+ break;
+ case(LXA_ARCHIVESTATUS_REMOVE):
+ g_unlink(archive->path);
+ command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " -f ", archive->tmp_file, " --delete ", archive->files, NULL);
+ lxa_execute(command, archive, lxa_archive_support_gnu_tar_compress_watch, NULL, NULL, NULL);
+ g_free(command);
+ break;
+ default:
+ break;
+ }
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+gboolean
+lxa_archive_support_gnu_tar_compress_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data)
+{
+ FILE *out_file = NULL;
+ LXAArchive *archive = data;
+ gchar *buf = g_new0(gchar, 1024);
+ guint read = 0;
+ GError *error = NULL;
+
+ if(cond & (G_IO_PRI | G_IO_IN))
+ {
+ out_file = fopen(archive->path, "ab");
+ if(!out_file)
+ g_critical("Could not open file");
+
+ while(g_io_channel_read_chars(ioc, buf, 1024, &read, &error) == G_IO_STATUS_NORMAL)
+ {
+ if(read)
+ {
+ fwrite(buf, 1, read, out_file);
+ }
+ read = 0;
+ }
+ fclose(out_file);
+ }
+ g_free(buf);
+ if(cond & (G_IO_ERR | G_IO_HUP | G_IO_NVAL) )
+ {
+#ifdef DEBUG
+ g_debug("shutting down ioc");
+#endif
+ g_io_channel_shutdown ( ioc,TRUE,NULL );
+ g_io_channel_unref (ioc);
+ if(archive->tmp_file)
+ g_unlink(archive->tmp_file);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void
+lxa_archive_support_gnu_tar_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ switch(prop_id)
+ {
+ 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_STRIP:
+ LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_strip = g_value_get_uint(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+ break;
+ }
+}
+
+void
+lxa_archive_support_gnu_tar_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ switch(prop_id)
+ {
+ case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_OVERWRITE:
+ g_value_set_boolean(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_overwrite);
+ break;
+ case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_TOUCH:
+ g_value_set_boolean(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_touch);
+ break;
+ case LXA_ARCHIVE_SUPPORT_GNU_TAR_EXTRACT_STRIP:
+ g_value_set_uint(value, LXA_ARCHIVE_SUPPORT_GNU_TAR(object)->_extr_strip);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+ break;
+ }
+}
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -47,6 +47,9 @@
{
LXAArchiveSupport parent;
gchar *app_name;
+ gboolean _extr_overwrite;
+ gboolean _extr_touch;
+ guint _extr_strip;
};
typedef struct _LXAArchiveSupportGnuTarClass LXAArchiveSupportGnuTarClass;
@@ -59,9 +62,9 @@
GType lxa_archive_support_gnu_tar_get_type(void);
LXAArchiveSupport * lxa_archive_support_gnu_tar_new();
-gint lxa_archive_support_gnu_tar_add(LXAArchiveSupport *, LXAArchive *, GSList *);
-gint lxa_archive_support_gnu_tar_extract(LXAArchiveSupport *, LXAArchive *, gchar *, GSList *);
-gint lxa_archive_support_gnu_tar_remove(LXAArchiveSupport *, LXAArchive *, GSList *);
+gint lxa_archive_support_gnu_tar_add(LXAArchive *, GSList *);
+gint lxa_archive_support_gnu_tar_extract(LXAArchive *, gchar *, GSList *);
+gint lxa_archive_support_gnu_tar_remove(LXAArchive *, GSList *);
G_END_DECLS
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -28,11 +28,25 @@
#include "internals.h"
+enum
+{
+ LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_OVERWRITE = 1,
+ LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_FRESHEN_EXISTING,
+ LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_UPDATE_EXISTING,
+ LXA_ARCHIVE_SUPPORT_ZIP_ADD_COMPRESSION_LEVEL,
+ LXA_ARCHIVE_SUPPORT_ZIP_PASSWORD,
+};
+
void
lxa_archive_support_zip_init(LXAArchiveSupportZip *support);
void
lxa_archive_support_zip_class_init(LXAArchiveSupportZipClass *supportclass);
+void
+lxa_archive_support_zip_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
+void
+lxa_archive_support_zip_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
+
GType
lxa_archive_support_zip_get_type ()
{
@@ -75,10 +89,18 @@
void
lxa_archive_support_zip_class_init(LXAArchiveSupportZipClass *supportclass)
{
- /*
- GObjectClass *gobject_class = G_OBJECT_CLASS (supportclass);
- LXAArchiveSupportZipClass *klass = LXA_ARCHIVE_SUPPORT_ZIP_CLASS (supportclass);
- */
+ GObjectClass *object_class = G_OBJECT_CLASS (supportclass);
+ GParamSpec *pspec = NULL;
+
+ object_class->set_property = lxa_archive_support_zip_set_property;
+ object_class->get_property = lxa_archive_support_zip_get_property;
+
+ pspec = g_param_spec_boolean("extract-overwrite",
+ _("Overwrite existing files"),
+ _("Overwrite existing files on extraction"),
+ FALSE,
+ G_PARAM_READWRITE);
+ g_object_class_install_property(object_class, LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_OVERWRITE, pspec);
}
LXAArchiveSupport*
@@ -92,15 +114,15 @@
}
gint
-lxa_archive_support_zip_add(LXAArchiveSupport *support, LXAArchive *archive, GSList *filenames)
+lxa_archive_support_zip_add(LXAArchive *archive, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(archive->support))
{
g_critical("Support is not zip");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
@@ -119,15 +141,15 @@
}
gint
-lxa_archive_support_zip_extract(LXAArchiveSupport *support, LXAArchive *archive, gchar *dest_path, GSList *filenames)
+lxa_archive_support_zip_extract(LXAArchive *archive, gchar *dest_path, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(archive->support))
{
g_critical("Support is not Zip");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
@@ -151,15 +173,15 @@
}
gint
-lxa_archive_support_zip_remove(LXAArchiveSupport *support, LXAArchive *archive, GSList *filenames)
+lxa_archive_support_zip_remove(LXAArchive *archive, GSList *filenames)
{
- if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(support))
+ if(!LXA_IS_ARCHIVE_SUPPORT_ZIP(archive->support))
{
g_critical("Support is not zip");
return -1;
}
- if(!lxa_archive_support_mime_supported(support, archive->mime))
+ if(!lxa_archive_support_mime_supported(archive->support, archive->mime))
{
return 1;
}
@@ -176,3 +198,31 @@
}
return 0;
}
+
+void
+lxa_archive_support_zip_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
+{
+ switch(prop_id)
+ {
+ case LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_OVERWRITE:
+ g_value_set_boolean(value, LXA_ARCHIVE_SUPPORT_ZIP(object)->_extr_overwrite);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+ break;
+ }
+}
+
+void
+lxa_archive_support_zip_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
+{
+ switch(prop_id)
+ {
+ case LXA_ARCHIVE_SUPPORT_ZIP_EXTRACT_OVERWRITE:
+ LXA_ARCHIVE_SUPPORT_ZIP(object)->_extr_overwrite = g_value_get_boolean(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,prop_id,pspec);
+ break;
+ }
+}
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-zip.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -46,6 +46,7 @@
struct _LXAArchiveSupportZip
{
LXAArchiveSupport parent;
+ gboolean _extr_overwrite;
};
typedef struct _LXAArchiveSupportZipClass LXAArchiveSupportZipClass;
@@ -58,9 +59,9 @@
GType lxa_archive_support_zip_get_type(void);
LXAArchiveSupport * lxa_archive_support_zip_new();
-gint lxa_archive_support_zip_add(LXAArchiveSupport *, LXAArchive *, GSList *);
-gint lxa_archive_support_zip_extract(LXAArchiveSupport *, LXAArchive *, gchar *, GSList *);
-gint lxa_archive_support_zip_remove(LXAArchiveSupport *, LXAArchive *, GSList *);
+gint lxa_archive_support_zip_add(LXAArchive *, GSList *);
+gint lxa_archive_support_zip_extract(LXAArchive *, gchar *, GSList *);
+gint lxa_archive_support_zip_remove(LXAArchive *, GSList *);
G_END_DECLS
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -181,7 +181,8 @@
if(support->add)
{
lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_ADD);
- return support->add(support, archive, files);
+ archive->support = support;
+ return support->add(archive, files);
}
else
g_critical("ADD NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
@@ -194,7 +195,8 @@
if(support->extract)
{
lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_EXTRACT);
- return support->extract(support, archive, dest_path, files);
+ archive->support = support;
+ return support->extract(archive, dest_path, files);
}
else
g_critical("EXTRACT NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
@@ -207,7 +209,8 @@
if(support->remove)
{
lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_REMOVE);
- return support->remove(support, archive, files);
+ archive->support = support;
+ return support->remove(archive, files);
}
else
g_critical("REMOVE NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -57,9 +57,9 @@
*
* should be called instead.
*/
- gint (*add)(LXAArchiveSupport *support, LXAArchive *archive, GSList *files);
- gint (*extract)(LXAArchiveSupport *support, LXAArchive *archive, gchar *dest_path, GSList *files);
- gint (*remove)(LXAArchiveSupport *support, LXAArchive *archive, GSList *files);
+ gint (*add)(LXAArchive *archive, GSList *files);
+ gint (*extract)(LXAArchive *archive, gchar *dest_path, GSList *files);
+ gint (*remove)(LXAArchive *archive, GSList *files);
};
typedef struct _LXAArchiveSupportClass LXAArchiveSupportClass;
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -62,6 +62,9 @@
LXAArchiveStatus status;
LXAArchiveStatus old_status;
GPid child_pid;
+ gpointer support;
+ gchar *tmp_file;
+ gchar *files;
};
typedef struct _LXAArchiveClass LXAArchiveClass;
Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -34,6 +34,8 @@
LXAArchive *archive = data;
archive->child_pid = 0;
lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_IDLE);
+ if(archive->files)
+ g_free(archive->files);
}
gint
Modified: xarchiver/branches/xarchiver-psybsd/po/nl.po
===================================================================
--- xarchiver/branches/xarchiver-psybsd/po/nl.po 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/po/nl.po 2006-08-20 22:03:24 UTC (rev 22840)
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: xarchiver 0.3.9psybsd\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-08-19 01:15+0200\n"
+"POT-Creation-Date: 2006-08-20 23:45+0200\n"
"PO-Revision-Date: 2006-07-20 16:36+0200\n"
"Last-Translator: Stephan Arts <psybsd at gmail.com>\n"
"Language-Team: Dutch <vertaling at vrijschrift.org>\n"
@@ -16,31 +16,64 @@
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: ../src/main.c:49
+#: ../libxarchiver/archive-support-gnu-tar.c:123
+#: ../libxarchiver/archive-support-zip.c:100
+msgid "Overwrite existing files"
+msgstr "Bestaande bestanden overschrijven"
+
+#: ../libxarchiver/archive-support-gnu-tar.c:124
+#: ../libxarchiver/archive-support-zip.c:101
+msgid "Overwrite existing files on extraction"
+msgstr "Bestaande bestanden overschrijven tijdens uitpakken"
+
+#: ../src/main.c:47
msgid "[destination path]"
msgstr "[bestemmings map]"
-#: ../src/main.c:57
+#: ../src/main.c:55
msgid "[archive path] [file1] [file2] ... [fileN]"
msgstr "[archief map] [bestand1] [bestand2] ... [bestandN]"
-#: ../src/main.c:61
+#: ../src/main.c:59
msgid "[file1] [file2] ... [fileN]"
msgstr "[bestand1] [bestand2] ... [bestandN]"
-#: ../src/main.c:106
+#: ../src/main.c:62
+msgid "Version information"
+msgstr "Versie informatie"
+
+#: ../src/main.c:108
msgid "[archive name]"
msgstr "[archief naam]"
-#: ../src/main.c:159
+#: ../src/main.c:112
+#, c-format
+msgid ""
+"%s: %s\n"
+"Try xarchiver --help to see a full list of available command line options.\n"
+msgstr ""
+"%s: %s\n"
+"Probeer xarchiver --help om een volledige lijst te zien met beschikbare "
+"opties.\n"
+
+#: ../src/main.c:175
msgid "Could not create archive, MIME-type unsupported"
msgstr "Kan archief niet maken, MIME-type wordt niet ondersteund"
+#. Could not open archive (mime type not supported or file did not exsit)
+#: ../src/main.c:190
+#, fuzzy
+msgid "Could not open archive, MIME-type unsupported or file did not exist"
+msgstr ""
+"Kan archief niet openen, MIME-type wordt niet ondersteund of bestand bestaat "
+"niet"
+
#: ../src/new_dialog.c:85
msgid "Create new archive"
msgstr "Maak nieuw archief"
-#: ../src/extract_dialog.c:78
+#: ../src/extract_dialog.c:78 ../src/main_window_menu_bar.c:117
+#: ../src/main_window_tool_bar.c:87
msgid "Extract"
msgstr "Uitpakken"
@@ -48,11 +81,22 @@
msgid "Extract archive"
msgstr "Archief uitpakken"
-#~ msgid "_Archive"
-#~ msgstr "_Archief"
+#: ../src/main_window_menu_bar.c:75
+msgid "_Archive"
+msgstr "_Archief"
-#~ msgid "A_ction"
-#~ msgstr "A_ctie"
+#: ../src/main_window_menu_bar.c:76
+msgid "A_ction"
+msgstr "A_ctie"
-#~ msgid "_Help"
-#~ msgstr "_Help"
+#: ../src/main_window_menu_bar.c:77
+msgid "_Help"
+msgstr "_Help"
+
+#: ../src/main_window_menu_bar.c:112 ../src/main_window_tool_bar.c:84
+msgid "Add"
+msgstr "Toevoegen"
+
+#: ../src/main_window_tool_bar.c:90
+msgid "Delete"
+msgstr "Verwijderen"
Modified: xarchiver/branches/xarchiver-psybsd/src/Makefile.am
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/Makefile.am 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/Makefile.am 2006-08-20 22:03:24 UTC (rev 22840)
@@ -5,7 +5,9 @@
main_window.c main_window.h \
main_window_menu_bar.c main_window_menu_bar.h \
main_window_tool_bar.c main_window_tool_bar.h \
+ main_window_status_bar.c main_window_status_bar.h \
new_dialog.c new_dialog.h \
+ add_dialog.c add_dialog.h \
extract_dialog.c extract_dialog.h
xarchiver_CFLAGS = \
Added: xarchiver/branches/xarchiver-psybsd/src/add_dialog.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/add_dialog.c (rev 0)
+++ xarchiver/branches/xarchiver-psybsd/src/add_dialog.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2006 Stephan Arts <psybsd at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <libxarchiver/libxarchiver.h>
+#include "add_dialog.h"
+
+static void
+xa_add_dialog_class_init(XAAddDialogClass *archive_class);
+
+static void
+xa_add_dialog_init(XAAddDialog *archive);
+
+GType
+xa_add_dialog_get_type ()
+{
+ static GType xa_add_dialog_type = 0;
+
+ if (!xa_add_dialog_type)
+ {
+ static const GTypeInfo xa_add_dialog_info =
+ {
+ sizeof (XAAddDialogClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) xa_add_dialog_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL,
+ sizeof (XAAddDialog),
+ 0,
+ (GInstanceInitFunc) xa_add_dialog_init,
+ NULL
+ };
+
+ xa_add_dialog_type = g_type_register_static (GTK_TYPE_DIALOG, "XAAddDialog", &xa_add_dialog_info, 0);
+ }
+ return xa_add_dialog_type;
+}
+
+static void
+xa_add_dialog_class_init(XAAddDialogClass *dialog_class)
+{
+}
+
+static void
+xa_add_dialog_init(XAAddDialog *dialog)
+{
+/*
+ GtkWidget *hbox = gtk_hbox_new(FALSE, 10);
+ gtk_box_pack_start (GTK_BOX (hbox),gtk_label_new (_("Archive type:")),FALSE, FALSE, 0);
+
+ gtk_widget_show_all(hbox);
+ gtk_box_pack_end(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, TRUE, 0);
+*/
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_ADD, GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
+}
+
+GtkWidget *
+xa_add_dialog_new()
+{
+ GtkWidget *dialog;
+
+ dialog = g_object_new(xa_add_dialog_get_type(),
+ "title", _("Add file(s) to archive"),
+ NULL);
+
+ return dialog;
+}
Added: xarchiver/branches/xarchiver-psybsd/src/add_dialog.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/add_dialog.h (rev 0)
+++ xarchiver/branches/xarchiver-psybsd/src/add_dialog.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Stephan Arts <psybsd at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XARCHIVER_ADD_DIALOG_H__
+#define __XARCHIVER_ADD_DIALOG_H__
+G_BEGIN_DECLS
+
+#define XA_ADD_DIALOG(obj) ( \
+ G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ xa_add_dialog_get_type(), \
+ XAAddDialog))
+
+#define XA_IS_ADD_DIALOG(obj) ( \
+ G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ xa_add_dialog_get_type()))
+
+#define XA_ADD_DIALOG_CLASS(class) ( \
+ G_TYPE_CHECK_CLASS_CAST ((class), \
+ xa_add_dialog_get_type(), \
+ XAAddDialogClass))
+
+#define XA_IS_ADD_DIALOG_CLASS(class) ( \
+ G_TYPE_CHECK_CLASS_TYPE ((class), \
+ xa_add_dialog_get_type()))
+
+typedef struct _XAAddDialog XAAddDialog;
+
+struct _XAAddDialog
+{
+ GtkDialog parent;
+};
+
+typedef struct _XAAddDialogClass XAAddDialogClass;
+
+struct _XAAddDialogClass
+{
+ GtkDialogClass parent;
+};
+
+GtkWidget *xa_add_dialog_new();
+
+G_END_DECLS
+#endif /* __XARCHIVER_ADD_DIALOG_H__ */
Modified: xarchiver/branches/xarchiver-psybsd/src/extract_dialog.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/extract_dialog.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/extract_dialog.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -50,7 +50,7 @@
struct _XAExtractArchiveDialogClass
{
- GtkFileChooserDialog parent_class;
+ GtkFileChooserDialogClass parent_class;
};
GtkWidget *xa_extract_archive_dialog_new();
Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -23,21 +23,19 @@
#include <gtk/gtk.h>
#include "new_dialog.h"
+#include "add_dialog.h"
#include "extract_dialog.h"
#include "main.h"
+#include "main_window.h"
-gboolean new_archive = FALSE;
+gboolean version = FALSE;
gboolean extract_archive = FALSE;
gchar *extract_archive_path = NULL;
-gboolean add_archive = FALSE;
-
+gboolean new_archive = FALSE;
gchar *add_archive_path = NULL;
-gchar **_argv;
-gint _argc;
-
gpointer command;
gint opened_archives = 0;
@@ -60,6 +58,10 @@
NULL,
N_("[file1] [file2] ... [fileN]")
},
+ { "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version,
+ N_("Version information"),
+ NULL
+ },
{ NULL }
};
@@ -103,12 +105,26 @@
g_thread_init(NULL);
- gtk_init_with_args(&argc, &argv, _("[archive name]"), entries, PACKAGE, &cli_error);
+ if(!gtk_init_with_args(&argc, &argv, _("[archive name]"), entries, PACKAGE, &cli_error))
+ {
+ if ( cli_error != NULL )
+ {
+ g_print (_("%s: %s\nTry xarchiver --help to see a full list of available command line options.\n"), PACKAGE, cli_error->message);
+ g_error_free (cli_error);
+ return 1;
+ }
+ }
thunar_vfs_init();
lxa_init();
+ if(version)
+ {
+ g_print("%s\n", PACKAGE_STRING);
+ return 0;
+ }
+
if(extract_archive_path || extract_archive)
{
if(argc == 1)
@@ -171,6 +187,10 @@
if(lxa_open_archive(add_archive_path, &lpArchive))
{
/* Could not open archive (mime type not supported or file did not exsit)*/
+ dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,_("Could not open archive, MIME-type unsupported or file did not exist"));
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+ gtk_dialog_run (GTK_DIALOG (dialog) );
+ gtk_widget_destroy (GTK_WIDGET (dialog) );
return 1;
}
else
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -22,6 +22,7 @@
#include <libxarchiver/libxarchiver.h>
#include "main_window_menu_bar.h"
#include "main_window_tool_bar.h"
+#include "main_window_status_bar.h"
#include "main_window.h"
static void
@@ -68,13 +69,16 @@
window->main_vbox = gtk_vbox_new(FALSE, 0);
window->menubar = xa_main_window_menu_bar_new();
window->toolbar = xa_main_window_tool_bar_new();
+ window->statusbar = xa_main_window_status_bar_new();
gtk_box_pack_start(GTK_BOX(window->main_vbox), window->menubar, 0, FALSE, FALSE);
gtk_box_pack_start(GTK_BOX(window->main_vbox), window->toolbar, 0, FALSE, FALSE);
+ gtk_box_pack_end(GTK_BOX(window->main_vbox), window->statusbar, 0, FALSE, FALSE);
gtk_widget_show(window->main_vbox);
gtk_widget_show_all(window->menubar);
gtk_widget_show_all(window->toolbar);
+ gtk_widget_show_all(window->statusbar);
gtk_container_add(GTK_CONTAINER(window), window->main_vbox);
}
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -46,6 +46,7 @@
GtkWidget *main_vbox;
GtkWidget *menubar;
GtkWidget *toolbar;
+ GtkWidget *statusbar;
};
typedef struct _XAMainWindowClass XAMainWindowClass;
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -23,6 +23,10 @@
#include "main_window_menu_bar.h"
#include "main_window.h"
+#include "add_dialog.h"
+#include "new_dialog.h"
+#include "extract_dialog.h"
+
static void
xa_main_window_menu_bar_class_init(XAMainWindowMenuBarClass *);
@@ -66,6 +70,7 @@
GtkAccelGroup *accel_group = gtk_accel_group_new();
GtkWidget *tmp_image;
+ GtkWidget *separator;
menubar->menu_item_archive = gtk_menu_item_new_with_mnemonic(_("_Archive"));
menubar->menu_item_action = gtk_menu_item_new_with_mnemonic(_("A_ction"));
@@ -85,28 +90,43 @@
/* Archive menu */
menubar->menu_item_new = gtk_image_menu_item_new_from_stock("gtk-new", accel_group);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_new);
+
menubar->menu_item_open = gtk_image_menu_item_new_from_stock("gtk-open", accel_group);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_open);
+
+ separator = gtk_separator_menu_item_new();
+ gtk_container_add(GTK_CONTAINER(menubar->menu_archive), separator);
+
+ menubar->menu_item_properties = gtk_image_menu_item_new_from_stock("gtk-properties", accel_group);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_properties);
+
+ separator = gtk_separator_menu_item_new();
+ gtk_container_add(GTK_CONTAINER(menubar->menu_archive), separator);
+
menubar->menu_item_quit = gtk_image_menu_item_new_from_stock("gtk-quit", accel_group);
-
- gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_new);
- gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_open);
gtk_container_add(GTK_CONTAINER(menubar->menu_archive), menubar->menu_item_quit);
/* Action menu */
tmp_image = xa_main_window_find_image("add_button.png", GTK_ICON_SIZE_MENU);
menubar->menu_item_add = gtk_image_menu_item_new_with_mnemonic(_("Add"));
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menubar->menu_item_add), tmp_image);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_add);
tmp_image = xa_main_window_find_image("extract_button.png", GTK_ICON_SIZE_MENU);
menubar->menu_item_extract = gtk_image_menu_item_new_with_mnemonic(_("Extract"));
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menubar->menu_item_extract), tmp_image);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_extract);
menubar->menu_item_remove = gtk_image_menu_item_new_from_stock("gtk-delete", accel_group);
-
- gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_add);
- gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_extract);
gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_remove);
+ separator = gtk_separator_menu_item_new();
+ gtk_container_add(GTK_CONTAINER(menubar->menu_action), separator);
+
+ menubar->menu_item_settings = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group);
+ gtk_container_add(GTK_CONTAINER(menubar->menu_action), menubar->menu_item_settings);
+
/* Help menu */
menubar->menu_item_about = gtk_image_menu_item_new_from_stock("gtk-about", accel_group);
gtk_container_add(GTK_CONTAINER(menubar->menu_help), menubar->menu_item_about);
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.h 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.h 2006-08-20 22:03:24 UTC (rev 22840)
@@ -48,6 +48,7 @@
/* contents of 'archive' menu */
GtkWidget *menu_item_new;
GtkWidget *menu_item_open;
+ GtkWidget *menu_item_properties;
GtkWidget *menu_item_quit;
GtkWidget *menu_item_action;
@@ -57,6 +58,7 @@
GtkWidget *menu_item_add;
GtkWidget *menu_item_extract;
GtkWidget *menu_item_remove;
+ GtkWidget *menu_item_settings;
GtkWidget *menu_item_help;
GtkWidget *menu_help;
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c 2006-08-20 18:54:48 UTC (rev 22839)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c 2006-08-20 22:03:24 UTC (rev 22840)
@@ -23,6 +23,10 @@
#include "main_window_tool_bar.h"
#include "main_window.h"
+#include "add_dialog.h"
+#include "new_dialog.h"
+#include "extract_dialog.h"
+
static void
xa_main_window_tool_bar_class_init(XAMainWindowToolBarClass *);
More information about the Xfce4-commits
mailing list