devilhorns pushed a commit to branch master.

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

commit a9e09bc26dcde3667c5af512e861c8f076fea917
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Mon Oct 14 10:53:04 2013 +0100

    Fix bug when hotplugging a TV where resolution does not match the
    parent because a TV uses a non-standard 1360 resolution
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 src/bin/e_randr.c | 33 ++++++++++++++++++++++++++++++---
 1 file changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_randr.c b/src/bin/e_randr.c
index faf0c96..d34c9a4 100644
--- a/src/bin/e_randr.c
+++ b/src/bin/e_randr.c
@@ -886,15 +886,21 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, 
int type EINA_UNUSED, vo
                        * crtc's mode for cloning
                        * 
                        * NB: Hmmm, what to do if it Cannot use this mode ?? */
+
+                       /* get the modes that this output supports */
                       modes = 
                         ecore_x_randr_output_modes_get(ev->win, 
                                                        output_cfg->xid, 
                                                        &num, &pref);
+
                       if (modes)
                         {
+                            /* loop the outputs modes */
                            for (c = 0; c < num; c++)
                              {
-                                if (modes[c] == mode)
+                                if ((modes[c] == mode) && 
+                                     ((modes[c]->width == mode->width) && 
+                                         (modes[c]->height == mode->height)))
                                   {
                                      can_clone = EINA_TRUE;
                                      break;
@@ -915,14 +921,35 @@ _e_randr_event_cb_output_change(void *data EINA_UNUSED, 
int type EINA_UNUSED, vo
                              {
                                 int cw, ch;
 
-                                ecore_x_randr_mode_size_get(ev->win, 
-                                                            modes[c], 
+                                ecore_x_randr_mode_size_get(ev->win, modes[c], 
                                                             &cw, &ch);
                                 if ((cw == mw) && (ch == mh))
                                   {
                                      mode = modes[c];
                                      break;
                                   }
+                                 else
+                                   {
+                                      /* Grrrr, stupid TVs with their 
+                                       * non-standard resolution of 
+                                       * 1360x768 ... need to account for that 
*/
+                                      if (ch == mh)
+                                        {
+                                           if (cw <= (mw - 6))
+                                             {
+                                                mode = modes[c];
+                                                break;
+                                             }
+                                        }
+                                      else if (cw == mw)
+                                        {
+                                           if (ch <= (mh - 6))
+                                             {
+                                                mode = modes[c];
+                                                break;
+                                             }
+                                        }
+                                   }
                              }
                         }
 

-- 


Reply via email to