[Xfce4-commits] r23192 - xarchiver/branches/xarchiver-psybsd/src
Stephan Arts
stephan at xfce.org
Thu Sep 21 08:16:10 UTC 2006
Author: stephan
Date: 2006-09-21 08:16:09 +0000 (Thu, 21 Sep 2006)
New Revision: 23192
Modified:
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
Log:
fix segfaults
Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c 2006-09-20 22:30:19 UTC (rev 23191)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c 2006-09-21 08:16:09 UTC (rev 23192)
@@ -86,6 +86,17 @@
{
}
+void
+cb_main_window_destroy(XAMainWindow *window, gpointer data)
+{
+ if(window->lp_xa_archive)
+ opened_archives--;
+ if(opened_archives <= 0)
+ {
+ gtk_main_quit();
+ }
+}
+
int main(int argc, char **argv)
{
gint result = 0;
@@ -218,16 +229,35 @@
if(!new_archive && !add_archive_path && !extract_archive && !extract_archive_path)
{
- /* Show main window */
- main_window = xa_main_window_new();
- gtk_widget_set_size_request(main_window, 400, 300);
- gtk_widget_show_all(main_window);
- g_signal_connect(G_OBJECT(main_window), "destroy", gtk_main_quit, NULL);
-
if(argc > 1)
{
- lxa_open_archive(argv[1], &lp_xa_archive);
- g_signal_connect(G_OBJECT(lp_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), main_window);
+ opened_archives++;
+ for(i = 1; i < argc; i++)
+ {
+ /* Show main window */
+ main_window = xa_main_window_new();
+ g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(cb_main_window_destroy), NULL);
+
+ if(!xa_main_window_open_archive(XA_MAIN_WINDOW(main_window), argv[i]))
+ {
+ opened_archives++;
+ gtk_widget_set_size_request(main_window, 400, 300);
+ gtk_widget_show_all(main_window);
+ } else
+ {
+ gtk_widget_destroy(main_window);
+ }
+ }
+ opened_archives--;
+ if(opened_archives <= 0)
+ return 1;
+ } else
+ {
+ /* Show main window */
+ main_window = xa_main_window_new();
+ g_signal_connect(G_OBJECT(main_window), "destroy", G_CALLBACK(cb_main_window_destroy), NULL);
+ gtk_widget_set_size_request(main_window, 400, 300);
+ gtk_widget_show_all(main_window);
}
} else
if(!opened_archives)
Modified: xarchiver/branches/xarchiver-psybsd/src/main.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.h 2006-09-20 22:30:19 UTC (rev 23191)
+++ xarchiver/branches/xarchiver-psybsd/src/main.h 2006-09-21 08:16:09 UTC (rev 23192)
@@ -1 +0,0 @@
-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-20 22:30:19 UTC (rev 23191)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.c 2006-09-21 08:16:09 UTC (rev 23192)
@@ -261,6 +261,7 @@
{
GtkWidget *dialog = NULL;
gchar *new_archive_path = NULL;
+ XAMainWindow *parent_window = XA_MAIN_WINDOW(userdata);
gint result = 0;
dialog = xa_new_archive_dialog_new();
@@ -273,12 +274,12 @@
if(result == GTK_RESPONSE_OK)
{
new_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- if(lp_xa_archive)
+ if(parent_window->lp_xa_archive)
{
- g_object_unref(lp_xa_archive);
- lp_xa_archive = NULL;
+ g_object_unref(parent_window->lp_xa_archive);
+ parent_window->lp_xa_archive = NULL;
}
- if(!lxa_new_archive(new_archive_path, TRUE, NULL, &lp_xa_archive))
+ if(!lxa_new_archive(new_archive_path, TRUE, NULL, &(parent_window->lp_xa_archive)))
{
g_debug("Archive opened");
}
@@ -292,7 +293,6 @@
GtkWidget *dialog = NULL;
gchar *open_archive_path = NULL;
gint result = 0;
- LXAArchiveSupport *lpSupport;
XAMainWindow *parent_window = XA_MAIN_WINDOW(userdata);
dialog = gtk_file_chooser_dialog_new(_("Open archive"),
@@ -309,30 +309,47 @@
if(result == GTK_RESPONSE_OK)
{
open_archive_path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- if(lp_xa_archive)
+ if(parent_window->lp_xa_archive)
{
- g_object_unref(lp_xa_archive);
- lp_xa_archive = NULL;
+ g_object_unref(parent_window->lp_xa_archive);
+ parent_window->lp_xa_archive = NULL;
}
- if(!lxa_open_archive(open_archive_path, &lp_xa_archive))
- {
- g_debug("Archive opened");
- gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_add), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_remove), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(parent_window->toolbar.tool_item_extract), TRUE);
- g_signal_connect(G_OBJECT(lp_xa_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), parent_window);
- g_slist_free(parent_window->working_node);
- parent_window->working_node = NULL;
- lpSupport = lxa_get_support_for_mime(lp_xa_archive->mime);
- lxa_archive_support_refresh(lpSupport, lp_xa_archive);
- }
+ xa_main_window_open_archive(parent_window, open_archive_path);
gtk_widget_destroy (GTK_WIDGET (dialog) );
}
}
+void
+cb_xa_main_extract_archive(GtkWidget *widget, gpointer userdata)
+{
+
+}
+
+gint
+xa_main_window_open_archive(XAMainWindow *window, gchar *archive_path)
+{
+ LXAArchiveSupport *lp_support = NULL;
+
+ if(!lxa_open_archive(archive_path, &window->lp_xa_archive))
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_add), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_remove), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(window->toolbar.tool_item_extract), TRUE);
+ g_signal_connect(G_OBJECT(window->lp_xa_archive), "lxa_status_changed", G_CALLBACK(xa_main_window_archive_status_changed), window);
+ g_slist_free(window->working_node);
+ window->working_node = NULL;
+ lp_support = lxa_get_support_for_mime(window->lp_xa_archive->mime);
+
+ lxa_archive_support_refresh(lp_support, window->lp_xa_archive);
+ return 0;
+ }
+
+ return 1;
+}
+
/*
*
*
@@ -374,14 +391,13 @@
main_window->working_node = g_slist_prepend(main_window->working_node, &(archive->root_entry));
xa_main_window_set_contents(main_window, archive, archive->root_entry.children);
}
+ if(archive->status == LXA_ARCHIVESTATUS_IDLE)
+ {
+ /* TODO:Fix stuff */
+ }
}
-void
-cb_xa_main_extract_archive(GtkWidget *widget, gpointer userdata)
-{
-}
-
void
xa_main_window_set_contents(XAMainWindow *main_window, LXAArchive *archive, GSList *items)
{
@@ -470,7 +486,7 @@
items = ((LXAEntry *)main_window->working_node->data)->children;
if(items)
- xa_main_window_set_contents(main_window, lp_xa_archive, items);
+ xa_main_window_set_contents(main_window, main_window->lp_xa_archive, items);
/* else*/
/* 'view' */
Modified: xarchiver/branches/xarchiver-psybsd/src/main_window.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-20 22:30:19 UTC (rev 23191)
+++ xarchiver/branches/xarchiver-psybsd/src/main_window.h 2006-09-21 08:16:09 UTC (rev 23192)
@@ -30,21 +30,21 @@
#define XA_MAIN_WINDOW(obj) ( \
G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- XA_TYPE_MAIN_WINDOW, \
+ xa_main_window_get_type(), \
XAMainWindow))
#define XA_IS_MAIN_WINDOW(obj) ( \
G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
- XA_TYPE_MAIN_WINDOW))
+ xa_main_window_get_type()))
#define XA_MAIN_WINDOW_CLASS(class) ( \
G_TYPE_CHECK_CLASS_CAST ((class), \
- XA_TYPE_MAIN_WINDOW, \
+ xa_main_window_get_type(), \
XAMainWindowClass))
#define XA_IS_MAIN_WINDOW_CLASS(class) ( \
G_TYPE_CHECK_CLASS_TYPE ((class), \
- XA_TYPE_MAIN_WINDOW))
+ xa_main_window_get_type()))
typedef struct _XAMainWindow XAMainWindow;
@@ -88,6 +88,7 @@
GtkToolItem *tool_item_extract;
GtkToolItem *tool_item_remove;
} toolbar;
+ LXAArchive *lp_xa_archive;
GValue *parent_node;
GSList *working_node;
};
@@ -101,12 +102,14 @@
GtkWidget *xa_main_window_new();
GtkWidget *xa_main_window_find_image(gchar *, GtkIconSize);
+GType xa_main_window_get_type ();
void cb_xa_main_new_archive(GtkWidget *widget, gpointer userdata);
void cb_xa_main_open_archive(GtkWidget *widget, gpointer userdata);
void cb_xa_main_extract_archive(GtkWidget *widget, gpointer userdata);
void xa_main_window_archive_status_changed(LXAArchive *archive, gpointer userdata);
+gint xa_main_window_open_archive(XAMainWindow *window, gchar *archive_path);
G_END_DECLS
#endif /* __XARCHIVER_MAIN_WINDOW_H__ */
More information about the Xfce4-commits
mailing list