+static Accessibility_SValue
+gvalue_to_svalue (GValue *gvalue)
+{
+ Accessibility_SValue sval;
+ if (G_VALUE_HOLDS_DOUBLE (gvalue))
+ {
+ sval._d = Accessibility_DOUBLEVAL;
+ sval._u.val_double = g_value_get_double (gvalue);
+ }
+ else if (G_VALUE_HOLDS_FLOAT (gvalue))
+ {
+ sval._d = Accessibility_FLOATVAL;
+ sval._u.val_float = g_value_get_float (gvalue);
+ }
+ else if (G_VALUE_HOLDS_ULONG (gvalue))
+ {
+ sval._d = Accessibility_ULONGVAL;
+ sval._u.val_ulong = g_value_get_ulong (gvalue);
+ }
+ else if (G_VALUE_HOLDS_LONG (gvalue))
+ {
+ sval._d = Accessibility_LONGVAL;
+ sval._u.val_long = g_value_get_long (gvalue);
+ }
+ else if (G_VALUE_HOLDS_UINT (gvalue))
+ {
+ sval._d = Accessibility_USHORTVAL;
+ sval._u.val_ushort = CLAMP (g_value_get_uint (gvalue), 0, G_MAXUSHORT);
+ }
+ else if (G_VALUE_HOLDS_INT (gvalue))
+ {
+ sval._d = Accessibility_SHORTVAL;
+ sval._u.val_short = CLAMP (g_value_get_int (gvalue), G_MINSHORT, G_MAXSHORT);
+ }
+ else
+ {
+ sval._d = Accessibility_SHORTVAL;
+ sval._u.val_short = 0;
+ }
+ return sval;
+}
+
+static void
+gvalue_set_from_svalue (GValue *gvalue, Accessibility_SValue *sval)
+{
+ switch (sval->_d)
+ {
+ case Accessibility_DOUBLEVAL:
+ g_value_init (gvalue, G_TYPE_DOUBLE);
+ g_value_set_double (gvalue, sval->_u.val_double);
+ break;
+ case Accessibility_FLOATVAL:
+ g_value_init (gvalue, G_TYPE_FLOAT);
+ g_value_set_float (gvalue, sval->_u.val_float);
+ break;
+ case Accessibility_ULONGVAL:
+ g_value_init (gvalue, G_TYPE_ULONG);
+ g_value_set_ulong (gvalue, sval->_u.val_ulong);
+ break;
+ case Accessibility_LONGVAL:
+ g_value_init (gvalue, G_TYPE_LONG);
+ g_value_set_long (gvalue, sval->_u.val_long);
+ break;
+ case Accessibility_USHORTVAL:
+ g_value_init (gvalue, G_TYPE_UINT);
+ g_value_set_uint (gvalue, sval->_u.val_ushort);
+ break;
+ case Accessibility_SHORTVAL:
+ g_value_init (gvalue, G_TYPE_INT);
+ g_value_set_int (gvalue, sval->_u.val_short);
+ break;
+ default:
+ g_value_init (gvalue, G_TYPE_INT);
+ g_value_set_int (gvalue, 0);
+ }
+}