more randr code cleanups, fixing a leak and not turning arrays into lists

still a lot of really gross code here that someone needs to take a hammer to


SVN revision: 75791
This commit is contained in:
Mike Blumenkrantz 2012-08-28 13:28:04 +00:00
parent 46547f3e62
commit 62e79c7af0
3 changed files with 22 additions and 41 deletions

View File

@ -93,13 +93,13 @@ struct _E_Randr_Output_Info
struct _E_Randr_Screen_Info_11
{
//List of Ecore_X_Randr_Screen_Size_MM*
Eina_List *sizes;
Ecore_X_Randr_Screen_Size_MM *sizes;
int nsizes;
int csize_index;
Ecore_X_Randr_Orientation corientation;
Ecore_X_Randr_Orientation orientations;
//List of Ecore_X_Randr_Refresh_Rate*
Eina_List *rates;
Ecore_X_Randr_Refresh_Rate **rates;
int *nrates; // size is nsizes
Ecore_X_Randr_Refresh_Rate current_rate;
};

View File

@ -13,8 +13,7 @@ _11_screen_info_new(void)
E_Randr_Screen_Info_11 *randr_info_11 = NULL;
Ecore_X_Randr_Screen_Size_MM *sizes = NULL;
Ecore_X_Randr_Refresh_Rate *rates = NULL;
Eina_List *rates_list;
int i, j, nsizes, nrates;
int i, nsizes;
EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, NULL);
@ -29,33 +28,22 @@ _11_screen_info_new(void)
if (!(sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes)))
goto _info_11_new_fail;
for (i = 0; i < nsizes; i++)
if (!(randr_info_11->sizes = eina_list_append(randr_info_11->sizes, &sizes[i])))
goto _info_11_new_fail_sizes;
randr_info_11->sizes = sizes, randr_info_11->nsizes = nsizes;
ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, NULL, NULL, NULL, NULL, &(randr_info_11->csize_index));
randr_info_11->corientation = ecore_x_randr_screen_primary_output_orientation_get(e_randr_screen_info.root);
randr_info_11->orientations = ecore_x_randr_screen_primary_output_orientations_get(e_randr_screen_info.root);
randr_info_11->rates = malloc(sizeof(Ecore_X_Randr_Refresh_Rate*) * nsizes);
randr_info_11->nrates = malloc(sizeof(int) * nsizes);
for (i = 0; i < nsizes; i++)
{
rates_list = NULL;
if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &nrates)))
if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &randr_info_11->nrates[i])))
return EINA_FALSE;
for (j = 0; j < nrates; j++)
if (!(rates_list = eina_list_append(rates_list, &rates[j])))
goto _info_11_new_fail_rates_list;
if (!(randr_info_11->rates = eina_list_append(randr_info_11->rates, rates_list)))
goto _info_11_new_fail_rates;
randr_info_11->rates[i] = rates;
}
randr_info_11->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
return randr_info_11;
_info_11_new_fail_rates_list:
eina_list_free(rates_list);
_info_11_new_fail_rates:
free(rates);
_info_11_new_fail_sizes:
free(sizes);
_info_11_new_fail:
free(randr_info_11);
return NULL;
@ -68,23 +56,14 @@ _info_11_new_fail:
void
_11_screen_info_free(E_Randr_Screen_Info_11 *screen_info)
{
int x;
EINA_SAFETY_ON_NULL_RETURN(screen_info);
if (screen_info->sizes)
{
free(eina_list_nth(screen_info->sizes, 0));
eina_list_free(screen_info->sizes);
screen_info->sizes = NULL;
}
if (screen_info->rates)
{
/* this may be leaking, but at least it will be valid */
eina_list_free(eina_list_nth(screen_info->rates, 0));
eina_list_free(screen_info->rates);
screen_info->rates = NULL;
}
for (x = 0; x < screen_info->nsizes; x++)
free(screen_info->rates[x]);
free(screen_info->sizes);
free(screen_info);
screen_info = NULL;
}
/*****************************************************************

View File

@ -22,7 +22,9 @@ _serialized_setup_11_new(void)
if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
{
if (!(size = (Ecore_X_Randr_Screen_Size_MM *)eina_list_data_get(eina_list_nth(e_randr_screen_info.rrvd_info.randr_info_11->sizes, e_randr_screen_info.rrvd_info.randr_info_11->csize_index)))) goto _serialized_setup_11_new_failed_free_ss;
if (e_randr_screen_info.rrvd_info.randr_info_11->csize_index >= e_randr_screen_info.rrvd_info.randr_info_11->nsizes) goto _serialized_setup_11_new_failed_free_ss;
size = e_randr_screen_info.rrvd_info.randr_info_11->sizes + e_randr_screen_info.rrvd_info.randr_info_11->csize_index;
if (!size) goto _serialized_setup_11_new_failed_free_ss;;
rate = e_randr_screen_info.rrvd_info.randr_info_11->current_rate;
ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation;
ss->size.width = size->width;
@ -94,8 +96,7 @@ e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11)
Eina_Bool
_11_try_restore_configuration(void)
{
Ecore_X_Randr_Screen_Size_MM *stored_size, *size, *sizes;
Eina_List *iter;
Ecore_X_Randr_Screen_Size_MM *stored_size, *sizes;
int i = 0, nsizes;
#define SIZE_EQUAL(size) \
@ -108,9 +109,10 @@ _11_try_restore_configuration(void)
stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size;
if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1)
{
EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_11->sizes, iter, size)
int x;
for (x = 0; x < e_randr_screen_info.rrvd_info.randr_info_11->nsizes; x++)
{
if (SIZE_EQUAL(*size))
if (SIZE_EQUAL(e_randr_screen_info.rrvd_info.randr_info_11->sizes[x]))
{
return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
}