diff --git a/src/modules/conf_randr/e_int_config_randr.c b/src/modules/conf_randr/e_int_config_randr.c index 11a54f768..d453a524d 100644 --- a/src/modules/conf_randr/e_int_config_randr.c +++ b/src/modules/conf_randr/e_int_config_randr.c @@ -36,6 +36,7 @@ #define THEME_FILENAME "/e-module-conf_randr.edj" #define TOOLBAR_ICONSIZE 16 +#define E_RANDR_12 (e_randr_screen_info.rrvd_info.randr_info_12) static void *create_data(E_Config_Dialog *cfd); static void free_cfdata(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); @@ -92,13 +93,18 @@ _dialog_output_dialog_data_new(E_Randr_Crtc_Info *crtc_info, E_Randr_Output_Info { E_Config_Randr_Dialog_Output_Dialog_Data *dialog_data; - if ((!crtc_info && !output_info) || !(dialog_data = E_NEW(E_Config_Randr_Dialog_Output_Dialog_Data, 1))) return NULL; + EINA_SAFETY_ON_NULL_RETURN_VAL(output_info, NULL); + + dialog_data = E_NEW(E_Config_Randr_Dialog_Output_Dialog_Data, 1); + + fprintf(stderr, "CONF_RANDR: Added output data struct for Output %d/CRTC %d.\n", output_info->xid, (output_info->crtc ? output_info->crtc->xid : Ecore_X_Randr_None)); if (crtc_info) { - //already enabled screen + //already enabled screen, output info is already available in crtc + //struct dialog_data->crtc = crtc_info; } - else if (output_info) + else { //disabled monitor dialog_data->output = output_info; @@ -114,24 +120,27 @@ create_data(E_Config_Dialog *cfd) E_Config_Randr_Dialog_Output_Dialog_Data *odd; // Prove we got all things to get going - EINA_SAFETY_ON_TRUE_RETURN_VAL(!e_randr_screen_info || (e_randr_screen_info->randr_version < ECORE_X_RANDR_1_2), NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL(e_randr_screen_info_refresh(), NULL); - EINA_SAFETY_ON_TRUE_RETURN_VAL(!(e_config_runtime_info = E_NEW(E_Config_Dialog_Data, 1)), NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL(!E_RANDR_12, NULL); + e_randr_screen_info_refresh(); + e_config_runtime_info = E_NEW(E_Config_Dialog_Data, 1); e_config_runtime_info->cfd = cfd; //Compose theme's file path and name snprintf(_theme_file_path, sizeof(_theme_file_path), "%s%s", conf_randr_module->dir, THEME_FILENAME); - e_config_runtime_info->manager = e_manager_current_get(); - EINA_LIST_FOREACH(e_randr_screen_info->rrvd_info.randr_info_12->outputs, iter, output_info) + e_config_runtime_info->output_dialog_data_list = NULL; + EINA_LIST_FOREACH(e_randr_screen_info.rrvd_info.randr_info_12->outputs, iter, output_info) { + if (!output_info) + { + fprintf(stderr, "CONF_RANDR: WWWWWWWWWWWWOOOOOOOOOOOOOTTTT an output_info of the central struct is NULL!\n"); + continue; + } if ((odd = _dialog_output_dialog_data_new(output_info->crtc, output_info))) e_config_runtime_info->output_dialog_data_list = eina_list_append(e_config_runtime_info->output_dialog_data_list, odd); } - - fprintf(stderr, "CONF_RANDR: Added %d output data structs.\n", eina_list_count(e_config_runtime_info->output_dialog_data_list)); //FIXME: Properly (stack-like) free data when creation fails EINA_SAFETY_ON_FALSE_GOTO(dialog_subdialog_arrangement_create_data(e_config_runtime_info), _e_conf_randr_create_data_failed_free_data); EINA_SAFETY_ON_FALSE_GOTO(dialog_subdialog_resolutions_create_data(e_config_runtime_info), _e_conf_randr_create_data_failed_free_data); @@ -148,7 +157,10 @@ _e_conf_randr_create_data_failed_free_data: static void free_cfdata(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { - EINA_SAFETY_ON_TRUE_RETURN(!e_randr_screen_info); + E_Config_Randr_Dialog_Output_Dialog_Data *dialog_data; + + EINA_SAFETY_ON_TRUE_RETURN(!E_RANDR_12); + dialog_subdialog_arrangement_free_data(cfd, cfdata); evas_object_del(cfdata->gui.subdialogs.arrangement.dialog); @@ -156,6 +168,12 @@ free_cfdata(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) evas_object_del(cfdata->gui.subdialogs.resolutions.dialog); evas_object_del(cfdata->gui.subdialogs.orientation.dialog); + EINA_LIST_FREE(cfdata->output_dialog_data_list, dialog_data) + { + free(dialog_data); + } + cfdata->output_dialog_data_list = NULL; + free(cfdata); } @@ -271,7 +289,7 @@ _e_conf_randr_confirmation_dialog_store_cb(void *data, E_Dialog *dia) _e_conf_randr_confirmation_dialog_delete_cb(dia->win); //but actually trigger saving the stuff - e_randr_store_configuration(e_randr_screen_info, modifier); + e_randr_store_configuration(modifier); } @@ -318,7 +336,7 @@ basic_create_widgets(E_Config_Dialog *cfd, Evas *canvas, E_Config_Dialog_Data *c { Evas_Object *table = NULL, *wl = NULL; - EINA_SAFETY_ON_TRUE_RETURN_VAL (!e_randr_screen_info || (e_randr_screen_info->randr_version < ECORE_X_RANDR_1_2), NULL); + EINA_SAFETY_ON_TRUE_RETURN_VAL (!E_RANDR_12 || (e_randr_screen_info.randr_version < ECORE_X_RANDR_1_2), NULL); EINA_SAFETY_ON_TRUE_RETURN_VAL((!canvas || !cfdata), NULL); e_config_runtime_info->gui.canvas = canvas; @@ -408,7 +426,7 @@ e_int_config_randr(E_Container *con, const char *params __UNUSED__){ E_Config_Dialog *cfd; E_Config_Dialog_View *v; - if (!e_randr_screen_info || (e_randr_screen_info->randr_version < ECORE_X_RANDR_1_2)) + if (!E_RANDR_12 || (e_randr_screen_info.randr_version < ECORE_X_RANDR_1_2)) { ecore_timer_add(0.5, _deferred_noxrandr_error, NULL); fprintf(stderr, "CONF_RANDR: XRandR version >= 1.2 necessary to work.\n"); diff --git a/src/modules/conf_randr/e_int_config_randr.h b/src/modules/conf_randr/e_int_config_randr.h index a355dcb60..ba324ea5c 100644 --- a/src/modules/conf_randr/e_int_config_randr.h +++ b/src/modules/conf_randr/e_int_config_randr.h @@ -23,10 +23,10 @@ struct _E_Config_Dialog_Data E_Config_Randr_Dialog_Confirmation_Dialog_Data *confirmation_dialog; struct { struct { - Evas_Object *dialog, *widget_list, *swallowing_edje, *smart_parent, *suggestion, *clipper, *check_display_disabled_outputs; + Evas_Object *dialog, *widget_list, *swallowing_edje, *smart_parent, *suggestion, *clipper, *check_display_disconnected_outputs; Evas_Coord_Point previous_pos, relative_zero; Evas_Coord_Rectangle disabled_output_size; - int suggestion_dist_min, check_val_display_disabled_outputs; + int suggestion_dist_min, check_val_display_disconnected_outputs; } arrangement; struct { Evas_Object *dialog; @@ -72,7 +72,7 @@ struct _E_Config_Randr_Dialog_Confirmation_Dialog_Data struct _Config { - Eina_Bool display_disabled_outputs; + Eina_Bool display_disconnected_outputs; }; E_Config_Dialog *e_int_config_randr(E_Container *con, const char *params __UNUSED__); diff --git a/src/modules/conf_randr/e_int_config_randr_arrangement.c b/src/modules/conf_randr/e_int_config_randr_arrangement.c index 51fb183b2..0fc35dfc2 100644 --- a/src/modules/conf_randr/e_int_config_randr_arrangement.c +++ b/src/modules/conf_randr/e_int_config_randr_arrangement.c @@ -68,14 +68,18 @@ _dialog_subdialog_arrangement_rep_dialog_data_fill(E_Config_Randr_Dialog_Output_ { //disabled monitor odd->previous_mode = NULL; - - //try to get a mode from the preferred list, else use default list - if (!(odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->preferred_modes)))) + if (odd->output->monitor) { - if (odd->output->modes) - odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->modes)); - else - odd->preferred_mode = NULL; + //try to get a mode from the preferred list, else use default list + if (!(odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->monitor->preferred_modes)))) + { + if (odd->output->monitor->modes) + odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->monitor->modes)); + } + } + else + { + odd->preferred_mode = NULL; } odd->previous_pos.x = Ecore_X_Randr_Unset; @@ -97,6 +101,8 @@ _dialog_subdialog_arrangement_update(void) if (!e_config_runtime_info || !e_config_runtime_info->gui.canvas || !e_config_runtime_info->output_dialog_data_list || !area) return; + fprintf(stderr, "CONF_RANDR: Display disconnected outputs %d\n", randr_dialog_config->display_disconnected_outputs); + EINA_LIST_FOREACH(evas_object_smart_members_get(area), iter, rep) { //skip clipper @@ -108,12 +114,9 @@ _dialog_subdialog_arrangement_update(void) EINA_LIST_FOREACH(e_config_runtime_info->output_dialog_data_list, iter, output_dialog_data) { - fprintf(stderr, "CONF_RANDR: Display disabled outputs %d\n", randr_dialog_config->display_disabled_outputs); - if (!output_dialog_data->crtc) - { - if(!output_dialog_data->output || (randr_dialog_config && !randr_dialog_config->display_disabled_outputs)) - continue; - } + if(!output_dialog_data->crtc && + (!output_dialog_data->output->monitor && (randr_dialog_config && !randr_dialog_config->display_disconnected_outputs))) + continue; rep = _dialog_subdialog_arrangement_rep_add(e_config_runtime_info->gui.canvas, output_dialog_data); @@ -159,11 +162,11 @@ dialog_subdialog_arrangement_basic_create_widgets(Evas *canvas) subdialog = e_widget_list_add(canvas, 0, 1); //Add checkbox - check = e_widget_check_add(canvas, _("Display disabled outputs"), &e_config_runtime_info->gui.subdialogs.arrangement.check_val_display_disabled_outputs); + check = e_widget_check_add(canvas, _("Display disconnected outputs"), &e_config_runtime_info->gui.subdialogs.arrangement.check_val_display_disconnected_outputs); if (randr_dialog_config) - e_widget_check_checked_set(check, randr_dialog_config->display_disabled_outputs); + e_widget_check_checked_set(check, randr_dialog_config->display_disconnected_outputs); evas_object_event_callback_add(check, EVAS_CALLBACK_MOUSE_DOWN, _dialog_subdialog_arrangement_check_mouse_down_cb, NULL); - e_config_runtime_info->gui.subdialogs.arrangement.check_display_disabled_outputs = check; + e_config_runtime_info->gui.subdialogs.arrangement.check_display_disconnected_outputs = check; //Add smart move area with outputs //initialize smart object @@ -222,8 +225,9 @@ _dialog_subdialog_arrangement_rep_add(Evas *canvas, E_Config_Randr_Dialog_Output output_info = output_dialog_data->output; if (output_info) { - if (ecore_x_randr_edid_has_valid_header(output_info->edid, output_info->edid_length)) - output_name = ecore_x_randr_edid_display_name_get(output_info->edid, output_info->edid_length); + if (output_info->monitor && + ecore_x_randr_edid_has_valid_header(output_info->monitor->edid, output_info->monitor->edid_length)) + output_name = ecore_x_randr_edid_display_name_get(output_info->monitor->edid, output_info->monitor->edid_length); else if (output_info->name) output_name = output_info->name; } @@ -334,7 +338,7 @@ _dialog_subdialog_arrangement_smart_class_resize(Evas_Object *obj, Evas_Coord w, { new_geo.w = (int)((float)e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.w * scaling_factor); new_geo.h = (int)((float)e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.h * scaling_factor); - fprintf(stderr, "CONF_RANDR: Neither mode nor preferred mode are avavailable for %x. Using %dx%d.\n", (output_dialog_data->crtc ? output_dialog_data->crtc->xid : output_dialog_data->output->xid), e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.w, e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.h); + fprintf(stderr, "CONF_RANDR: Neither mode nor preferred mode are avavailable for %d. Using %dx%d.\n", (output_dialog_data->crtc ? output_dialog_data->crtc->xid : output_dialog_data->output->xid), e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.w, e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.h); } if ((new_geo.w <= 0) || (new_geo.h <= 0)) { @@ -380,10 +384,10 @@ _dialog_subdialog_arrangement_check_mouse_down_cb(void *data __UNUSED__, Evas *e { if (!obj || !e_config_runtime_info || !randr_dialog_config) return; - if (obj == e_config_runtime_info->gui.subdialogs.arrangement.check_display_disabled_outputs) + if (obj == e_config_runtime_info->gui.subdialogs.arrangement.check_display_disconnected_outputs) { //this is bad. The events are called _before_ the value is updated. - randr_dialog_config->display_disabled_outputs ^= EINA_TRUE; + randr_dialog_config->display_disconnected_outputs ^= EINA_TRUE; _dialog_subdialog_arrangement_update(); } } @@ -631,18 +635,17 @@ void dialog_subdialog_arrangement_free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { E_Config_Randr_Dialog_Output_Dialog_Data *dialog_data; + Eina_List *iter; EINA_SAFETY_ON_NULL_RETURN(cfdata); - EINA_LIST_FREE(cfdata->output_dialog_data_list, dialog_data) + EINA_LIST_FOREACH(cfdata->output_dialog_data_list, iter, dialog_data) { - if (!dialog_data) continue; if (dialog_data->bg) { evas_object_del(dialog_data->bg); dialog_data->bg = NULL; } - free(dialog_data); } } @@ -836,7 +839,7 @@ dialog_subdialog_arrangement_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dia || ((odd->new_pos.x == Ecore_X_Randr_Unset) || (odd->new_pos.y == Ecore_X_Randr_Unset))) continue; if ((odd->previous_pos.x != odd->new_pos.x) || (odd->previous_pos.y != odd->new_pos.y)) { - fprintf(stderr, "CONF_RANDR: CRTC %x is moved to %dx%d\n", odd->crtc->xid, odd->new_pos.x, odd->new_pos.y); + fprintf(stderr, "CONF_RANDR: CRTC %d is moved to %dx%d\n", odd->crtc->xid, odd->new_pos.x, odd->new_pos.y); if (!ecore_x_randr_crtc_pos_set(cfd->con->manager->root, odd->crtc->xid, odd->new_pos.x, odd->new_pos.y)) { arrangement_failed = EINA_TRUE; diff --git a/src/modules/conf_randr/e_int_config_randr_orientation.c b/src/modules/conf_randr/e_int_config_randr_orientation.c index d884958ec..41f1c9213 100644 --- a/src/modules/conf_randr/e_int_config_randr_orientation.c +++ b/src/modules/conf_randr/e_int_config_randr_orientation.c @@ -281,7 +281,7 @@ dialog_subdialog_orientation_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dia orientation = e_config_runtime_info->gui.subdialogs.orientation.radio_val; - fprintf(stderr, "CONF_RANDR: Change orientation of crtc %x to %d.\n", output_dialog_data->crtc->xid, orientation); + fprintf(stderr, "CONF_RANDR: Change orientation of crtc %d to %d.\n", output_dialog_data->crtc->xid, orientation); if (ecore_x_randr_crtc_orientation_set(cfd->con->manager->root, output_dialog_data->crtc->xid, orientation)) { diff --git a/src/modules/conf_randr/e_int_config_randr_policies.c b/src/modules/conf_randr/e_int_config_randr_policies.c index ab3ed9b8c..2e7171175 100644 --- a/src/modules/conf_randr/e_int_config_randr_policies.c +++ b/src/modules/conf_randr/e_int_config_randr_policies.c @@ -12,6 +12,8 @@ #define Ecore_X_Randr_Unset -1 #endif +#define E_RANDR_12 (e_randr_screen_info.rrvd_info.randr_info_12) + Evas_Object *dialog_subdialog_policies_basic_create_widgets(Evas *canvas); Eina_Bool dialog_subdialog_policies_create_data(E_Config_Dialog_Data *e_config_runtime_info); Eina_Bool dialog_subdialog_policies_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); @@ -198,7 +200,7 @@ _dialog_subdialog_policies_policy_mouse_up_cb(void *data __UNUSED__, Evas *e __U Eina_Bool dialog_subdialog_policies_basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata __UNUSED__) { - if (!e_randr_screen_info || !e_config_runtime_info->gui.selected_output_dd) return EINA_FALSE; + if (!E_RANDR_12 || !e_config_runtime_info->gui.selected_output_dd) return EINA_FALSE; //policy update e_config_runtime_info->gui.selected_output_dd->previous_policy = e_config_runtime_info->gui.selected_output_dd->new_policy; @@ -211,7 +213,7 @@ dialog_subdialog_policies_basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Co Eina_Bool dialog_subdialog_policies_basic_check_changed(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { - if (!e_randr_screen_info || !cfdata || !cfdata->gui.selected_output_dd || !cfdata->gui.selected_output_dd->output) return EINA_FALSE; + if (!E_RANDR_12 || !cfdata || !cfdata->gui.selected_output_dd || !cfdata->gui.selected_output_dd->output) return EINA_FALSE; return (int)cfdata->gui.selected_output_dd->previous_policy != (int)cfdata->gui.subdialogs.policies.radio_val; } diff --git a/src/modules/conf_randr/e_int_config_randr_resolutions.c b/src/modules/conf_randr/e_int_config_randr_resolutions.c index 52d34778a..8d820014c 100644 --- a/src/modules/conf_randr/e_int_config_randr_resolutions.c +++ b/src/modules/conf_randr/e_int_config_randr_resolutions.c @@ -26,6 +26,7 @@ void dialog_subdialog_resolutions_keep_changes(E_Config_Dialog_Data *cfd void dialog_subdialog_resolutions_discard_changes(E_Config_Dialog_Data *cfdata); extern E_Config_Dialog_Data *e_config_runtime_info; +static Ecore_X_Randr_Mode_Info disabled_mode = {.xid = Ecore_X_Randr_None}; Eina_Bool dialog_subdialog_resolutions_create_data(E_Config_Dialog_Data *cfdata) @@ -50,10 +51,10 @@ dialog_subdialog_resolutions_create_data(E_Config_Dialog_Data *cfdata) mi = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->crtc->outputs_common_modes)); odd->previous_mode = mi; } - else if (odd->output) + else if (odd->output && odd->output->monitor) { odd->previous_mode = NULL; - odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->preferred_modes)); + odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->monitor->preferred_modes)); } } @@ -80,9 +81,9 @@ dialog_subdialog_resolutions_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dia { //Apply new mode Ecore_X_Randr_Mode_Info *selected_mode; - Ecore_X_ID selected_mode_xid; + Ecore_X_Randr_Mode mode; E_Config_Randr_Dialog_Output_Dialog_Data *output_dialog_data; - Ecore_X_Randr_Output *output = NULL; + Ecore_X_Randr_Output *outputs = NULL; E_Randr_Crtc_Info *crtc_info = NULL, *crtc_iter; Eina_List *iter; int noutputs = Ecore_X_Randr_Unset; @@ -101,8 +102,8 @@ dialog_subdialog_resolutions_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dia else if (output_dialog_data->output) { //CRTC not assigned yet. Let's try to find a non occupied one. - fprintf(stderr, "CONF_RANDR: Trying to find a CRTC for output %x, %d crtcs are possible.\n", output_dialog_data->output->xid, eina_list_count(output_dialog_data->output->possible_crtcs)); - output = &output_dialog_data->output->xid; + fprintf(stderr, "CONF_RANDR: Trying to find a CRTC for output %d, %d crtcs are possible.\n", output_dialog_data->output->xid, eina_list_count(output_dialog_data->output->possible_crtcs)); + outputs = &output_dialog_data->output->xid; noutputs = 1; EINA_LIST_FOREACH(output_dialog_data->output->possible_crtcs, iter, crtc_iter) { @@ -122,22 +123,24 @@ dialog_subdialog_resolutions_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dia //get selected mode if ((selected_mode = (Ecore_X_Randr_Mode_Info *)e_widget_ilist_selected_data_get(e_config_runtime_info->gui.subdialogs.resolutions.dialog))) { - selected_mode_xid = selected_mode->xid; + mode = selected_mode->xid; } - else + if (selected_mode == crtc_info->current_mode) { - selected_mode_xid = Ecore_X_Randr_None; + if (output_dialog_data->output && (eina_list_data_find(crtc_info->outputs, output_dialog_data->output))) + { + fprintf(stderr, "CONF_RANDR: Nothing to be done for output %s.\n", output_dialog_data->output->name); + return EINA_TRUE; + } + fprintf(stderr, "CONF_RANDR: Resolution remains unchanged for CRTC %d.\n", crtc_info->xid); + return EINA_TRUE; } + fprintf(stderr, "CONF_RANDR: Changing mode of crtc %d to %d.\n", crtc_info->xid, mode); - fprintf(stderr, "CONF_RANDR: Change mode of crtc %x to %x.\n", crtc_info->xid, selected_mode_xid); - - if (ecore_x_randr_crtc_mode_set(cfd->con->manager->root, crtc_info->xid, output, noutputs, selected_mode_xid)) + if (ecore_x_randr_crtc_mode_set(cfd->con->manager->root, crtc_info->xid, outputs, noutputs, mode)) { - //remove unused space - ecore_x_randr_screen_reset(cfd->con->manager->root); //update information - if (!output_dialog_data->crtc) - output_dialog_data->crtc = crtc_info; + output_dialog_data->crtc = crtc_info; output_dialog_data->new_mode = selected_mode; return EINA_TRUE; } @@ -157,7 +160,7 @@ dialog_subdialog_resolutions_basic_check_changed(E_Config_Dialog *cfd __UNUSED__ } void -dialog_subdialog_resolutions_update_list(Evas_Object *crtc) +dialog_subdialog_resolutions_update_list(Evas_Object *rep) { Eina_List *iter, *modelist = NULL; E_Config_Randr_Dialog_Output_Dialog_Data *output_dialog_data; @@ -165,16 +168,13 @@ dialog_subdialog_resolutions_update_list(Evas_Object *crtc) char resolution_text[RESOLUTION_TXT_MAX_LENGTH]; float rate; int str_ret, i = 0; + Eina_Bool enable = EINA_FALSE; e_widget_ilist_freeze(e_config_runtime_info->gui.subdialogs.resolutions.dialog); e_widget_ilist_clear(e_config_runtime_info->gui.subdialogs.resolutions.dialog); - if (!crtc) - { - e_widget_disabled_set(e_config_runtime_info->gui.subdialogs.resolutions.dialog, EINA_TRUE); - return; - } - if (!(output_dialog_data = evas_object_data_get(crtc, "rep_info"))) - return; + + if (!rep || !(output_dialog_data = evas_object_data_get(rep, "rep_info"))) + goto _go_and_return; //select correct mode list if (output_dialog_data->crtc) @@ -182,12 +182,15 @@ dialog_subdialog_resolutions_update_list(Evas_Object *crtc) current_mode = output_dialog_data->crtc->current_mode; modelist = output_dialog_data->crtc->outputs_common_modes; } - else if (output_dialog_data->output) + else if (output_dialog_data->output && output_dialog_data->output->monitor) { current_mode = NULL; - if (output_dialog_data->output->modes) - modelist = output_dialog_data->output->modes; + if (output_dialog_data->output->monitor->modes) + modelist = output_dialog_data->output->monitor->modes; } + if (!modelist) + goto _go_and_return; + EINA_LIST_FOREACH(modelist, iter, mode_info) { //calculate refresh rate @@ -213,10 +216,13 @@ dialog_subdialog_resolutions_update_list(Evas_Object *crtc) } //append 'disabled' mode - e_widget_ilist_append(e_config_runtime_info->gui.subdialogs.resolutions.dialog, NULL, _("Disabled"), NULL, NULL, NULL); + e_widget_ilist_append(e_config_runtime_info->gui.subdialogs.resolutions.dialog, NULL, _("Disabled"), NULL, &disabled_mode, NULL); //reenable widget - e_widget_disabled_set(e_config_runtime_info->gui.subdialogs.resolutions.dialog, EINA_FALSE); + enable = EINA_TRUE; + + _go_and_return: + e_widget_disabled_set(e_config_runtime_info->gui.subdialogs.resolutions.dialog, enable); e_widget_ilist_go(e_config_runtime_info->gui.subdialogs.resolutions.dialog); e_widget_ilist_thaw(e_config_runtime_info->gui.subdialogs.resolutions.dialog); } diff --git a/src/modules/conf_randr/e_mod_main.c b/src/modules/conf_randr/e_mod_main.c index 172e03b49..9cfb37650 100644 --- a/src/modules/conf_randr/e_mod_main.c +++ b/src/modules/conf_randr/e_mod_main.c @@ -31,7 +31,7 @@ e_modapi_init(E_Module *m) #undef D #define T Config #define D conf_edd - E_CONFIG_VAL(D, T, display_disabled_outputs, UCHAR); + E_CONFIG_VAL(D, T, display_disconnected_outputs, UCHAR); #undef T #undef D @@ -39,7 +39,7 @@ e_modapi_init(E_Module *m) if (!randr_dialog_config) { randr_dialog_config = E_NEW(Config, 1); - randr_dialog_config->display_disabled_outputs = EINA_FALSE; + randr_dialog_config->display_disconnected_outputs = EINA_FALSE; } return m;