diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c index fe06da206..27d2027c6 100644 --- a/src/bin/e_randr.c +++ b/src/bin/e_randr.c @@ -122,6 +122,10 @@ _e_randr_config_load(void) (char *)(&(eroc.edid)) - (char *)(&(eroc)), (char *)(&(eroc.edid_count)) - (char *)(&(eroc)), NULL, NULL); + eet_data_descriptor_element_add(D, "clones", EET_T_UINT, EET_G_VAR_ARRAY, + (char *)(&(eroc.clones)) - (char *)(&(eroc)), + (char *)(&(eroc.clone_count)) - + (char *)(&(eroc)), NULL, NULL); /* define edd for crtc config */ _e_randr_crtc_edd = @@ -288,6 +292,11 @@ _e_randr_config_new(void) ecore_x_randr_output_edid_get(root, outputs[j], &output_cfg->edid_count); + /* get the clones for this output */ + output_cfg->clones = + ecore_x_randr_output_clones_get(root, outputs[i], + &output_cfg->clone_count); + /* add this output to the list for this crtc */ crtc_cfg->outputs = eina_list_append(crtc_cfg->outputs, output_cfg); @@ -327,7 +336,9 @@ _e_randr_config_free(void) /* loop the config outputs on this crtc and free them */ EINA_LIST_FREE(crtc->outputs, output) { + if (output->clones) free(output->clones); if (output->edid) free(output->edid); + E_FREE(output); } diff --git a/src/bin/e_randr.h b/src/bin/e_randr.h index 044eef277..d7411aec6 100644 --- a/src/bin/e_randr.h +++ b/src/bin/e_randr.h @@ -26,6 +26,8 @@ struct _E_Randr_Output_Config unsigned char primary; // flag to indicate if primary output unsigned long edid_count; // monitor's edid length unsigned char *edid; // monitor's edid + unsigned int *clones; // array of clones (each element of type ecore_x_randr output id (xid) + unsigned long clone_count; // number of clones }; struct _E_Randr_Crtc_Config