aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-07-11 08:26:38 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-06 20:06:46 +0200
commit79abe00221450b9076eb9bb9898ec347ad863348 (patch)
tree255272546b03c24544f12c46df0e05d242fc1ffc /src
parentf5fdf946c9a2eefb049155f476888742c5901643 (diff)
core: new `MMAsyncMethod' boxed type
Helps to bundle the async method implementation in a property.
Diffstat (limited to 'src')
-rw-r--r--src/mm-private-boxed-types.c37
-rw-r--r--src/mm-private-boxed-types.h7
2 files changed, 44 insertions, 0 deletions
diff --git a/src/mm-private-boxed-types.c b/src/mm-private-boxed-types.c
index a7b166ef..465649b5 100644
--- a/src/mm-private-boxed-types.c
+++ b/src/mm-private-boxed-types.c
@@ -170,3 +170,40 @@ mm_pointer_array_get_type (void)
return g_define_type_id__volatile;
}
+
+static void
+async_method_free (MMAsyncMethod *method)
+{
+ g_slice_free (MMAsyncMethod, method);
+}
+
+static MMAsyncMethod *
+async_method_copy (MMAsyncMethod *original)
+{
+ MMAsyncMethod *copy;
+
+ if (!original)
+ return NULL;
+
+ copy = g_slice_new (MMAsyncMethod);
+ copy->async = original->async;
+ copy->finish = original->finish;
+ return copy;
+}
+
+GType
+mm_async_method_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile)) {
+ GType g_define_type_id =
+ g_boxed_type_register_static (g_intern_static_string ("MMAsyncMethod"),
+ (GBoxedCopyFunc) async_method_copy,
+ (GBoxedFreeFunc) async_method_free);
+
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
diff --git a/src/mm-private-boxed-types.h b/src/mm-private-boxed-types.h
index dba8d359..fcdcbb10 100644
--- a/src/mm-private-boxed-types.h
+++ b/src/mm-private-boxed-types.h
@@ -34,6 +34,13 @@ GType mm_str_pair_array_get_type (void) G_GNUC_CONST;
GType mm_pointer_array_get_type (void) G_GNUC_CONST;
#define MM_TYPE_POINTER_ARRAY (mm_pointer_array_get_type ())
+typedef struct {
+ GCallback async;
+ GCallback finish;
+} MMAsyncMethod;
+GType mm_async_method_get_type (void) G_GNUC_CONST;
+#define MM_TYPE_ASYNC_METHOD (mm_async_method_get_type ())
+
G_END_DECLS
#endif /* __MM_PRIVATE_BOXED_TYPES_H__ */