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 <devilhorns@comcast.net>
This commit is contained in:
Chris Michael 2013-10-17 18:07:22 +01:00
parent 87dd451353
commit ee0a87773c
1 changed files with 8 additions and 10 deletions

View File

@ -836,6 +836,7 @@ e_smart_monitor_changes_apply(Evas_Object *obj)
noutputs = 0; noutputs = 0;
if (outputs) free(outputs); if (outputs) free(outputs);
outputs = NULL; outputs = NULL;
sd->current.mode = 0;
} }
cx = sd->current.x; 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, if (!ecore_x_randr_crtc_settings_set(root, sd->crtc.id, outputs,
noutputs, cx, cy, mode, orient)) noutputs, cx, cy, mode, orient))
printf("FAILED TO APPLY MONITOR SETTINGS !!!\n"); printf("FAILED TO APPLY MONITOR SETTINGS !!!\n");
}
/* free any allocated memory from ecore_x_randr */ /* free any allocated memory from ecore_x_randr */
if (outputs) free(outputs); 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 */ /* loop the modes and find the current one */
EINA_LIST_FOREACH(sd->modes, m, mode) EINA_LIST_FOREACH(sd->modes, m, mode)
{ {
/* compare mode names */ /* compare mode IDs */
if (!strcmp(cmode->name, mode->name)) if (cmode->xid == mode->xid)
{ {
Evas_Object *ow; Evas_Object *ow;
double rate = 0.0; double rate = 0.0;