mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
gbinding: warn on failed value transformation
GBinding warned if g_value_transform() returned FALSE, but it didn't warn if there was no transformation available at all. Fix that and test it. https://bugzilla.gnome.org/show_bug.cgi?id=726574
This commit is contained in:
parent
1a8e3074af
commit
d8c14f1378
@ -294,6 +294,7 @@ default_transform (const GValue *value_a,
|
|||||||
{
|
{
|
||||||
if (g_value_transform (value_a, value_b))
|
if (g_value_transform (value_a, value_b))
|
||||||
goto done;
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
g_warning ("%s: Unable to convert a value of type %s to a "
|
g_warning ("%s: Unable to convert a value of type %s to a "
|
||||||
"value of type %s",
|
"value of type %s",
|
||||||
@ -303,7 +304,6 @@ default_transform (const GValue *value_a,
|
|||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
g_value_copy (value_a, value_b);
|
g_value_copy (value_a, value_b);
|
||||||
|
|
||||||
|
@ -612,6 +612,29 @@ binding_unbind (void)
|
|||||||
g_object_unref (target);
|
g_object_unref (target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
binding_fail (void)
|
||||||
|
{
|
||||||
|
BindingSource *source = g_object_new (binding_source_get_type (), NULL);
|
||||||
|
BindingTarget *target = g_object_new (binding_target_get_type (), NULL);
|
||||||
|
GBinding *binding;
|
||||||
|
|
||||||
|
/* double -> boolean is not supported */
|
||||||
|
binding = g_object_bind_property (source, "value",
|
||||||
|
target, "toggle",
|
||||||
|
G_BINDING_DEFAULT);
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (binding), (gpointer *) &binding);
|
||||||
|
|
||||||
|
g_test_expect_message ("GLib-GObject", G_LOG_LEVEL_WARNING,
|
||||||
|
"*Unable to convert*double*boolean*");
|
||||||
|
g_object_set (source, "value", 1.0, NULL);
|
||||||
|
g_test_assert_expected_messages ();
|
||||||
|
|
||||||
|
g_object_unref (source);
|
||||||
|
g_object_unref (target);
|
||||||
|
g_assert (binding == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc, char *argv[])
|
main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -629,6 +652,7 @@ main (int argc, char *argv[])
|
|||||||
g_test_add_func ("/binding/invert-boolean", binding_invert_boolean);
|
g_test_add_func ("/binding/invert-boolean", binding_invert_boolean);
|
||||||
g_test_add_func ("/binding/same-object", binding_same_object);
|
g_test_add_func ("/binding/same-object", binding_same_object);
|
||||||
g_test_add_func ("/binding/unbind", binding_unbind);
|
g_test_add_func ("/binding/unbind", binding_unbind);
|
||||||
|
g_test_add_func ("/binding/fail", binding_fail);
|
||||||
|
|
||||||
return g_test_run ();
|
return g_test_run ();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user