+gboolean parse_keyval_enum_color(const gchar *group, const gchar *key, int *val, guint *val_rgba,
+ const char **names, const guint *predef_rgba, int n)
+{
+ gchar *ret;
+ int i;
+
+ ret = g_key_file_get_value(ui.config_data, group, key, NULL);
+ if (ret==NULL) return FALSE;
+ for (i=0; i<n; i++) {
+ if (!names[i][0]) continue; // "" is for invalid values
+ if (!g_ascii_strcasecmp(ret, names[i]))
+ { *val = i; *val_rgba = predef_rgba[i]; g_free(ret); return TRUE; }
+ }
+ if (ret[0]=='#') {
+ *val = COLOR_OTHER;
+ *val_rgba = strtoul(ret+1, NULL, 16);
+ g_free(ret);
+ return TRUE;
+ }
+ return FALSE;
+}
+