raster pushed a commit to branch master.

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

commit 9677b71902a0554a6f4b49b5f654e75fe80dbdc9
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Wed Dec 17 09:12:32 2014 +0900

    Revert "randr: Don't track active outputs"
    
    This reverts commit 01f43e3618d07917a15345e2063b9efd866e4b7d.
    
    this broke nvidia randr - i cant tunr my screens on or off anymore.
---
 src/bin/e_randr.c | 39 ++++++++++++---------------------------
 src/bin/e_randr.h |  1 +
 2 files changed, 13 insertions(+), 27 deletions(-)

diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c
index d780129..0ffee54 100644
--- a/src/bin/e_randr.c
+++ b/src/bin/e_randr.c
@@ -36,7 +36,6 @@ static Eina_Bool 
_e_randr_output_mode_valid(Ecore_X_Randr_Mode mode, Ecore_X_Ran
 static void      _e_randr_output_active_set(E_Randr_Output *output, Eina_Bool 
connected);
 //static int       _e_randr_config_output_cmp(const void *a, const void *b);
 static char     *_e_randr_output_name_get(Ecore_X_Window root, 
Ecore_X_Randr_Output output);
-static int       _e_randr_active_get(void);
 
 /* local variables */
 static Eina_List *_randr_event_handlers = NULL;
@@ -623,13 +622,10 @@ _e_randr_apply(void)
         /* if the output does not fit, disable it */
         if (((x + w) > maxw) || ((y + h) > maxh) || (mode == 0))
           {
-             Eina_List *ln;
-
              printf("RRR2:   crtc does not fit - off\n");
+             /* TODO: This is wrong, should remove output from crtc->outputs */
              ecore_x_randr_crtc_settings_set(root, crtc->xid, NULL, 0, 0, 0, 0,
                                              ECORE_X_RANDR_ORIENTATION_ROT_0);
-             EINA_LIST_FOREACH_SAFE(crtc->outputs, ll, ln, output)
-                _e_randr_output_active_set(output, EINA_FALSE);
              continue;
           }
 
@@ -795,7 +791,7 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, int 
type EINA_UNUSED, vo
              /* forget out crtc */
              output->crtc = NULL;
           }
-        if (output->cfg && output->cfg->connect)
+        if ((!output->active) && (output->cfg->connect))
           {
              /* connect to crtc */
              _e_randr_output_active_set(output, EINA_TRUE);
@@ -826,8 +822,11 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, 
int type EINA_UNUSED, vo
    else if (ev->connection == ECORE_X_RANDR_CONNECTION_STATUS_DISCONNECTED)
      {
         /* disconnected */
-        _e_randr_output_active_set(output, EINA_FALSE);
-        changed = EINA_TRUE;
+        if (output->active)
+          {
+             _e_randr_output_active_set(output, EINA_FALSE);
+             changed = EINA_TRUE;
+          }
      }
 
    /* save the config if anything changed or we added a new one */
@@ -1249,12 +1248,12 @@ _e_randr_lid_update(void)
      {
         if (!output->is_lid) continue;
         /* only disable lid if we got more than 1 connected output */
-        if ((_e_randr_lid_is_closed) && (_e_randr_active_get() > 1))
+        if ((_e_randr_lid_is_closed) && (output->active) && (e_randr->active > 
1))
           {
              _e_randr_output_active_set(output, EINA_FALSE);
              changed = EINA_TRUE;
           }
-        else
+        else if (!output->active)
           {
              _e_randr_output_active_set(output, EINA_TRUE);
              changed = EINA_TRUE;
@@ -1290,21 +1289,22 @@ _e_randr_output_active_set(E_Randr_Output *output, 
Eina_Bool active)
      {
         _e_randr_output_crtc_find(output);
      }
-   output->active = EINA_FALSE;
    if (output->crtc)
      {
+        output->active = active;
         printf("RR:  ... found crtc %i\n", active);
         if (active)
           {
              output->crtc->outputs =
                 eina_list_append(output->crtc->outputs, output);
+             e_randr->active++;
              printf("RR:  ... add active output for crtc now\n");
-             output->active = EINA_TRUE;
           }
         else
           {
              output->crtc->outputs =
                 eina_list_remove(output->crtc->outputs, output);
+             e_randr->active--;
              output->crtc = NULL;
              printf("RR:  ... remove output for crtc now\n");
           }
@@ -1337,18 +1337,3 @@ _e_randr_output_name_get(Ecore_X_Window root, 
Ecore_X_Randr_Output output)
      }
    return name;
 }
-
-static int
-_e_randr_active_get(void)
-{
-   int active = 0;
-   E_Randr_Output *output;
-   Eina_List *l;
-
-   EINA_LIST_FOREACH(e_randr->outputs, l, output)
-     {
-        if (output->active)
-          active++;
-     }
-   return active;
-}
diff --git a/src/bin/e_randr.h b/src/bin/e_randr.h
index 9c508a4..30e355d 100644
--- a/src/bin/e_randr.h
+++ b/src/bin/e_randr.h
@@ -70,6 +70,7 @@ struct _E_Randr_Crtc
 
 struct _E_Randr
 {
+   int active;         // number of active outputs
    Eina_List *crtcs;   // list of crtcs
    Eina_List *outputs; // list of outputs
 };

-- 


Reply via email to