+static void
+gvalue_set_from_double (GValue *gvalue, double value)
+{
+ if (G_TYPE_IS_FUNDAMENTAL (G_VALUE_TYPE (gvalue)))
+ {
+ switch (gvalue->g_type)
+ {
+ case G_TYPE_DOUBLE:
+ g_value_set_double (gvalue, value);
+ break;
+ case G_TYPE_FLOAT:
+ g_value_set_float (gvalue, value);
+ break;
+ case G_TYPE_ULONG:
+ g_value_set_ulong (gvalue, value);
+ break;
+ case G_TYPE_LONG:
+ g_value_set_long (gvalue, value);
+ break;
+ case G_TYPE_UINT:
+ g_value_set_uint (gvalue, value);
+ break;
+ case G_TYPE_INT:
+ g_value_set_int (gvalue, value);
+ break;
+ case G_TYPE_UCHAR:
+ g_value_set_uchar (gvalue, value);
+ break;
+ case G_TYPE_CHAR:
+ g_value_set_char (gvalue, value);
+ break;
+ case G_TYPE_BOOLEAN:
+ g_value_set_boolean (gvalue, ((fabs (value) > 0.5) ? 1 : 0));
+ break;
+ }
+ }
+ else
+ {
+ g_warning ("SpiValue change requested for a non-fundamental type\n");
+ }
+}