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:
Carsten Haitzler 2019-09-28 18:44:08 +01:00
parent 6d8a1bd3fe
commit f8bda510a7
1 changed files with 29 additions and 6 deletions

View File

@ -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;