forked from enlightenment/enlightenment
Improve conf_randr dialog.
Adjust to changes in e_randr.h. Change "display disabled" to "display disconnected" SVN revision: 68116
This commit is contained in:
parent
7cda77af23
commit
62ded22064
|
@ -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");
|
||||
|
|
|
@ -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__);
|
||||
|
|
|
@ -68,13 +68,17 @@ _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));
|
||||
//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;
|
||||
}
|
||||
|
||||
|
@ -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))
|
||||
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;
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,21 +123,23 @@ 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->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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue