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

Stephan Arts stephan at xfce.org
Sun Aug 13 10:14:39 UTC 2006


Author: stephan
Date: 2006-08-13 10:14:38 +0000 (Sun, 13 Aug 2006)
New Revision: 22741

Modified:
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
   xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
   xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
   xarchiver/branches/xarchiver-psybsd/src/main.c
Log:

- Fixed status support. -- app now closes on success;



Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive-support.c	2006-08-13 10:14:38 UTC (rev 22741)
@@ -179,7 +179,10 @@
 lxa_archive_support_add(LXAArchiveSupport *support, LXAArchive *archive, GSList *files)
 {
 	if(support->add)
+	{
+		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_ADD);
 		return support->add(support, archive, files);
+	}
 	else
 		g_critical("ADD NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
 	return -1;
@@ -189,7 +192,10 @@
 lxa_archive_support_extract(LXAArchiveSupport *support, LXAArchive *archive, gchar *dest_path, GSList *files)
 {
 	if(support->extract)
+	{
+		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_EXTRACT);
 		return support->extract(support, archive, dest_path, files);
+	}
 	else
 		g_critical("EXTRACT NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
 	return -1;
@@ -199,7 +205,10 @@
 lxa_archive_support_remove(LXAArchiveSupport *support, LXAArchive *archive, GSList *files)
 {
 	if(support->remove)
+	{
+		lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_REMOVE);
 		return support->remove(support, archive, files);
+	}
 	else
 		g_critical("REMOVE NOT IMPLEMENTED BY SUPPORT OBJECT '%s'", support->id);
 	return -1;

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.c	2006-08-13 10:14:38 UTC (rev 22741)
@@ -37,7 +37,9 @@
 static void
 lxa_archive_finalize(GObject *object);
 
+static gint lxa_archive_signals[1];
 
+
 GType
 lxa_archive_get_type ()
 {
@@ -70,6 +72,18 @@
 	GObjectClass *object_class = G_OBJECT_CLASS(archive_class);
 
 	object_class->finalize = lxa_archive_finalize;
+	
+	lxa_archive_signals[0] = g_signal_new("lxa_status_changed",
+			G_TYPE_FROM_CLASS(archive_class),
+			G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+			0,
+			NULL,
+			NULL,
+			g_cclosure_marshal_VOID__POINTER,
+			G_TYPE_NONE,
+			1,
+			G_TYPE_POINTER,
+			NULL);
 }
 
 static void
@@ -103,7 +117,23 @@
 		mime_info = thunar_vfs_mime_info_new(mime, -1);
 	
 	archive->mime = g_strdup(thunar_vfs_mime_info_get_name(mime_info));
-	g_print("%s\n", archive->mime);
+	
+	if(!lxa_get_support_for_mime(archive->mime))
+	{
+		g_object_unref(archive);
+		archive = NULL;
+	}
 
 	return archive;
 }
+
+void 
+lxa_archive_set_status(LXAArchive *archive, LXAArchiveStatus status)
+{
+	if(archive->status != status)
+	{
+		archive->old_status = archive->status;
+		archive->status = status;
+		g_signal_emit(G_OBJECT(archive), lxa_archive_signals[0], 0, archive);
+	}
+}

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/archive.h	2006-08-13 10:14:38 UTC (rev 22741)
@@ -59,6 +59,8 @@
 	GObject parent;
 	gchar                 *path;
 	gchar                 *mime;
+	LXAArchiveStatus       status;
+	LXAArchiveStatus       old_status;
 	GPid                   child_pid;
 };
 
@@ -73,6 +75,7 @@
 LXAArchive        *lxa_archive_new(gchar *, gchar *);
 
 gchar             *lxa_archive_discover_mime(LXAArchive *archive);
+void               lxa_archive_set_status(LXAArchive *archive, LXAArchiveStatus status);
 
 G_END_DECLS
 

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/internals.c	2006-08-13 10:14:38 UTC (rev 22741)
@@ -33,6 +33,7 @@
 {
 	LXAArchive *archive = data;
 	archive->child_pid = 0;
+	lxa_archive_set_status(archive, LXA_ARCHIVESTATUS_IDLE);
 }
 
 gint

Modified: xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/libxarchiver/libxarchiver.c	2006-08-13 10:14:38 UTC (rev 22741)
@@ -60,6 +60,8 @@
 
 	LXAArchive *archive = lxa_archive_new(path, mime);
 	(*lp_archive) = archive;
+	if(!archive)
+		return 1;
 	return 0;
 }
 
@@ -79,6 +81,8 @@
 
 	LXAArchive *archive = lxa_archive_new(path, NULL);
 	(*lp_archive) = archive;
+	if(!archive)
+		return 1;
 	return 0;
 }
 

Modified: xarchiver/branches/xarchiver-psybsd/src/main.c
===================================================================
--- xarchiver/branches/xarchiver-psybsd/src/main.c	2006-08-13 09:25:33 UTC (rev 22740)
+++ xarchiver/branches/xarchiver-psybsd/src/main.c	2006-08-13 10:14:38 UTC (rev 22741)
@@ -64,8 +64,14 @@
 };
 
 void
-archive_status_changed(LXAArchive *archive, gpointer data)
+xa_archive_status_changed(LXAArchive *archive, gpointer data)
 {
+	if(archive->status == LXA_ARCHIVESTATUS_IDLE)
+	{
+		opened_archives--;
+	}
+	if(opened_archives <= 0)
+		gtk_main_quit();
 }
 
 void
@@ -124,6 +130,8 @@
 		{
 			if(!lxa_open_archive(argv[i], &lpArchive))
 			{
+				g_signal_connect(G_OBJECT(lpArchive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL);
+				opened_archives++;
 				lpSupport = lxa_get_support_for_mime(lpArchive->mime);
 				lxa_archive_support_extract(lpSupport, lpArchive, extract_archive_path, NULL);
 			}
@@ -146,13 +154,24 @@
 				gtk_widget_destroy (GTK_WIDGET (dialog) );
 			}
 			if(lxa_new_archive(add_archive_path, TRUE, NULL, &lpArchive))
+			{
+				/* Could not create archive (mime type unsupported) */
 				return 1;
+			}
+			else
+				opened_archives++;
 		}
 		else
 		{
 			if(lxa_open_archive(add_archive_path, &lpArchive))
+			{
+				/* Could not open archive (mime type not supported or file did not exsit)*/
 				return 1;
+			}
+			else
+				opened_archives++;
 		}
+		g_signal_connect(G_OBJECT(lpArchive), "lxa_status_changed", G_CALLBACK(xa_archive_status_changed), NULL);
 		GSList *files = NULL;
 		for(i = 1; i < argc; i++)
 		{



More information about the Xfce4-commits mailing list