From 9677b71902a0554a6f4b49b5f654e75fe80dbdc9 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 17 Dec 2014 09:12:32 +0900 Subject: [PATCH] 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 d7801294a..0ffee5466 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 9c508a425..30e355d44 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 };