Author: stephan Date: 2006-09-03 23:19:48 +0000 (Sun, 03 Sep 2006) New Revision: 23069
Modified: xarchiver/branches/xarchiver-psybsd/TODO xarchiver/branches/xarchiver-psybsd/configure.in.in 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.c xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h xarchiver/branches/xarchiver-psybsd/po/nl.po xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot xarchiver/branches/xarchiver-psybsd/src/extract_dialog.c xarchiver/branches/xarchiver-psybsd/src/main.c xarchiver/branches/xarchiver-psybsd/src/main.h 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_tool_bar.c Log: Fixed New buttons in GUI Fixed Open buttons in GUI Fixed Quit button in GUI started on 'view' of archive Modified: xarchiver/branches/xarchiver-psybsd/TODO =================================================================== --- xarchiver/branches/xarchiver-psybsd/TODO 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/TODO 2006-09-03 23:19:48 UTC (rev 23069) @@ -10,10 +10,8 @@ +-+-+-+ - Implement extract options in extract-dialog -+-+-+-+ - Implement View support (for all support-objects) + Use Path-entries for path-components. (Should reduce mem-usage on large archives tremendously) +-+-+-+ Implement UnRar Support object. Modified: xarchiver/branches/xarchiver-psybsd/configure.in.in =================================================================== --- xarchiver/branches/xarchiver-psybsd/configure.in.in 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/configure.in.in 2006-09-03 23:19:48 UTC (rev 23069) @@ -11,7 +11,7 @@ dnl *************************** m4_define([xarchiver_version_branch], [psybsd]) m4_define([xarchiver_version_major], [0]) -m4_define([xarchiver_version_minor], [3]) +m4_define([xarchiver_version_minor], [4]) m4_define([xarchiver_version_micro], [9]) m4_define([xarchiver_version_nano], []) # Leave empty for no nano version m4_define([xarchiver_version_build], [EMAIL PROTECTED]@]) Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -48,6 +48,8 @@ lxa_archive_support_gnu_tar_decompress_watch(GPid pid, gint status, gpointer data); gboolean +lxa_archive_support_gnu_tar_refresh_parse_output(GIOChannel *ioc, GIOCondition cond, 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); @@ -108,6 +110,8 @@ archive_support->add = lxa_archive_support_gnu_tar_add; archive_support->extract = lxa_archive_support_gnu_tar_extract; archive_support->remove = lxa_archive_support_gnu_tar_remove; + archive_support->refresh = lxa_archive_support_gnu_tar_refresh; + archive_support->view = lxa_archive_support_gnu_tar_view; } void @@ -316,6 +320,32 @@ return 0; } +gint +lxa_archive_support_gnu_tar_view(LXAArchive *archive, gchar *path) +{ +} + +gint +lxa_archive_support_gnu_tar_refresh(LXAArchive *archive) +{ + if(!LXA_IS_ARCHIVE_SUPPORT_GNU_TAR(archive->support)) + { + g_critical("Support is not GNU TAR"); + return -1; + } + + if(!lxa_archive_support_mime_supported(archive->support, archive->mime)) + { + return 1; + } + else + { + gchar *command = g_strconcat(LXA_ARCHIVE_SUPPORT_GNU_TAR(archive->support)->app_name, " tfv " , archive->path, NULL); + lxa_execute(command, archive, NULL, NULL, lxa_archive_support_gnu_tar_refresh_parse_output, NULL); + g_free(command); + } +} + void lxa_archive_support_gnu_tar_decompress_watch(GPid pid, gint status, gpointer data) { @@ -341,6 +371,39 @@ } gboolean +lxa_archive_support_gnu_tar_refresh_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data) +{ + GIOStatus status = G_IO_STATUS_NORMAL; + FILE *out_file = NULL; + LXAArchive *archive = data; + gchar *line = NULL; + guint read = 0; + GError *error = NULL; + gchar *command = NULL; + + if(cond & (G_IO_PRI | G_IO_IN)) + { + while(TRUE) + { + status = g_io_channel_read_line(ioc, &line, NULL,NULL,NULL); + if (line == NULL) + break; + g_print("."); + g_free(line); + } + } + 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); + return FALSE; + } + return TRUE; +} +gboolean lxa_archive_support_gnu_tar_decompress_parse_output(GIOChannel *ioc, GIOCondition cond, gpointer data) { FILE *out_file = NULL; Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h =================================================================== --- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support-gnu-tar.h 2006-09-03 23:19:48 UTC (rev 23069) @@ -65,7 +65,8 @@ 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 *); - +gint lxa_archive_support_gnu_tar_refresh(LXAArchive *); +gint lxa_archive_support_gnu_tar_view(LXAArchive *, gchar *); G_END_DECLS #endif /* __LIBXARCHIVER_ARCHIVE_SUPPORT_GNU_TAR_H__ */ Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -18,6 +18,7 @@ #define EXO_API_SUBJECT_TO_CHANGE +#include <string.h> #include <glib.h> #include <glib/gstdio.h> #include <glib-object.h> @@ -217,6 +218,34 @@ return -1; } +gint +lxa_archive_support_refresh(LXAArchiveSupport *support, LXAArchive *archive) +{ + if(support->refresh) + { + lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_REFRESH); + archive->support = support; + return support->refresh(archive); + } + else + g_critical("VIEW NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id); + return -1; +} + +gint +lxa_archive_support_view(LXAArchiveSupport *support, LXAArchive *archive, gchar *path) +{ + if(support->view) + { + lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_VIEW); + archive->support = support; + return support->view(archive, path); + } + else + g_critical("VIEW NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id); + return -1; +} + GSList * lxa_archive_support_list_properties(LXAArchiveSupport *support, gchar *prefix) { Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h =================================================================== --- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.h 2006-09-03 23:19:48 UTC (rev 23069) @@ -60,6 +60,8 @@ gint (*add)(LXAArchive *archive, GSList *files); gint (*extract)(LXAArchive *archive, gchar *dest_path, GSList *files); gint (*remove)(LXAArchive *archive, GSList *files); + gint (*refresh)(LXAArchive *archive); + gint (*view)(LXAArchive *archive, gchar *path); }; typedef struct _LXAArchiveSupportClass LXAArchiveSupportClass; @@ -84,6 +86,8 @@ gint lxa_archive_support_add(LXAArchiveSupport *, LXAArchive *, GSList *); gint lxa_archive_support_extract(LXAArchiveSupport *, LXAArchive *, gchar *, GSList *); gint lxa_archive_support_remove(LXAArchiveSupport *, LXAArchive *, GSList *); +gint lxa_archive_support_refresh(LXAArchiveSupport *, LXAArchive *); +gint lxa_archive_support_view(LXAArchiveSupport *, LXAArchive *, gchar *); GSList * lxa_archive_support_list_properties(LXAArchiveSupport *, gchar *); Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h =================================================================== --- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h 2006-09-03 23:19:48 UTC (rev 23069) @@ -26,6 +26,7 @@ LXA_ARCHIVESTATUS_ADD, LXA_ARCHIVESTATUS_EXTRACT, LXA_ARCHIVESTATUS_REMOVE, + LXA_ARCHIVESTATUS_REFRESH, LXA_ARCHIVESTATUS_VIEW, LXA_ARCHIVESTATUS_ERROR, LXA_ARCHIVESTATUS_USERBREAK @@ -57,14 +58,15 @@ struct _LXAArchive { GObject parent; - gchar *path; - gchar *mime; - LXAArchiveStatus status; - LXAArchiveStatus old_status; - GPid child_pid; - gpointer support; - gchar *tmp_file; - gchar *files; + gchar *path; + gchar *mime; + LXAArchiveStatus status; + LXAArchiveStatus old_status; + GPid child_pid; + gpointer support; + gchar *tmp_file; + gchar *files; + gboolean has_passwd; }; typedef struct _LXAArchiveClass LXAArchiveClass; Modified: xarchiver/branches/xarchiver-psybsd/po/nl.po =================================================================== --- xarchiver/branches/xarchiver-psybsd/po/nl.po 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/po/nl.po 2006-09-03 23:19:48 UTC (rev 23069) @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: xarchiver 0.3.9psybsd\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-08-29 07:38+0200\n" +"POT-Creation-Date: 2006-09-04 01:18+0200\n" "PO-Revision-Date: 2006-07-20 16:36+0200\n" "Last-Translator: Stephan Arts <[EMAIL PROTECTED]>\n" "Language-Team: Dutch <[EMAIL PROTECTED]>\n" @@ -16,18 +16,18 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../libxarchiver/archive-support-gnu-tar.c:123 -#: ../libxarchiver/archive-support-zip.c:99 +#: ../libxarchiver/archive-support-gnu-tar.c:127 +#: ../libxarchiver/archive-support-zip.c:104 msgid "Overwrite existing files" msgstr "Bestaande bestanden overschrijven" -#: ../libxarchiver/archive-support-gnu-tar.c:124 -#: ../libxarchiver/archive-support-zip.c:100 +#: ../libxarchiver/archive-support-gnu-tar.c:128 +#: ../libxarchiver/archive-support-zip.c:105 msgid "Overwrite existing files on extraction" msgstr "Bestaande bestanden overschrijven tijdens uitpakken" -#: ../libxarchiver/archive-support-zip.c:107 -#: ../libxarchiver/archive-support-zip.c:108 +#: ../libxarchiver/archive-support-zip.c:97 +#: ../libxarchiver/archive-support-zip.c:98 msgid "Password" msgstr "Wachtwoord" @@ -78,32 +78,36 @@ "Kan archief niet openen, MIME-type wordt niet ondersteund of bestand bestaat " "niet" +#: ../src/main_window.c:170 +msgid "Open archive" +msgstr "Archief openen" + #: ../src/new_dialog.c:85 msgid "Create new archive" msgstr "Maak nieuw archief" -#: ../src/extract_dialog.c:69 +#: ../src/extract_dialog.c:74 msgid "<b>Extract files:</b>" msgstr "<b> Bestanden uitpakken:</b>" -#: ../src/extract_dialog.c:70 +#: ../src/extract_dialog.c:75 msgid "<b>Options:</b>" msgstr "<b>Opties:</b>" -#: ../src/extract_dialog.c:80 +#: ../src/extract_dialog.c:85 msgid "All files" msgstr "Alle bestanden" -#: ../src/extract_dialog.c:81 +#: ../src/extract_dialog.c:86 msgid "Selected files" msgstr "Geselecteerde bestanden" -#: ../src/extract_dialog.c:93 ../src/main_window_menu_bar.c:117 -#: ../src/main_window_tool_bar.c:87 +#: ../src/extract_dialog.c:98 ../src/main_window_menu_bar.c:122 +#: ../src/main_window_tool_bar.c:91 msgid "Extract" msgstr "Uitpakken" -#: ../src/extract_dialog.c:105 +#: ../src/extract_dialog.c:110 msgid "Extract archive" msgstr "Archief uitpakken" @@ -119,7 +123,7 @@ msgid "_Help" msgstr "_Help" -#: ../src/main_window_menu_bar.c:112 ../src/main_window_tool_bar.c:84 +#: ../src/main_window_menu_bar.c:117 ../src/main_window_tool_bar.c:88 msgid "Add" msgstr "Toevoegen" Modified: xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot =================================================================== --- xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/po/xarchiver.pot 2006-09-03 23:19:48 UTC (rev 23069) @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-08-29 07:38+0200\n" +"POT-Creation-Date: 2006-09-04 01:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <[EMAIL PROTECTED]>\n" "Language-Team: LANGUAGE <[EMAIL PROTECTED]>\n" @@ -16,18 +16,18 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: ../libxarchiver/archive-support-gnu-tar.c:123 -#: ../libxarchiver/archive-support-zip.c:99 +#: ../libxarchiver/archive-support-gnu-tar.c:127 +#: ../libxarchiver/archive-support-zip.c:104 msgid "Overwrite existing files" msgstr "" -#: ../libxarchiver/archive-support-gnu-tar.c:124 -#: ../libxarchiver/archive-support-zip.c:100 +#: ../libxarchiver/archive-support-gnu-tar.c:128 +#: ../libxarchiver/archive-support-zip.c:105 msgid "Overwrite existing files on extraction" msgstr "" -#: ../libxarchiver/archive-support-zip.c:107 -#: ../libxarchiver/archive-support-zip.c:108 +#: ../libxarchiver/archive-support-zip.c:97 +#: ../libxarchiver/archive-support-zip.c:98 msgid "Password" msgstr "" @@ -73,32 +73,36 @@ msgid "Could not open archive, MIME-type unsupported or file did not exist" msgstr "" +#: ../src/main_window.c:170 +msgid "Open archive" +msgstr "" + #: ../src/new_dialog.c:85 msgid "Create new archive" msgstr "" -#: ../src/extract_dialog.c:69 +#: ../src/extract_dialog.c:74 msgid "<b>Extract files:</b>" msgstr "" -#: ../src/extract_dialog.c:70 +#: ../src/extract_dialog.c:75 msgid "<b>Options:</b>" msgstr "" -#: ../src/extract_dialog.c:80 +#: ../src/extract_dialog.c:85 msgid "All files" msgstr "" -#: ../src/extract_dialog.c:81 +#: ../src/extract_dialog.c:86 msgid "Selected files" msgstr "" -#: ../src/extract_dialog.c:93 ../src/main_window_menu_bar.c:117 -#: ../src/main_window_tool_bar.c:87 +#: ../src/extract_dialog.c:98 ../src/main_window_menu_bar.c:122 +#: ../src/main_window_tool_bar.c:91 msgid "Extract" msgstr "" -#: ../src/extract_dialog.c:105 +#: ../src/extract_dialog.c:110 msgid "Extract archive" msgstr "" @@ -114,6 +118,6 @@ msgid "_Help" msgstr "" -#: ../src/main_window_menu_bar.c:112 ../src/main_window_tool_bar.c:84 +#: ../src/main_window_menu_bar.c:117 ../src/main_window_tool_bar.c:88 msgid "Add" msgstr "" Modified: xarchiver/branches/xarchiver-psybsd/src/extract_dialog.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/extract_dialog.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/extract_dialog.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -33,6 +33,8 @@ void xa_extract_dialog_option_toggled (GtkWidget *widget, gpointer data); +void +xa_extract_dialog_option_child_notify(GtkWidget *widget, GParamSpec *, gpointer data); GType xa_extract_archive_dialog_get_type () @@ -102,7 +104,7 @@ xa_extract_archive_dialog_new(LXAArchiveSupport *support, LXAArchive *archive, gboolean sel_option) { GSList *extract_options; - GtkWidget *test; + GtkWidget *test, *hbox; XAExtractArchiveDialog *dialog; dialog = g_object_new(xa_extract_archive_dialog_get_type(), "title", _("Extract archive"), "action", GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER, "do-overwrite-confirmation", TRUE, NULL); @@ -127,8 +129,15 @@ gtk_box_pack_start(GTK_BOX(r_vbox), test, FALSE, FALSE, 0); break; case (G_TYPE_STRING): /* TODO: Add text-field */ + hbox = gtk_hbox_new(FALSE, 0); test = gtk_label_new(g_param_spec_get_nick(G_PARAM_SPEC(extract_options->data))); - gtk_box_pack_start(GTK_BOX(r_vbox), test, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), test, FALSE, FALSE, 0); + + test = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), test, FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(test), "child_notify", G_CALLBACK(xa_extract_dialog_option_child_notify), (void *)g_param_spec_get_name(G_PARAM_SPEC(extract_options->data))); + gtk_box_pack_start(GTK_BOX(r_vbox), hbox, FALSE, FALSE, 0); break; } extract_options = extract_options->next; @@ -152,3 +161,17 @@ g_free(val); } + +void +xa_extract_dialog_option_child_notify (GtkWidget *widget, GParamSpec *pspec, gpointer data) +{ + GValue *val = g_new0(GValue, 1); + gboolean active; + if(strcmp(g_param_spec_get_name(pspec), "text")) + { + val = g_value_init(val, G_TYPE_STRING); + g_object_get_property(G_OBJECT(widget), "text", val); + g_object_set_property(G_OBJECT(XA_EXTRACT_ARCHIVE_DIALOG(gtk_widget_get_ancestor(widget, GTK_TYPE_DIALOG))->support), (gchar *)data, val); + } + g_free(val); +} Modified: xarchiver/branches/xarchiver-psybsd/src/main.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -91,7 +91,7 @@ gint result = 0; GtkWidget *dialog = NULL; GtkWidget *main_window = NULL; - LXAArchive *lpArchive; + LXAArchive *lp_archive; LXAArchiveSupport *lpSupport; GError *cli_error = NULL; gint i = 0; @@ -133,31 +133,31 @@ } for(i = 1; i < argc; i++) { - if(!lxa_open_archive(argv[i], &lpArchive)) + if(!lxa_open_archive(argv[i], &lp_archive)) { - g_signal_connect(G_OBJECT(lpArchive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL); + 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(lpArchive->mime); + lpSupport = lxa_get_support_for_mime(lp_archive->mime); if(!extract_archive_path) { - dialog = xa_extract_archive_dialog_new(lpSupport, lpArchive, FALSE); + dialog = xa_extract_archive_dialog_new(lpSupport, lp_archive, FALSE); result = gtk_dialog_run (GTK_DIALOG (dialog) ); if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT) { gtk_widget_destroy (GTK_WIDGET (dialog) ); - lxa_close_archive(lpArchive); + lxa_close_archive(lp_archive); opened_archives--; } if(result == GTK_RESPONSE_OK) { extract_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - lxa_archive_support_extract(lpSupport, lpArchive, extract_archive_path, NULL); + lxa_archive_support_extract(lpSupport, lp_archive, extract_archive_path, NULL); g_free(extract_archive_path); extract_archive_path = NULL; } } else - lxa_archive_support_extract(lpSupport, lpArchive, extract_archive_path, NULL); + lxa_archive_support_extract(lpSupport, lp_archive, extract_archive_path, NULL); } } } @@ -177,7 +177,7 @@ add_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gtk_widget_destroy (GTK_WIDGET (dialog) ); } - if(lxa_new_archive(add_archive_path, TRUE, NULL, &lpArchive)) + if(lxa_new_archive(add_archive_path, TRUE, NULL, &lp_archive)) { /* * Could not create archive (mime type unsupported) @@ -193,7 +193,7 @@ } else { - if(lxa_open_archive(add_archive_path, &lpArchive)) + if(lxa_open_archive(add_archive_path, &lp_archive)) { /* * Could not open archive (mime type not supported or file did not exist) @@ -208,18 +208,21 @@ else opened_archives++; } - g_signal_connect(G_OBJECT(lpArchive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL); + g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL); GSList *files = NULL; for(i = 1; i < argc; i++) { files = g_slist_prepend(files, argv[i]); } - lpSupport = lxa_get_support_for_mime(lpArchive->mime); - lxa_archive_support_add(lpSupport, lpArchive, files); + lpSupport = lxa_get_support_for_mime(lp_archive->mime); + lxa_archive_support_add(lpSupport, lp_archive, files); } if(!new_archive && !add_archive_path && !extract_archive && !extract_archive_path) { + if(argc > 1) + lxa_open_archive(argv[1], &lp_xa_archive); + /* Show main window */ main_window = xa_main_window_new(); gtk_widget_set_size_request(main_window, 400, 300); Modified: xarchiver/branches/xarchiver-psybsd/src/main.h =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main.h 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main.h 2006-09-03 23:19:48 UTC (rev 23069) @@ -0,0 +1,2 @@ +static LXAArchive *lp_xa_archive = NULL; + Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -24,7 +24,10 @@ #include "main_window_tool_bar.h" #include "main_window_status_bar.h" #include "main_window.h" +#include "new_dialog.h" +#include "main.h" + static void xa_main_window_class_init(XAMainWindowClass *); @@ -99,11 +102,11 @@ xa_main_window_find_image(gchar *filename, GtkIconSize size) { GError *error = NULL; - GtkWidget *file_image; + GtkWidget *file_image; gchar *path; path = g_strconcat(DATADIR, "/xarchiver/pixmaps/", filename, NULL); GdkPixbuf *file_pixbuf = gdk_pixbuf_new_from_file(path, &error); - if(!file_pixbuf) + if(error) { /* * perhaps xarchiver has not been installed and is being executed from source dir @@ -112,17 +115,82 @@ error = NULL; path = g_strconcat("./pixmaps/", filename, NULL); file_pixbuf = gdk_pixbuf_new_from_file(path, &error); - } - if(file_pixbuf) - { + } + if(file_pixbuf) + { file_image = gtk_image_new_from_pixbuf(file_pixbuf); g_object_unref(file_pixbuf); - } - else + } + else { g_free(error); file_image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, size); - } - g_free(path); - return file_image; + } + g_free(path); + return file_image; } + +void +cb_xa_main_new_archive(GtkWidget *widget, gpointer userdata) +{ + GtkWidget *dialog = NULL; + gchar *new_archive_path = NULL; + gint result = 0; + + dialog = xa_new_archive_dialog_new(); + result = gtk_dialog_run (GTK_DIALOG (dialog) ); + if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT) + { + gtk_widget_destroy (GTK_WIDGET (dialog) ); + return; + } + if(result == GTK_RESPONSE_OK) + { + new_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if(lp_xa_archive) + { + g_object_unref(lp_xa_archive); + lp_xa_archive = NULL; + } + if(!lxa_new_archive(new_archive_path, TRUE, NULL, &lp_xa_archive)) + { + g_debug("Archive opened"); + } + gtk_widget_destroy (GTK_WIDGET (dialog) ); + } +} + +void +cb_xa_main_open_archive(GtkWidget *widget, gpointer userdata) +{ + GtkWidget *dialog = NULL; + gchar *open_archive_path = NULL; + gint result = 0; + + dialog = gtk_file_chooser_dialog_new(_("Open archive"), + GTK_WINDOW(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW)), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + result = gtk_dialog_run (GTK_DIALOG (dialog) ); + if(result == GTK_RESPONSE_CANCEL || result == GTK_RESPONSE_DELETE_EVENT) + { + gtk_widget_destroy (GTK_WIDGET (dialog) ); + return; + } + if(result == GTK_RESPONSE_OK) + { + open_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if(lp_xa_archive) + { + g_object_unref(lp_xa_archive); + lp_xa_archive = NULL; + } + if(!lxa_open_archive(open_archive_path, &lp_xa_archive)) + { + g_debug("Archive opened"); + } + gtk_widget_destroy (GTK_WIDGET (dialog) ); + } + +} Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-03 23:19:48 UTC (rev 23069) @@ -47,6 +47,7 @@ GtkWidget *menubar; GtkWidget *toolbar; GtkWidget *statusbar; + LXAArchive *archive; }; typedef struct _XAMainWindowClass XAMainWindowClass; @@ -59,5 +60,8 @@ GtkWidget *xa_main_window_new(); GtkWidget *xa_main_window_find_image(gchar *, GtkIconSize); +void cb_xa_main_new_archive(GtkWidget *widget, gpointer userdata); +void cb_xa_main_open_archive(GtkWidget *widget, gpointer userdata); + G_END_DECLS #endif /* __XARCHIVER_MAIN_WINDOW_H__ */ Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main_window_menu_bar.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -107,6 +107,11 @@ 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_quit); + g_signal_connect(G_OBJECT(menubar->menu_item_new), "activate", G_CALLBACK(cb_xa_main_new_archive), NULL); + g_signal_connect(G_OBJECT(menubar->menu_item_open), "activate", G_CALLBACK(cb_xa_main_open_archive), NULL); + /* g_signal_connect(G_OBJECT(menubar->menu_item_properties), "activate", NULL, NULL);*/ + g_signal_connect(G_OBJECT(menubar->menu_item_quit), "activate", G_CALLBACK(gtk_main_quit), NULL); + /* 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")); Modified: xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c =================================================================== --- xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c 2006-09-03 22:22:00 UTC (rev 23068) +++ xarchiver/branches/xarchiver-psybsd/src/main_window_tool_bar.c 2006-09-03 23:19:48 UTC (rev 23069) @@ -20,8 +20,8 @@ #include <glib.h> #include <gtk/gtk.h> #include <libxarchiver/libxarchiver.h> +#include "main_window.h" #include "main_window_tool_bar.h" -#include "main_window.h" #include "add_dialog.h" #include "new_dialog.h" @@ -77,6 +77,10 @@ gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_new)); gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(toolbar->tool_item_open)); + + g_signal_connect(G_OBJECT(toolbar->tool_item_new), "clicked", G_CALLBACK(cb_xa_main_new_archive), NULL); + g_signal_connect(G_OBJECT(toolbar->tool_item_open), "clicked", G_CALLBACK(cb_xa_main_open_archive), NULL); + gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(separator)); /* contents of 'action' pane */ @@ -99,9 +103,10 @@ GtkWidget * xa_main_window_tool_bar_new() { - GtkWidget *toolbar; + XAMainWindowToolBar *toolbar; toolbar = g_object_new(xa_main_window_tool_bar_get_type(), NULL); - return toolbar; + + return GTK_WIDGET(toolbar); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits