+ case SR_T_DOUBLE_RANGE:
+ if (sscanf(value, "%lf-%lf", &dlow, &dhigh) != 2) {
+ ret = -1;
+ break;
+ } else {
+ range[0] = g_variant_new_double(dlow);
+ range[1] = g_variant_new_double(dhigh);
+ src->data = g_variant_new_tuple(range, 2);
+ }
+ break;
+ case SR_T_KEYVALUE:
+ /* Expects the argument to be in the form of key=value. */
+ keyval = g_strsplit(value, "=", 2);
+ if (!keyval[0] || !keyval[1]) {
+ g_strfreev(keyval);
+ ret = -1;
+ break;
+ } else {
+ vbl = g_variant_builder_new(G_VARIANT_TYPE_DICTIONARY);
+ g_variant_builder_add(vbl, "{ss}",
+ keyval[0], keyval[1]);
+ src->data = g_variant_builder_end(vbl);
+ g_strfreev(keyval);
+ }
+ break;