[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