From 557f7d475554f545d818285bc37ac7c48048f15c Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Fri, 18 Nov 2011 08:07:48 +0000 Subject: [PATCH] From: Leif Middelschulte Subject: [E-devel] [PATCH] Patch to add disabled outputs to config dialog. Date: Thu, 17 Nov 2011 18:43:23 +0100 Hello devs, find attached a patch that enables the user to set the policy for an unused output. Since there is no resolution, an assumed resolution is set in the edc so it's easily adjustable for small screens. SVN revision: 65374 --- .../conf_randr/e-module-conf_randr.edc | 5 +++ src/modules/conf_randr/e_int_config_randr.c | 5 --- src/modules/conf_randr/e_int_config_randr.h | 1 + .../e_int_config_randr_arrangement.c | 31 ++++++++++++++++--- .../conf_randr/e_int_config_randr_policies.c | 2 ++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/modules/conf_randr/e-module-conf_randr.edc b/src/modules/conf_randr/e-module-conf_randr.edc index d4fb8f60f..433fc737b 100644 --- a/src/modules/conf_randr/e-module-conf_randr.edc +++ b/src/modules/conf_randr/e-module-conf_randr.edc @@ -8,6 +8,11 @@ images { image: "display-glass-shine.png" COMP; } +data { + item: "disabled_output_width" "1024"; + item: "disabled_output_height" "768"; +} + collections { // The icon used in the settings dialog diff --git a/src/modules/conf_randr/e_int_config_randr.c b/src/modules/conf_randr/e_int_config_randr.c index 1df5203ca..ae4c11caf 100644 --- a/src/modules/conf_randr/e_int_config_randr.c +++ b/src/modules/conf_randr/e_int_config_randr.c @@ -125,11 +125,6 @@ create_data(E_Config_Dialog *cfd) 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) { - //Create basic data struct for every connected output. - //Data would have to be recreated if a monitor is connected while dialog - //is open. - if (output_info->connection_status != ECORE_X_RANDR_CONNECTION_STATUS_CONNECTED) - 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); } diff --git a/src/modules/conf_randr/e_int_config_randr.h b/src/modules/conf_randr/e_int_config_randr.h index 5356e2494..06687a21e 100644 --- a/src/modules/conf_randr/e_int_config_randr.h +++ b/src/modules/conf_randr/e_int_config_randr.h @@ -23,6 +23,7 @@ struct _E_Config_Dialog_Data struct { Evas_Object *dialog, *swallowing_edje, *smart_parent, *suggestion, *clipper; Evas_Coord_Point previous_pos, relative_zero; + Evas_Coord_Rectangle disabled_output_size; int suggestion_dist_min; } arrangement; struct { 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 eb8d1984f..ee64efef1 100644 --- a/src/modules/conf_randr/e_int_config_randr_arrangement.c +++ b/src/modules/conf_randr/e_int_config_randr_arrangement.c @@ -65,7 +65,13 @@ _dialog_subdialog_arrangement_output_dialog_data_fill(E_Config_Randr_Dialog_Outp //disabled monitor //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)))) - odd->preferred_mode = (Ecore_X_Randr_Mode_Info *)eina_list_data_get(eina_list_last(odd->output->modes)); + { + 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; + } + odd->previous_pos.x = Ecore_X_Randr_Unset; odd->previous_pos.y = Ecore_X_Randr_Unset; } @@ -79,12 +85,22 @@ dialog_subdialog_arrangement_create_data(E_Config_Dialog_Data *data) { Eina_List *iter; E_Config_Randr_Dialog_Output_Dialog_Data *dialog_data; + char *disabled_output_width, *disabled_output_height; + Evas_Object *display; EINA_LIST_FOREACH(data->output_dialog_data_list, iter, dialog_data) { _dialog_subdialog_arrangement_output_dialog_data_fill(dialog_data); } + if(!(disabled_output_width = edje_file_data_get(_theme_file_path, "disabled_output_width"))) + disabled_output_width = "1024"; + if(!(disabled_output_height = edje_file_data_get(_theme_file_path, "disabled_output_height"))) + disabled_output_height = "768"; + + data->gui.subdialogs.arrangement.disabled_output_size.w = atoi(disabled_output_width); + data->gui.subdialogs.arrangement.disabled_output_size.h = atoi(disabled_output_height); + return EINA_TRUE; } @@ -211,11 +227,16 @@ _dialog_subdialog_arrangement_smart_class_resize(Evas_Object *obj, Evas_Coord w, real_sum_w += output_dialog_data->previous_mode->width; real_sum_h += output_dialog_data->previous_mode->height; } - else + else if (output_dialog_data->preferred_mode) { real_sum_w += output_dialog_data->preferred_mode->width; real_sum_h += output_dialog_data->preferred_mode->height; } + else + { + real_sum_w += e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.w; + real_sum_h += e_config_runtime_info->gui.subdialogs.arrangement.disabled_output_size.h; + } } scaling_factor = (((float)parent_geo.w / (float)real_sum_w) < ((float)parent_geo.h / (float)real_sum_h)) ? ((float)parent_geo.w / (float)real_sum_w) : ((float)parent_geo.h / (float)real_sum_h); @@ -240,8 +261,9 @@ _dialog_subdialog_arrangement_smart_class_resize(Evas_Object *obj, Evas_Coord w, } else { - fprintf(stderr, "CONF_RANDR: Can't resize thumb, as neither mode nor preferred mode are avavailable for %x\n", (output_dialog_data->crtc ? output_dialog_data->crtc->xid : output_dialog_data->output->xid)); - continue; + 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); } if ((new_geo.w <= 0) || (new_geo.h <= 0)) { @@ -557,6 +579,7 @@ _dialog_subdialog_arrangement_neighbors_get(Evas_Object *obj) || (crtc == e_config_runtime_info->gui.subdialogs.arrangement.clipper)) continue; evas_object_geometry_get(crtc, &neighbor_geo.x, &neighbor_geo.y, &neighbor_geo.w, &neighbor_geo.h); if (!(neighbor_info = evas_object_data_get(crtc, "output_info"))) continue; + if (!neighbor_info->previous_mode) continue; if (((geo.x + geo.w) == neighbor_geo.x) || (geo.x == (neighbor_geo.x + neighbor_geo.w)) 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 c646427ec..6329b7461 100644 --- a/src/modules/conf_randr/e_int_config_randr_policies.c +++ b/src/modules/conf_randr/e_int_config_randr_policies.c @@ -283,6 +283,8 @@ dialog_subdialog_policies_keep_changes(E_Config_Dialog_Data *cfdata) { if (!odd || ((int)odd->previous_policy == Ecore_X_Randr_Unset)) continue; odd->previous_policy = odd->new_policy; + if (odd->output) + odd->output->policy = odd->new_policy; odd->new_policy = Ecore_X_Randr_Unset; } }