static GTokenType gimp_config_deserialize_rgb (GValue *value, GParamSpec *prop_spec, GScanner *scanner) { GimpRGB rgb; if (! gimp_scanner_parse_color (scanner, &rgb)) return G_TOKEN_NONE; g_value_set_boxed (value, &rgb); return G_TOKEN_RIGHT_PAREN; }
void color_history_restore (Gimp *gimp) { GFile *file; GScanner *scanner; GTokenType token; g_return_if_fail (GIMP_IS_GIMP (gimp)); file = gimp_personal_rc_gfile ("colorrc"); if (gimp->be_verbose) g_print ("Parsing '%s'\n", gimp_file_get_utf8_name (file)); scanner = gimp_scanner_new_gfile (file, NULL); g_object_unref (file); if (! scanner) return; g_scanner_scope_add_symbol (scanner, 0, "color-history", GINT_TO_POINTER (COLOR_HISTORY)); token = G_TOKEN_LEFT_PAREN; while (g_scanner_peek_next_token (scanner) == token) { token = g_scanner_get_next_token (scanner); switch (token) { case G_TOKEN_LEFT_PAREN: token = G_TOKEN_SYMBOL; break; case G_TOKEN_SYMBOL: if (scanner->value.v_symbol == GINT_TO_POINTER (COLOR_HISTORY)) { while (g_scanner_peek_next_token (scanner) == G_TOKEN_LEFT_PAREN) { GimpRGB color; if (! gimp_scanner_parse_color (scanner, &color)) goto error; color_history_add_from_rc (&color); } } token = G_TOKEN_RIGHT_PAREN; break; case G_TOKEN_RIGHT_PAREN: token = G_TOKEN_LEFT_PAREN; break; default: /* do nothing */ break; } } error: gimp_scanner_destroy (scanner); }