randr: remember crtcid for fast lookup on reconnect
When an output is set inactive, it is disconnected from a crtc. Now we remember the id of the last crtc it was connected to, so we get a faster lookup on reconnect.
This commit is contained in:
parent
5180b69e33
commit
55b4ad41d1
|
@ -475,6 +475,7 @@ _e_randr_load(void)
|
||||||
output->is_lid = _e_randr_is_lid(output);
|
output->is_lid = _e_randr_is_lid(output);
|
||||||
output->edid = _e_randr_output_edid_string_get(root, output->xid);
|
output->edid = _e_randr_output_edid_string_get(root, output->xid);
|
||||||
output->status = ecore_x_randr_output_connection_status_get(root, output->xid);
|
output->status = ecore_x_randr_output_connection_status_get(root, output->xid);
|
||||||
|
output->crtcid = ecore_x_randr_output_crtc_get(root, output->xid);
|
||||||
output->cfg = _e_randr_config_output_find(output);
|
output->cfg = _e_randr_config_output_find(output);
|
||||||
if (!output->cfg)
|
if (!output->cfg)
|
||||||
{
|
{
|
||||||
|
@ -781,6 +782,7 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
|
||||||
if ((!output->crtc) || (output->crtc->xid == 0)) unknown = EINA_TRUE;
|
if ((!output->crtc) || (output->crtc->xid == 0)) unknown = EINA_TRUE;
|
||||||
|
|
||||||
/* connected */
|
/* connected */
|
||||||
|
output->crtcid = ev->crtc;
|
||||||
if ((ev->crtc != 0) && ((!unknown) && (output->crtc->xid != ev->crtc)))
|
if ((ev->crtc != 0) && ((!unknown) && (output->crtc->xid != ev->crtc)))
|
||||||
{
|
{
|
||||||
/* remove from old crtc */
|
/* remove from old crtc */
|
||||||
|
@ -1049,17 +1051,17 @@ _e_randr_output_crtc_find(E_Randr_Output *output)
|
||||||
int num = 0, i = 0;
|
int num = 0, i = 0;
|
||||||
int nmodes, pref;
|
int nmodes, pref;
|
||||||
|
|
||||||
/* grab the root window */
|
|
||||||
root = ecore_x_window_root_first_get();
|
|
||||||
|
|
||||||
/* check if current is available */
|
/* check if current is available */
|
||||||
if ((crtc = _e_randr_crtc_find(ecore_x_randr_output_crtc_get(root, output->xid))))
|
if ((crtc = _e_randr_crtc_find(output->crtcid)))
|
||||||
{
|
{
|
||||||
if (!crtc->outputs)
|
if (!crtc->outputs)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
crtc = NULL;
|
crtc = NULL;
|
||||||
|
|
||||||
|
/* grab the root window */
|
||||||
|
root = ecore_x_window_root_first_get();
|
||||||
|
|
||||||
/* get a list of possible crtcs for this output */
|
/* get a list of possible crtcs for this output */
|
||||||
possible = ecore_x_randr_output_possible_crtcs_get(root, output->xid, &num);
|
possible = ecore_x_randr_output_possible_crtcs_get(root, output->xid, &num);
|
||||||
if (num == 0) goto error;
|
if (num == 0) goto error;
|
||||||
|
@ -1096,6 +1098,7 @@ done:
|
||||||
free(possible);
|
free(possible);
|
||||||
free(modes);
|
free(modes);
|
||||||
|
|
||||||
|
output->crtcid = crtc->xid;
|
||||||
output->crtc = crtc;
|
output->crtc = crtc;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1302,6 +1305,7 @@ _e_randr_output_active_set(E_Randr_Output *output, Eina_Bool active)
|
||||||
output->crtc->outputs =
|
output->crtc->outputs =
|
||||||
eina_list_remove(output->crtc->outputs, output);
|
eina_list_remove(output->crtc->outputs, output);
|
||||||
e_randr->active--;
|
e_randr->active--;
|
||||||
|
output->crtc = NULL;
|
||||||
printf("RR: ... remove output for crtc now\n");
|
printf("RR: ... remove output for crtc now\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ struct _E_Randr_Output
|
||||||
|
|
||||||
E_Config_Randr_Output *cfg;
|
E_Config_Randr_Output *cfg;
|
||||||
E_Randr_Crtc *crtc;
|
E_Randr_Crtc *crtc;
|
||||||
|
Ecore_X_Randr_Crtc crtcid;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Randr_Crtc
|
struct _E_Randr_Crtc
|
||||||
|
|
Loading…
Reference in New Issue