devilhorns pushed a commit to branch master.

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

commit ee0a87773c41252de8452b708ea99954ad5e3bcc
Author: Chris Michael <[email protected]>
Date:   Thu Oct 17 18:07:22 2013 +0100

    Fix rare bug where getting refresh rate may cause a crash if
    mode->name is NULL by checking mode id instead of name.
    
    Also if we are disabling a monitor, set current mode to 0.
    
    Signed-off-by: Chris Michael <[email protected]>
---
 src/modules/conf_randr/e_smart_monitor.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/modules/conf_randr/e_smart_monitor.c 
b/src/modules/conf_randr/e_smart_monitor.c
index 28dda0a..080ed94 100644
--- a/src/modules/conf_randr/e_smart_monitor.c
+++ b/src/modules/conf_randr/e_smart_monitor.c
@@ -836,6 +836,7 @@ e_smart_monitor_changes_apply(Evas_Object *obj)
         noutputs = 0;
         if (outputs) free(outputs);
         outputs = NULL;
+        sd->current.mode = 0;
      }
 
    cx = sd->current.x;
@@ -862,15 +863,12 @@ e_smart_monitor_changes_apply(Evas_Object *obj)
           }
      }
 
-//   else
-     {
-        /* try to apply the settings */
-       printf("Applying Settings: %d %d %d %d\n", sd->crtc.id, cx, cy, mode);
+   /* try to apply the settings */
+   printf("Applying Settings: %d %d %d %d\n", sd->crtc.id, cx, cy, mode);
 
-        if (!ecore_x_randr_crtc_settings_set(root, sd->crtc.id, outputs, 
-                                             noutputs, cx, cy, mode, orient))
-          printf("FAILED TO APPLY MONITOR SETTINGS !!!\n");
-     }
+   if (!ecore_x_randr_crtc_settings_set(root, sd->crtc.id, outputs, 
+                                        noutputs, cx, cy, mode, orient))
+     printf("FAILED TO APPLY MONITOR SETTINGS !!!\n");
 
    /* free any allocated memory from ecore_x_randr */
    if (outputs) free(outputs);
@@ -1556,8 +1554,8 @@ _e_smart_monitor_mode_refresh_rates_fill(Evas_Object *obj)
    /* loop the modes and find the current one */
    EINA_LIST_FOREACH(sd->modes, m, mode)
      {
-        /* compare mode names */
-        if (!strcmp(cmode->name, mode->name))
+        /* compare mode IDs */
+        if (cmode->xid == mode->xid)
           {
              Evas_Object *ow;
              double rate = 0.0;

-- 


Reply via email to