randr: allocate hot-plugged outputs

This commit is contained in:
Sebastian Dransfeld 2014-03-05 12:05:53 +01:00
parent 11e21fd1ff
commit 5c6eed2307
1 changed files with 63 additions and 45 deletions

View File

@ -622,10 +622,26 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
output = _e_randr_output_find(ev->output);
if (!output)
{
fprintf(stderr, "E_RANDR: Weird, a new output?\n");
E_Config_Randr_Output *output_cfg = NULL;
Ecore_X_Window root;
root = ecore_x_window_root_first_get();
output = E_NEW(E_Randr_Output, 1);
if (!output) goto error;
output_cfg = _e_randr_config_output_find(ev->output);
if (!output_cfg)
output_cfg = _e_randr_config_output_new(root, ev->output);
if (!output_cfg) goto error;
e_randr->outputs = eina_list_append(e_randr->outputs, output);
output->cfg = output_cfg;
output->name = ecore_x_randr_output_name_get(root, output->cfg->xid, NULL);
output->is_lid = _e_randr_is_lid(output);
changed = EINA_TRUE;
}
else
{
/* we know this output */
if (output->is_lid && _e_randr_lid_is_closed)
{
@ -672,7 +688,6 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
changed = EINA_TRUE;
}
}
}
/* save the config if anything changed or we added a new one */
if (changed)
@ -684,6 +699,9 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
}
return ECORE_CALLBACK_RENEW;
error:
free(output);
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool