static void g_binding_get_property (GObject *gobject, guint prop_id, GValue *value, GParamSpec *pspec) { GBinding *binding = G_BINDING (gobject); switch (prop_id) { case PROP_SOURCE: g_value_set_object (value, binding->source); break; case PROP_SOURCE_PROPERTY: g_value_set_string (value, binding->source_property); break; case PROP_TARGET: g_value_set_object (value, binding->target); break; case PROP_TARGET_PROPERTY: g_value_set_string (value, binding->target_property); break; case PROP_FLAGS: g_value_set_flags (value, binding->flags); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; } }
static void g_binding_finalize (GObject *gobject) { GBinding *binding = G_BINDING (gobject); g_binding_unbind_internal (binding, FALSE); G_OBJECT_CLASS (g_binding_parent_class)->finalize (gobject); }
static void g_binding_constructed (GObject *gobject) { GBinding *binding = G_BINDING (gobject); /* assert that we were constructed correctly */ g_assert (binding->source != NULL); g_assert (binding->target != NULL); g_assert (binding->source_property != NULL); g_assert (binding->target_property != NULL); /* we assume a check was performed prior to construction - since * g_object_bind_property_full() does it; we cannot fail construction * anyway, so it would be hard for use to properly warn here */ binding->source_pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (binding->source), binding->source_property); binding->target_pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (binding->target), binding->target_property); g_assert (binding->source_pspec != NULL); g_assert (binding->target_pspec != NULL); /* set the default transformation functions here */ binding->transform_s2t = default_transform_to; binding->transform_t2s = default_transform_from; binding->transform_data = NULL; binding->notify = NULL; binding->source_notify = g_signal_connect (binding->source, "notify", G_CALLBACK (on_source_notify), binding); g_object_weak_ref (binding->source, weak_unbind, binding); add_binding_qdata (binding->source, binding); if (binding->flags & G_BINDING_BIDIRECTIONAL) binding->target_notify = g_signal_connect (binding->target, "notify", G_CALLBACK (on_target_notify), binding); if (binding->target != binding->source) { g_object_weak_ref (binding->target, weak_unbind, binding); add_binding_qdata (binding->target, binding); } }
static void g_binding_finalize (GObject *gobject) { GBinding *binding = G_BINDING (gobject); /* dispose of the transformation data */ if (binding->notify != NULL) { binding->notify (binding->transform_data); binding->transform_data = NULL; binding->notify = NULL; } /* we need this in case the source and target instance are still * valid, and it was the GBinding that was unreferenced */ if (binding->source != NULL) { if (binding->source_notify != 0) g_signal_handler_disconnect (binding->source, binding->source_notify); g_object_weak_unref (binding->source, weak_unbind, binding); remove_binding_qdata (binding->source, binding); } if (binding->target != NULL) { if (binding->target_notify != 0) g_signal_handler_disconnect (binding->target, binding->target_notify); g_object_weak_unref (binding->target, weak_unbind, binding); remove_binding_qdata (binding->target, binding); } G_OBJECT_CLASS (g_binding_parent_class)->finalize (gobject); }
GBinding* to_GBinding(void* obj) { return G_BINDING(obj); }