Remove poller code for now (broken, does not work as expected, etc,

etc).

Add exists field for crtc and output.
Fix output clones and connection status get to use the correct output.
Add some notes and printfs.

Signed-off-by: Christopher Michael <cp.michael@samsung.com>

SVN revision: 84227
This commit is contained in:
Christopher Michael 2013-02-19 11:01:11 +00:00 committed by Christopher Michael
parent bf6d1d43ae
commit bc23ef529c
1 changed files with 22 additions and 25 deletions

View File

@ -12,14 +12,11 @@ static Eina_Bool _e_randr_event_cb_crtc_change(void *data EINA_UNUSED, int type
static Eina_Bool _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event);
static Eina_Bool _e_randr_event_cb_property_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED);
static Eina_Bool _e_randr_poller_cb_check(void *data EINA_UNUSED);
/* local variables */
static Eina_List *_randr_event_handlers = NULL;
static E_Config_DD *_e_randr_edd = NULL;
static E_Config_DD *_e_randr_crtc_edd = NULL;
static E_Config_DD *_e_randr_output_edd = NULL;
static Ecore_Poller *_e_randr_poller = NULL;
/* external variables */
EAPI E_Randr_Config *e_randr_cfg = NULL;
@ -63,12 +60,6 @@ e_randr_init(void)
_e_randr_event_cb_property_change, NULL);
}
/* setup poller for when hotplug events happen and the video card
* may not report them */
_e_randr_poller =
ecore_poller_add(ECORE_POLLER_CORE, e_randr_cfg->poll_interval,
_e_randr_poller_cb_check, NULL);
return EINA_TRUE;
}
@ -78,9 +69,6 @@ e_randr_shutdown(void)
/* check if randr is available */
if (!ecore_x_randr_query()) return 1;
/* remove the poller */
if (_e_randr_poller) ecore_poller_del(_e_randr_poller);
if (ecore_x_randr_version_get() >= E_RANDR_VERSION_1_2)
{
Ecore_X_Window root = 0;
@ -135,6 +123,7 @@ _e_randr_config_load(void)
(char *)(&(eroc.clone_count)) -
(char *)(&(eroc)), NULL, NULL);
E_CONFIG_VAL(D, T, connected, UCHAR);
E_CONFIG_VAL(D, T, exists, UCHAR);
/* define edd for crtc config */
_e_randr_crtc_edd =
@ -150,6 +139,7 @@ _e_randr_config_load(void)
E_CONFIG_VAL(D, T, height, INT);
E_CONFIG_VAL(D, T, orient, UINT);
E_CONFIG_VAL(D, T, mode, UINT);
E_CONFIG_VAL(D, T, exists, UCHAR);
E_CONFIG_LIST(D, T, outputs, _e_randr_output_edd);
/* define edd for randr config */
@ -269,6 +259,7 @@ _e_randr_config_new(void)
/* assign the xid */
crtc_cfg->xid = crtcs[i];
crtc_cfg->exists = EINA_TRUE;
/* record the geometry of this crtc in our config */
ecore_x_randr_crtc_geometry_get(root, crtcs[i],
@ -308,8 +299,6 @@ _e_randr_config_new(void)
/* set this output policy */
output_cfg->policy = ECORE_X_RANDR_OUTPUT_POLICY_NONE;
/* TODO: Add code to determine policy */
/* get if this output is the primary */
output_cfg->primary = EINA_FALSE;
if (outputs[j] == primary)
@ -322,18 +311,20 @@ _e_randr_config_new(void)
/* get the clones for this output */
output_cfg->clones =
ecore_x_randr_output_clones_get(root, outputs[i],
ecore_x_randr_output_clones_get(root, outputs[j],
&clone_count);
output_cfg->clone_count = (long)clone_count;
status =
ecore_x_randr_output_connection_status_get(root, outputs[i]);
ecore_x_randr_output_connection_status_get(root, outputs[j]);
output_cfg->connected = EINA_FALSE;
if (status == ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED)
output_cfg->connected = EINA_TRUE;
output_cfg->exists = EINA_TRUE;
/* add this output to the list for this crtc */
crtc_cfg->outputs =
eina_list_append(crtc_cfg->outputs, output_cfg);
@ -411,6 +402,11 @@ _e_randr_config_restore(void)
/* grab the root window */
root = ecore_x_window_root_first_get();
/* FIXME: !!
*
* Optimize and redo this !!!
*/
/* try to get the list of crtcs */
if ((crtcs = ecore_x_randr_crtcs_get(root, &ncrtcs)))
{
@ -504,7 +500,7 @@ _e_randr_event_cb_crtc_change(void *data EINA_UNUSED, int type EINA_UNUSED, void
ev = event;
if (ev->crtc == 0) return ECORE_CALLBACK_RENEW;
printf("E_RANDR Event: Crtc Change\n");
printf("E_RANDR Event: Crtc Change: %d\n", ev->crtc);
EINA_LIST_FOREACH(e_randr_cfg->crtcs, l, crtc_cfg)
{
@ -549,8 +545,11 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
/* TODO: NB: Hmmm, this is problematic :( The spec says we should get an
* event here when an output is disconnected (hotplug) if
* the hardware (video card) is capable of detecting this HOWEVER, in my
* tests, my nvidia card does not detect this */
printf("E_RANDR Event: Output Change\n");
* tests, my nvidia card does not detect this.
*
* To work around this, we have added a poller to check X randr config
* against what we have saved in e_randr_cfg */
printf("E_RANDR Event: Output Change: %d\n", ev->output);
EINA_LIST_FOREACH(e_randr_cfg->crtcs, l, crtc_cfg)
{
@ -578,8 +577,12 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int type EINA_UNUSED, vo
if ((output_cfg->crtc != ev->crtc) ||
(output_cfg->connected != connected))
{
printf("Output Changed: %d\n", ev->output);
printf("\tConnected: %d\n", connected);
output_cfg->crtc = ev->crtc;
output_cfg->connected = connected;
output_cfg->exists = connected;
changed = EINA_TRUE;
}
@ -603,9 +606,3 @@ _e_randr_event_cb_property_change(void *data EINA_UNUSED, int type EINA_UNUSED,
printf("E_RANDR Event: Property Change\n");
return ECORE_CALLBACK_RENEW;
}
static Eina_Bool
_e_randr_poller_cb_check(void *data EINA_UNUSED)
{
return ECORE_CALLBACK_RENEW;
}