forked from enlightenment/enlightenment
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:
parent
46547f3e62
commit
62e79c7af0
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue