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 struct _E_Randr_Screen_Info_11
{ {
//List of Ecore_X_Randr_Screen_Size_MM* Ecore_X_Randr_Screen_Size_MM *sizes;
Eina_List *sizes; int nsizes;
int csize_index; int csize_index;
Ecore_X_Randr_Orientation corientation; Ecore_X_Randr_Orientation corientation;
Ecore_X_Randr_Orientation orientations; Ecore_X_Randr_Orientation orientations;
//List of Ecore_X_Randr_Refresh_Rate* Ecore_X_Randr_Refresh_Rate **rates;
Eina_List *rates; int *nrates; // size is nsizes
Ecore_X_Randr_Refresh_Rate current_rate; 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; E_Randr_Screen_Info_11 *randr_info_11 = NULL;
Ecore_X_Randr_Screen_Size_MM *sizes = NULL; Ecore_X_Randr_Screen_Size_MM *sizes = NULL;
Ecore_X_Randr_Refresh_Rate *rates = NULL; Ecore_X_Randr_Refresh_Rate *rates = NULL;
Eina_List *rates_list; int i, nsizes;
int i, j, nsizes, nrates;
EINA_SAFETY_ON_TRUE_RETURN_VAL(E_RANDR_11_NO, NULL); 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))) if (!(sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info.root, &nsizes)))
goto _info_11_new_fail; goto _info_11_new_fail;
for (i = 0; i < nsizes; i++) randr_info_11->sizes = sizes, randr_info_11->nsizes = nsizes;
if (!(randr_info_11->sizes = eina_list_append(randr_info_11->sizes, &sizes[i])))
goto _info_11_new_fail_sizes;
ecore_x_randr_screen_primary_output_current_size_get(e_randr_screen_info.root, NULL, NULL, NULL, NULL, &(randr_info_11->csize_index)); 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->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->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++) 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, &randr_info_11->nrates[i])))
if (!(rates = ecore_x_randr_screen_primary_output_refresh_rates_get(e_randr_screen_info.root, i, &nrates)))
return EINA_FALSE; return EINA_FALSE;
for (j = 0; j < nrates; j++) randr_info_11->rates[i] = rates;
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->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root); randr_info_11->current_rate = ecore_x_randr_screen_primary_output_current_refresh_rate_get(e_randr_screen_info.root);
return randr_info_11; 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: _info_11_new_fail:
free(randr_info_11); free(randr_info_11);
return NULL; return NULL;
@ -68,23 +56,14 @@ _info_11_new_fail:
void void
_11_screen_info_free(E_Randr_Screen_Info_11 *screen_info) _11_screen_info_free(E_Randr_Screen_Info_11 *screen_info)
{ {
int x;
EINA_SAFETY_ON_NULL_RETURN(screen_info); EINA_SAFETY_ON_NULL_RETURN(screen_info);
if (screen_info->sizes) for (x = 0; x < screen_info->nsizes; x++)
{ free(screen_info->rates[x]);
free(eina_list_nth(screen_info->sizes, 0)); free(screen_info->sizes);
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;
}
free(screen_info); 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 (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; rate = e_randr_screen_info.rrvd_info.randr_info_11->current_rate;
ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation; ori = e_randr_screen_info.rrvd_info.randr_info_11->corientation;
ss->size.width = size->width; ss->size.width = size->width;
@ -94,8 +96,7 @@ e_randr_11_serialized_setup_free(E_Randr_Serialized_Setup_11 *ss_11)
Eina_Bool Eina_Bool
_11_try_restore_configuration(void) _11_try_restore_configuration(void)
{ {
Ecore_X_Randr_Screen_Size_MM *stored_size, *size, *sizes; Ecore_X_Randr_Screen_Size_MM *stored_size, *sizes;
Eina_List *iter;
int i = 0, nsizes; int i = 0, nsizes;
#define SIZE_EQUAL(size) \ #define SIZE_EQUAL(size) \
@ -108,9 +109,10 @@ _11_try_restore_configuration(void)
stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size; stored_size = &e_config->randr_serialized_setup->serialized_setup_11->size;
if (e_randr_screen_info.randr_version == ECORE_X_RANDR_1_1) 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); return ecore_x_randr_screen_primary_output_size_set(e_randr_screen_info.root, i);
} }