englebass pushed a commit to branch master.

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

commit 27c1f179847b262d5a4acc870318741cfca7f771
Author: Sebastian Dransfeld <[email protected]>
Date:   Wed Dec 17 11:39:19 2014 +0100

    randr: improve code readability in lid update
    
    Be sure we have active non-lids before deactivating lids.
---
 src/bin/e_randr.c | 37 +++++++++++++++++++++++++++++--------
 1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c
index 9307e54..257e871 100644
--- a/src/bin/e_randr.c
+++ b/src/bin/e_randr.c
@@ -1291,22 +1291,43 @@ _e_randr_lid_update(void)
    E_Randr_Output *output;
    Eina_List *l;
    Eina_Bool changed = EINA_FALSE;
+   int active_nonlid = 0;
 
-   /* loop through connections to find lid */
    changed = EINA_FALSE;
+   /* Find all non-lids */
    EINA_LIST_FOREACH(e_randr->outputs, l, output)
      {
-        if (!output->is_lid) continue;
-        /* only disable lid if we got more than 1 connected output */
-        if ((_e_randr_lid_is_closed) && (output->active) && (e_randr->active > 
1))
+        if (output->is_lid) continue;
+        if (!output->active) continue;
+        active_nonlid++;
+     }
+   if (_e_randr_lid_is_closed && (active_nonlid > 0))
+     {
+        /* Disable lids if closed and we have other monitors */
+        EINA_LIST_FOREACH(e_randr->outputs, l, output)
           {
+             Eina_Bool active;
+
+             if (!output->is_lid) continue;
+             active = output->active;
              _e_randr_output_active_set(output, EINA_FALSE);
-             changed = EINA_TRUE;
+             if (active != output->active) changed = EINA_TRUE;
           }
-        else if (!output->active)
+     }
+   else
+     {
+        /* Enable lids */
+        EINA_LIST_FOREACH(e_randr->outputs, l, output)
           {
-             _e_randr_output_active_set(output, EINA_TRUE);
-             changed = EINA_TRUE;
+             Eina_Bool active;
+
+             if (!output->is_lid) continue;
+             if (output->cfg && output->cfg->connect)
+               {
+                  active = output->active;
+                  _e_randr_output_active_set(output, EINA_TRUE);
+                  if (active != output->active) changed = EINA_TRUE;
+               }
           }
      }
 

-- 


Reply via email to