+static void parse_desktop_entry_value(gchar *key, const gchar *val,
+ ObtDDParse *parse, gboolean *error)
+{
+ ObtDDParseValue v, *pv;
+
+ /* figure out value type */
+ v.type = OBT_DDPARSE_NUM_VALUE_TYPES;
+ /* XXX do this part */
+
+ /* parse the value */
+ switch (v.type) {
+ case OBT_DDPARSE_STRING:
+ v.value.string = parse_value_string(val, FALSE, NULL, parse, error);
+ g_assert(v.value.string);
+ break;
+ case OBT_DDPARSE_LOCALESTRING:
+ v.value.string = parse_value_string(val, TRUE, NULL, parse, error);
+ g_assert(v.value.string);
+ break;
+ case OBT_DDPARSE_STRINGS:
+ v.value.strings.s = parse_value_string(val, FALSE, &v.value.strings.n,
+ parse, error);
+ g_assert(v.value.strings.s);
+ g_assert(v.value.strings.n);
+ break;
+ case OBT_DDPARSE_LOCALESTRINGS:
+ v.value.strings.s = parse_value_string(val, TRUE, &v.value.strings.n,
+ parse, error);
+ g_assert(v.value.strings.s);
+ g_assert(v.value.strings.n);
+ break;
+ case OBT_DDPARSE_BOOLEAN:
+ v.value.boolean = parse_value_boolean(val, parse, error);
+ break;
+ case OBT_DDPARSE_NUMERIC:
+ v.value.numeric = parse_value_numeric(val, parse, error);
+ break;
+ default:
+ g_assert_not_reached();
+ }
+
+ pv = g_slice_new(ObtDDParseValue);
+ *pv = v;
+ g_hash_table_insert(parse->group->key_hash, key, pv);
+}
+
+GHashTable* obt_ddparse_file(const gchar *name, GSList *paths)