From: Leif Middelschulte <leif.middelschulte@gmail.com>

this is a little patch for e_randr related stuff.

- replace the saving of a monitor's EDID with a hash of it.
- rename a variable name



SVN revision: 51508
This commit is contained in:
Leif Middelschulte 2010-08-22 03:49:34 +00:00 committed by Carsten Haitzler
parent 63f07459a0
commit cf91a2561a
4 changed files with 30 additions and 11 deletions

View File

@ -70,6 +70,7 @@ static E_Config_DD *_e_config_eina_rectangle_edd = NULL;
static E_Config_DD *_e_config_screen_info_edd = NULL;
static E_Config_DD *_e_config_screen_restore_info_11_edd = NULL;
static E_Config_DD *_e_config_screen_restore_info_12_edd = NULL;
static E_Config_DD *_e_config_screen_output_edid_hash_edd = NULL;
static E_Config_DD *_e_config_screen_output_restore_info_edd = NULL;
static E_Config_DD *_e_config_screen_crtc_restore_info_edd = NULL;
@ -540,15 +541,22 @@ e_config_init(void)
E_CONFIG_VAL(D, T, w, INT);
E_CONFIG_VAL(D, T, h, INT);
_e_config_screen_output_edid_hash_edd = E_CONFIG_DD_NEW("E_Randr_Output_Edid_Hash", E_Randr_Output_Edid_Hash);
#undef T
#undef D
#define T E_Randr_Output_Edid_Hash
#define D _e_config_screen_output_edid_hash_edd
E_CONFIG_VAL(D, T, hash, INT);
// FIXME: need to totally re-do this randr config stuff - remove the
// union stuff. do this differently to not use unions really. not
// intended for how it is used here really.
_e_config_screen_output_restore_info_edd = E_CONFIG_DD_NEW("E_Randr_Output_Restore_Info", Eina_Rectangle);
_e_config_screen_output_restore_info_edd = E_CONFIG_DD_NEW("E_Randr_Output_Restore_Info", E_Randr_Output_Restore_Info);
#undef T
#undef D
#define T E_Randr_Output_Restore_Info
#define D _e_config_screen_output_restore_info_edd
E_CONFIG_VAL(D, T, edid, STR);
E_CONFIG_SUB(D, T, edid_hash, _e_config_screen_output_edid_hash_edd);
E_CONFIG_VAL(D, T, backlight_level, DOUBLE);
_e_config_screen_crtc_restore_info_edd = E_CONFIG_DD_NEW("E_Randr_Crtc_Restore_Info", E_Randr_Crtc_Restore_Info);
@ -566,6 +574,8 @@ e_config_init(void)
#define T E_Randr_Screen_Restore_Info_12
#define D _e_config_screen_restore_info_12_edd
E_CONFIG_LIST(D, T, crtcs, _e_config_screen_crtc_restore_info_edd);
E_CONFIG_LIST(D, T, outputs_edid_hashes, _e_config_screen_output_edid_hash_edd);
E_CONFIG_VAL(D, T, noutputs, INT);
E_CONFIG_VAL(D, T, output_policy, INT);
E_CONFIG_VAL(D, T, alignment, INT);

View File

@ -32,7 +32,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme;
/* increment this whenever a new set of config values are added but the users
* config doesn't need to be wiped - simply new values need to be put in
*/
#define E_CONFIG_FILE_GENERATION 0x0140
#define E_CONFIG_FILE_GENERATION 0x0141
#define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION)
#define E_EVAS_ENGINE_DEFAULT 0

View File

@ -447,7 +447,7 @@ _e_randr_output_info_new(int nrequested)
.possible_crtcs = NULL,
.preferred_modes = NULL,
.max_backlight = Ecore_X_Randr_Unset,
.current_backlight = Ecore_X_Randr_Unset,
.backlight_level = 0.0,
.edid = NULL,
.edid_length = 0,
.size_mm = {Ecore_X_Randr_Unset, Ecore_X_Randr_Unset},
@ -1058,7 +1058,8 @@ _e_randr_config_find_suiting_config_11(E_Randr_Screen_Restore_Info_11 **restore_
EINA_LIST_FOREACH(e_config->screen_info, cfg_screen_restore_info_iter, screen_restore_info)
{
if (!screen_restore_info) continue ;
/* 'screen_restore_info' should _never_ be NULL, since this functions shouldn't be called due to randr init failing. */
if (!screen_restore_info) continue;
if (screen_restore_info->randr_version != ECORE_X_RANDR_1_1) continue;
restore_info_11 = screen_restore_info->rrvd_restore_info.restore_info_11;
if((sizes = ecore_x_randr_screen_primary_output_sizes_get(e_randr_screen_info->root, &nsizes)))
@ -1135,7 +1136,8 @@ _e_randr_outputs_to_array(Eina_List *outputs_info)
if (!outputs_info || !(ret = malloc(sizeof(Ecore_X_Randr_Output) * eina_list_count(outputs_info)))) return NULL;
EINA_LIST_FOREACH(outputs_info, output_iter, output_info)
ret[i++] = output_info ? output_info->xid : 0;
/* output_info == NULL should _not_ be possible! */
ret[i++] = output_info ? output_info->xid : Ecore_X_Randr_None;
return ret;
}

View File

@ -6,6 +6,7 @@ typedef struct _E_Randr_Screen_Info_11 E_Randr_Screen_Info_11;
typedef struct _E_Randr_Screen_Info_12 E_Randr_Screen_Info_12;
typedef union _E_Randr_Screen_RRVD_Info E_Randr_Screen_RRVD_Info;
typedef struct _E_Randr_Screen_Info E_Randr_Screen_Info;
typedef struct _E_Randr_Output_Edid_Hash E_Randr_Output_Edid_Hash;
typedef struct _E_Randr_Output_Restore_Info E_Randr_Output_Restore_Info;
typedef struct _E_Randr_Crtc_Restore_Info E_Randr_Crtc_Restore_Info;
typedef struct _E_Randr_Screen_Restore_Info_11 E_Randr_Screen_Restore_Info_11;
@ -56,12 +57,12 @@ struct _E_Randr_Output_Info
unsigned char *edid;
unsigned long edid_length;
int max_backlight;
double current_backlight;
double backlight_level;
Ecore_X_Render_Subpixel_Order subpixel_order;
Eina_List *compatible_outputs;
};
struct _E_Randr_Screen_Info_11
struct _E_Randr_Screen_Info_11
{
//List of Ecore_X_Randr_Screen_Size_MM*
Eina_List *sizes;
@ -101,13 +102,17 @@ struct _E_Randr_Screen_Info
};
//Following stuff is just for configuration purposes
struct _E_Randr_Output_Restore_Info
struct _E_Randr_Output_Edid_Hash {
int hash;
};
struct _E_Randr_Output_Restore_Info
{
const char *edid;
E_Randr_Output_Edid_Hash edid_hash;
double backlight_level;
};
struct _E_Randr_Crtc_Restore_Info
struct _E_Randr_Crtc_Restore_Info
{
Eina_Rectangle geometry;
Ecore_X_Randr_Orientation orientation;
@ -124,6 +129,8 @@ struct _E_Randr_Screen_Restore_Info_11
struct _E_Randr_Screen_Restore_Info_12
{
Eina_List *outputs_edid_hashes;
int noutputs;
Eina_List *crtcs;
Ecore_X_Randr_Output_Policy output_policy;
Ecore_X_Randr_Relative_Alignment alignment;