diff options
author | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:13:55 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:13:55 +0000 |
commit | 1ec05948cf1399087513da33a9f336afb648059d (patch) | |
tree | 63fbbcfcf9656fb40b699d10817262e8ac1204cf | |
parent | bed15426677f319c9263a3015444ace0633093f7 (diff) | |
download | gvfs-1ec05948cf1399087513da33a9f336afb648059d.tar.gz |
Add cancelled signal to GCancellable
Original git commit by Alexander Larsson <alex@greebo.(none)> at 1164620211 +0100
svn path=/trunk/; revision=188
-rw-r--r-- | gvfs/gcancellable.c | 25 | ||||
-rw-r--r-- | gvfs/gcancellable.h | 2 |
2 files changed, 25 insertions, 2 deletions
diff --git a/gvfs/gcancellable.c b/gvfs/gcancellable.c index 04412e27..42e6ab5f 100644 --- a/gvfs/gcancellable.c +++ b/gvfs/gcancellable.c @@ -3,8 +3,15 @@ #include <unistd.h> #include <fcntl.h> +#include <gvfstypes.h> + #include "gcancellable.h" +enum { + CANCELLED, + LAST_SIGNAL +}; + struct _GCancellable { GObject parent_instance; @@ -14,6 +21,8 @@ struct _GCancellable int cancel_pipe[2]; }; +static guint signals[LAST_SIGNAL] = { 0 }; + G_DEFINE_TYPE (GCancellable, g_cancellable, G_TYPE_OBJECT); static GStaticPrivate current_cancellable = G_STATIC_PRIVATE_INIT; @@ -40,6 +49,16 @@ g_cancellable_class_init (GCancellableClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->finalize = g_cancellable_finalize; + + signals[CANCELLED] = + g_signal_new (I_("cancelled"), + G_TYPE_FROM_CLASS (gobject_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GCancellableClass, cancelled), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + } static void @@ -169,7 +188,6 @@ void g_cancellable_cancel (GCancellable *cancellable) { G_LOCK(cancellable); - if (cancellable != NULL && !cancellable->cancelled) { @@ -178,8 +196,11 @@ g_cancellable_cancel (GCancellable *cancellable) if (cancellable->cancel_pipe[1] != -1) write (cancellable->cancel_pipe[1], &ch, 1); } - G_UNLOCK(cancellable); + + g_object_ref (cancellable); + g_signal_emit (cancellable, signals[CANCELLED], 0); + g_object_unref (cancellable); } diff --git a/gvfs/gcancellable.h b/gvfs/gcancellable.h index 62d91b50..07b9e59a 100644 --- a/gvfs/gcancellable.h +++ b/gvfs/gcancellable.h @@ -18,6 +18,8 @@ typedef struct _GCancellableClass GCancellableClass; struct _GCancellableClass { GObjectClass parent_class; + + void (* cancelled) (GCancellable *cancellable); }; GType g_cancellable_get_type (void) G_GNUC_CONST; |