fix ret_size used unitialized

Threshold is fallback for type
calc min/max dir size for threshold only once


SVN revision: 48923
This commit is contained in:
Hannes Janetzek 2010-05-16 21:02:52 +00:00
parent fa5fa3c7e7
commit 3ac99ef29b
1 changed files with 35 additions and 42 deletions

View File

@ -673,7 +673,7 @@ efreet_icon_lookup_icon(Efreet_Icon_Theme *theme, const char *icon_name,
char *icon = NULL, *tmp = NULL;
Efreet_Icon_Theme_Directory *dir;
double minimal_distance = INT_MAX;
unsigned int ret_size;
unsigned int ret_size = 0;
if (!theme || (theme->paths == NULL) || !icon_name || !size)
return NULL;
@ -762,13 +762,10 @@ efreet_icon_directory_size_match(Efreet_Icon_Theme_Directory *dir,
if (dir->type == EFREET_ICON_SIZE_TYPE_FIXED)
return (dir->size.normal == size);
if (dir->type == EFREET_ICON_SIZE_TYPE_SCALABLE)
if ((dir->type == EFREET_ICON_SIZE_TYPE_SCALABLE) ||
(dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD))
return ((dir->size.min < size) && (size < dir->size.max));
if (dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD)
return (((dir->size.normal - dir->size.threshold) < size)
&& (size < (dir->size.normal + dir->size.threshold)));
return 0;
}
@ -786,31 +783,21 @@ efreet_icon_directory_size_distance(Efreet_Icon_Theme_Directory *dir,
if (dir->type == EFREET_ICON_SIZE_TYPE_FIXED)
return (abs(dir->size.normal - size));
if (dir->type == EFREET_ICON_SIZE_TYPE_SCALABLE)
{
if (size < dir->size.min)
return dir->size.min - size;
if (dir->size.max < size)
return size - dir->size.max;
return 0;
}
if (dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD)
if ((dir->type == EFREET_ICON_SIZE_TYPE_SCALABLE) ||
(dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD))
{
#ifdef STRICT_SPEC
if (size < (dir->size.normal - dir->size.threshold))
return (dir->size.min - size);
if ((dir->size.normal + dir->size.threshold) < size)
return (size - dir->size.max);
if (size < dir->size.min)
return (dir->size.min - size);
if (dir->size.max < size)
return (size - dir->size.max);
#else
if (size < (dir->size.normal - dir->size.threshold))
return (dir->size.min / (double)size);
if ((dir->size.normal + dir->size.threshold) < size)
return (size / (double)dir->size.max);
if (size < dir->size.min)
return (dir->size.min / (double)size);
if (dir->size.max < size)
return (size / (double)dir->size.max);
#endif
return 0;
return 0;
}
return 0;
@ -1513,33 +1500,39 @@ efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name)
dir->context = EFREET_ICON_THEME_CONTEXT_MIMETYPES;
}
/* Threshold is fallback */
dir->type = EFREET_ICON_SIZE_TYPE_THRESHOLD;
tmp = efreet_ini_string_get(ini, "Type");
if (tmp)
{
{
if (!strcasecmp(tmp, "Fixed"))
dir->type = EFREET_ICON_SIZE_TYPE_FIXED;
else if (!strcasecmp(tmp, "Scalable"))
dir->type = EFREET_ICON_SIZE_TYPE_SCALABLE;
else if (!strcasecmp(tmp, "Threshold"))
dir->type = EFREET_ICON_SIZE_TYPE_THRESHOLD;
}
dir->size.normal = efreet_ini_int_get(ini, "Size");
val = efreet_ini_int_get(ini, "MinSize");
if (val < 0) dir->size.min = dir->size.normal;
else dir->size.min = val;
val = efreet_ini_int_get(ini, "MaxSize");
if (val < 0) dir->size.max = dir->size.normal;
else dir->size.max = val;
val = efreet_ini_int_get(ini, "Threshold");
if (val < 0) dir->size.threshold = 2;
else dir->size.threshold = val;
if (dir->type == EFREET_ICON_SIZE_TYPE_THRESHOLD)
{
val = efreet_ini_int_get(ini, "Threshold");
if (val < 0) val = 2;
dir->size.max = dir->size.normal + val;
dir->size.min = dir->size.normal - val;
}
else
{
val = efreet_ini_int_get(ini, "MinSize");
if (val < 0) dir->size.min = dir->size.normal;
else dir->size.min = val;
val = efreet_ini_int_get(ini, "MaxSize");
if (val < 0) dir->size.max = dir->size.normal;
else dir->size.max = val;
}
return dir;
}