From a9e09bc26dcde3667c5af512e861c8f076fea917 Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Mon, 14 Oct 2013 10:53:04 +0100 Subject: [PATCH] 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 --- 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 faf0c96ef..d34c9a48e 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; + } + } + } } }