mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -05:00
Make color constants work without warnings
The code for defining a color as a constant had broken logic: it would try to parse the color first as an double, then as an integer; the second attempt would produce an error about overwriting the already-set-GError. Then it would clear the error and store the constant as a color. Use the fact that colors have to start with a letter or #, divide the space of constants into: - Integers - Doubles - Colors so we get good error messages. Based on a patch by William Jon McCann <jmccann@redhat.com>. Note that this breaks the ability to specify an integer constant as identical to another integer constant (the same didn't work for doubles.) I think this was an accidental side effect of the code and not something that was intentional or people were relying on https://bugzilla.gnome.org/show_bug.cgi?id=632116
This commit is contained in:
parent
52bc675fcb
commit
af715f71e7
@ -902,9 +902,20 @@ parse_toplevel_element (GMarkupParseContext *context,
|
|||||||
NULL))
|
NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (strchr (value, '.') && parse_double (value, &dval, context, error))
|
/* We don't know how a a constant is going to be used, so we have guess its
|
||||||
|
* type from its contents:
|
||||||
|
*
|
||||||
|
* - Starts like a number and contains a '.': float constant
|
||||||
|
* - Starts like a number and doesn't contain a '.': int constant
|
||||||
|
* - Starts with anything else: a color constant.
|
||||||
|
* (colors always start with # or a letter)
|
||||||
|
*/
|
||||||
|
if (value[0] == '.' || value[0] == '+' || value[0] == '-' || (value[0] >= '0' && value[0] <= '9'))
|
||||||
{
|
{
|
||||||
g_clear_error (error);
|
if (strchr (value, '.'))
|
||||||
|
{
|
||||||
|
if (!parse_double (value, &dval, context, error))
|
||||||
|
return;
|
||||||
|
|
||||||
if (!meta_theme_define_float_constant (info->theme,
|
if (!meta_theme_define_float_constant (info->theme,
|
||||||
name,
|
name,
|
||||||
@ -915,9 +926,10 @@ parse_toplevel_element (GMarkupParseContext *context,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (parse_positive_integer (value, &ival, context, info->theme, error))
|
else
|
||||||
{
|
{
|
||||||
g_clear_error (error);
|
if (!parse_positive_integer (value, &ival, context, info->theme, error))
|
||||||
|
return;
|
||||||
|
|
||||||
if (!meta_theme_define_int_constant (info->theme,
|
if (!meta_theme_define_int_constant (info->theme,
|
||||||
name,
|
name,
|
||||||
@ -928,10 +940,9 @@ parse_toplevel_element (GMarkupParseContext *context,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_clear_error (error);
|
|
||||||
|
|
||||||
if (!meta_theme_define_color_constant (info->theme,
|
if (!meta_theme_define_color_constant (info->theme,
|
||||||
name,
|
name,
|
||||||
value,
|
value,
|
||||||
|
Loading…
Reference in New Issue
Block a user