raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=f8bda510a77aa90264fe178fa2f1ca1d05fcaf85

commit f8bda510a77aa90264fe178fa2f1ca1d05fcaf85
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Sep 28 18:44:08 2019 +0100

    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.
---
 src/bin/e_randr2.c | 35 +++++++++++++++++++++++++++++------
 1 file changed, 29 insertions(+), 6 deletions(-)

diff --git a/src/bin/e_randr2.c b/src/bin/e_randr2.c
index 89617a995..4b525f979 100644
--- a/src/bin/e_randr2.c
+++ b/src/bin/e_randr2.c
@@ -720,6 +720,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
         int lid_screens = 0;
         int close_lid_screens = 0;
         int external_screens = 0;
+        int prev_external_screens = 0;
         E_Randr2 *rtemp;
 
         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)
                {
+                  printf("RRR: 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)
                     {
+                       printf("RRR: is lid, lid++\n");
                        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
                     {
-                       if ((s->info.connected) && (s->config.enabled))
-                         external_screens++;
+                       if (s->info.connected)
+                         {
+                            printf("RRR: is not lid, is connected, ext++\n");
+                            external_screens++;
+                         }
+                       else
+                         {
+                            printf("RRR: is not lid, is not connected\n");
+                         }
+                    }
+               }
+             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\n", lid_screens, 
close_lid_screens, 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);
           }
         printf("RRR: change = %i\n", change);
@@ -759,7 +782,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
         if (change)
           {
              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");
                   change = EINA_FALSE;
@@ -774,7 +797,7 @@ _cb_screen_change_delay(void *data EINA_UNUSED)
                   // force dpms...
                }
              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");
                   change = EINA_FALSE;

-- 


Reply via email to