[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