forked from enlightenment/enlightenment
e randr - fix plug/unplug of external screen
it seems some logic to stop internal screen fake plug/unplugs from interfering were hurting external screen plug/unplug. fix makes that work again.
This commit is contained in:
parent
6d8a1bd3fe
commit
f8bda510a7
|
@ -720,6 +720,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
|
||||||
int lid_screens = 0;
|
int lid_screens = 0;
|
||||||
int close_lid_screens = 0;
|
int close_lid_screens = 0;
|
||||||
int external_screens = 0;
|
int external_screens = 0;
|
||||||
|
int prev_external_screens = 0;
|
||||||
E_Randr2 *rtemp;
|
E_Randr2 *rtemp;
|
||||||
|
|
||||||
printf("RRR: reconfigure screens due to event...\n");
|
printf("RRR: reconfigure screens due to event...\n");
|
||||||
|
@ -738,19 +739,41 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
|
||||||
}
|
}
|
||||||
EINA_LIST_FOREACH(rtemp->screens, l, s)
|
EINA_LIST_FOREACH(rtemp->screens, l, s)
|
||||||
{
|
{
|
||||||
|
printf("RRR: scr: %s lid=%i conn=%i\n", s->id, s->info.is_lid, s->info.connected);
|
||||||
// if (!s->id) continue;
|
// if (!s->id) continue;
|
||||||
if (s->info.is_lid)
|
if (s->info.is_lid)
|
||||||
{
|
{
|
||||||
|
printf("RRR: is lid, lid++\n");
|
||||||
lid_screens++;
|
lid_screens++;
|
||||||
if (s->info.lid_closed) close_lid_screens++;
|
if (s->info.lid_closed)
|
||||||
|
{
|
||||||
|
printf("RRR: is lid, is closed, closed++\n");
|
||||||
|
close_lid_screens++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((s->info.connected) && (s->config.enabled))
|
if (s->info.connected)
|
||||||
|
{
|
||||||
|
printf("RRR: is not lid, is connected, ext++\n");
|
||||||
external_screens++;
|
external_screens++;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("RRR: is not lid, is not connected\n");
|
||||||
}
|
}
|
||||||
printf("RRR: lids=%i closed=%i ext=%i\n", lid_screens, close_lid_screens, external_screens);
|
}
|
||||||
|
}
|
||||||
|
EINA_LIST_FOREACH(e_randr2->screens, l, s)
|
||||||
|
{
|
||||||
|
printf("RRR: prev_scr: %s lid=%i conn=%i\n", s->id, s->info.is_lid, s->info.connected);
|
||||||
|
// if (!s->id) continue;
|
||||||
|
if (!s->info.is_lid)
|
||||||
|
{
|
||||||
|
if (s->info.connected) prev_external_screens++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("RRR: lids=%i closed=%i ext=%i prev_ext=%i\n", lid_screens, close_lid_screens, external_screens, prev_external_screens);
|
||||||
_info_free(rtemp);
|
_info_free(rtemp);
|
||||||
}
|
}
|
||||||
printf("RRR: change = %i\n", change);
|
printf("RRR: change = %i\n", change);
|
||||||
|
@ -759,7 +782,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
|
||||||
if (change)
|
if (change)
|
||||||
{
|
{
|
||||||
if ((lid_screens > 0) && (close_lid_screens == lid_screens) &&
|
if ((lid_screens > 0) && (close_lid_screens == lid_screens) &&
|
||||||
(external_screens == 0))
|
(external_screens == 0) && (external_screens == prev_external_screens))
|
||||||
{
|
{
|
||||||
printf("RRR: skip change with all lids closed and no ext\n");
|
printf("RRR: skip change with all lids closed and no ext\n");
|
||||||
change = EINA_FALSE;
|
change = EINA_FALSE;
|
||||||
|
@ -774,7 +797,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
|
||||||
// force dpms...
|
// force dpms...
|
||||||
}
|
}
|
||||||
if ((lid_screens > 0) && (close_lid_screens < lid_screens) &&
|
if ((lid_screens > 0) && (close_lid_screens < lid_screens) &&
|
||||||
(external_screens == 0))
|
(external_screens == 0) && (external_screens == prev_external_screens))
|
||||||
{
|
{
|
||||||
printf("RRR: skip change with lid screens open and no ext\n");
|
printf("RRR: skip change with lid screens open and no ext\n");
|
||||||
change = EINA_FALSE;
|
change = EINA_FALSE;
|
||||||
|
|
Loading…
Reference in New Issue