[gnome-builder] egg-binding-set: Use a binding helper
- From: Garrett Regier <gregier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] egg-binding-set: Use a binding helper
- Date: Mon, 18 May 2015 22:44:42 +0000 (UTC)
commit f1ee453a4e0bb67e74b3f676457c5d3ea864ae83
Author: Garrett Regier <garrettregier gmail com>
Date: Sun May 17 17:14:50 2015 -0700
egg-binding-set: Use a binding helper
This removes the duplicated code for bind_full()
and bind_with_closures().
contrib/egg/egg-binding-set.c | 177 +++++++++++++++++++++--------------------
1 files changed, 89 insertions(+), 88 deletions(-)
---
diff --git a/contrib/egg/egg-binding-set.c b/contrib/egg/egg-binding-set.c
index 1e18d61..d28a5b6 100644
--- a/contrib/egg/egg-binding-set.c
+++ b/contrib/egg/egg-binding-set.c
@@ -50,18 +50,17 @@ struct _EggBindingSet
typedef struct
{
- EggBindingSet *set;
- const gchar *source_property;
- const gchar *target_property;
- GObject *target;
- GBinding *binding;
- gpointer user_data;
- GDestroyNotify user_data_destroy;
- GBindingTransformFunc transform_to;
- GBindingTransformFunc transform_from;
- GClosure *transform_to_closure;
- GClosure *transform_from_closure;
- GBindingFlags binding_flags;
+ EggBindingSet *set;
+ const gchar *source_property;
+ const gchar *target_property;
+ GObject *target;
+ GBinding *binding;
+ gpointer user_data;
+ GDestroyNotify user_data_destroy;
+ gpointer transform_to;
+ gpointer transform_from;
+ GBindingFlags binding_flags;
+ guint using_closures : 1;
} LazyBinding;
G_DEFINE_TYPE (EggBindingSet, egg_binding_set, G_TYPE_OBJECT)
@@ -139,8 +138,7 @@ egg_binding_set_connect (EggBindingSet *self,
}
#endif
- if (lazy_binding->transform_to_closure == NULL &&
- lazy_binding->transform_from_closure == NULL)
+ if (!lazy_binding->using_closures)
{
binding = g_object_bind_property_full (self->source,
lazy_binding->source_property,
@@ -159,8 +157,8 @@ egg_binding_set_connect (EggBindingSet *self,
lazy_binding->target,
lazy_binding->target_property,
lazy_binding->binding_flags,
- lazy_binding->transform_to_closure,
- lazy_binding->transform_from_closure);
+ lazy_binding->transform_to,
+ lazy_binding->transform_from);
}
lazy_binding->binding = binding;
@@ -246,8 +244,11 @@ lazy_binding_free (gpointer data)
if (lazy_binding->user_data_destroy)
lazy_binding->user_data_destroy (lazy_binding->user_data);
- g_clear_pointer (&lazy_binding->transform_to_closure, g_closure_unref);
- g_clear_pointer (&lazy_binding->transform_from_closure, g_closure_unref);
+ if (lazy_binding->using_closures)
+ {
+ g_clear_pointer (&lazy_binding->transform_to, g_closure_unref);
+ g_clear_pointer (&lazy_binding->transform_from, g_closure_unref);
+ }
g_slice_free (LazyBinding, lazy_binding);
}
@@ -465,6 +466,64 @@ egg_binding_set_set_source (EggBindingSet *self,
g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_SOURCE]);
}
+void
+egg_binding_set_bind_helper (EggBindingSet *self,
+ const gchar *source_property,
+ gpointer target,
+ const gchar *target_property,
+ GBindingFlags flags,
+ gpointer transform_to,
+ gpointer transform_from,
+ gpointer user_data,
+ GDestroyNotify user_data_destroy,
+ gboolean using_closures)
+{
+ LazyBinding *lazy_binding;
+
+ g_return_if_fail (EGG_IS_BINDING_SET (self));
+ g_return_if_fail (source_property != NULL);
+ g_return_if_fail (self->source == NULL ||
+ g_object_class_find_property (G_OBJECT_GET_CLASS (self->source),
+ source_property) != NULL);
+ g_return_if_fail (G_IS_OBJECT (target));
+ g_return_if_fail (target_property != NULL);
+ g_return_if_fail (g_object_class_find_property (G_OBJECT_GET_CLASS (target),
+ target_property) != NULL);
+ g_return_if_fail (target != (gpointer)self ||
+ strcmp (source_property, target_property) != 0);
+
+ lazy_binding = g_slice_new0 (LazyBinding);
+ lazy_binding->set = self;
+ lazy_binding->source_property = g_intern_string (source_property);
+ lazy_binding->target_property = g_intern_string (target_property);
+ lazy_binding->target = target;
+ lazy_binding->binding_flags = flags | G_BINDING_SYNC_CREATE;
+ lazy_binding->user_data = user_data;
+ lazy_binding->user_data_destroy = user_data_destroy;
+ lazy_binding->transform_to = transform_to;
+ lazy_binding->transform_from = transform_from;
+
+ if (using_closures)
+ {
+ lazy_binding->using_closures = TRUE;
+
+ if (transform_to != NULL)
+ g_closure_sink (g_closure_ref (transform_to));
+
+ if (transform_from != NULL)
+ g_closure_sink (g_closure_ref (transform_from));
+ }
+
+ g_object_weak_ref (target,
+ egg_binding_set__target_weak_notify,
+ self);
+
+ g_ptr_array_add (self->lazy_bindings, lazy_binding);
+
+ if (self->source != NULL)
+ egg_binding_set_connect (self, lazy_binding);
+}
+
/**
* egg_binding_set_bind:
* @self: the #EggBindingSet
@@ -528,39 +587,12 @@ egg_binding_set_bind_full (EggBindingSet *self,
gpointer user_data,
GDestroyNotify user_data_destroy)
{
- LazyBinding *lazy_binding;
-
- g_return_if_fail (EGG_IS_BINDING_SET (self));
- g_return_if_fail (source_property != NULL);
- g_return_if_fail (self->source == NULL ||
- g_object_class_find_property (G_OBJECT_GET_CLASS (self->source),
- source_property) != NULL);
- g_return_if_fail (G_IS_OBJECT (target));
- g_return_if_fail (target_property != NULL);
- g_return_if_fail (g_object_class_find_property (G_OBJECT_GET_CLASS (target),
- target_property) != NULL);
- g_return_if_fail (target != (gpointer)self ||
- strcmp (source_property, target_property) != 0);
-
- lazy_binding = g_slice_new0 (LazyBinding);
- lazy_binding->set = self;
- lazy_binding->source_property = g_intern_string (source_property);
- lazy_binding->target_property = g_intern_string (target_property);
- lazy_binding->target = target;
- lazy_binding->binding_flags = flags | G_BINDING_SYNC_CREATE;
- lazy_binding->transform_to = transform_to;
- lazy_binding->transform_from = transform_from;
- lazy_binding->user_data = user_data;
- lazy_binding->user_data_destroy = user_data_destroy;
-
- g_object_weak_ref (target,
- egg_binding_set__target_weak_notify,
- self);
-
- g_ptr_array_add (self->lazy_bindings, lazy_binding);
-
- if (self->source != NULL)
- egg_binding_set_connect (self, lazy_binding);
+ egg_binding_set_bind_helper (self, source_property,
+ target, target_property,
+ flags,
+ transform_to, transform_from,
+ user_data, user_data_destroy,
+ FALSE);
}
/**
@@ -597,41 +629,10 @@ egg_binding_set_bind_with_closures (EggBindingSet *self,
GClosure *transform_to,
GClosure *transform_from)
{
- LazyBinding *lazy_binding;
-
- g_return_if_fail (EGG_IS_BINDING_SET (self));
- g_return_if_fail (source_property != NULL);
- g_return_if_fail (self->source == NULL ||
- g_object_class_find_property (G_OBJECT_GET_CLASS (self->source),
- source_property) != NULL);
- g_return_if_fail (G_IS_OBJECT (target));
- g_return_if_fail (target_property != NULL);
- g_return_if_fail (g_object_class_find_property (G_OBJECT_GET_CLASS (target),
- target_property) != NULL);
- g_return_if_fail (target != (gpointer)self ||
- strcmp (source_property, target_property) != 0);
-
- lazy_binding = g_slice_new0 (LazyBinding);
- lazy_binding->set = self;
- lazy_binding->source_property = g_intern_string (source_property);
- lazy_binding->target_property = g_intern_string (target_property);
- lazy_binding->target = target;
- lazy_binding->binding_flags = flags | G_BINDING_SYNC_CREATE;
- lazy_binding->transform_to_closure = transform_to;
- lazy_binding->transform_from_closure = transform_from;
-
- if (transform_to != NULL)
- g_closure_sink (g_closure_ref (transform_to));
-
- if (transform_from != NULL)
- g_closure_sink (g_closure_ref (transform_from));
-
- g_object_weak_ref (target,
- egg_binding_set__target_weak_notify,
- self);
-
- g_ptr_array_add (self->lazy_bindings, lazy_binding);
-
- if (self->source != NULL)
- egg_binding_set_connect (self, lazy_binding);
+ egg_binding_set_bind_helper (self, source_property,
+ target, target_property,
+ flags,
+ transform_to, transform_from,
+ NULL, NULL,
+ TRUE);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]