Le Fri, 03 Mar 2006 01:04:26 -0800, dans son message intitulé E CVS: apps/e raster, enlightenment-cvs@lists.sourceforge.net a eu le courage de nous raconter :
> Enlightenment CVS committal > > Author : raster > Project : e17 > Module : apps/e > > Dir : e17/apps/e/src/bin > > > Modified Files: > e_config.c e_config.h e_int_config_display.c > > > Log Message: > > > randr - a nice module, isn't really needed anymroe now as almsot all > the work is done by a config dialog (i added the safety box stuff > from randr into it). i just need to add the cde to restore on login > now. [snip] Hello! Here is a patch to make the display config dialog work as expected (let you select a refresh rate after a resolution selection, no minimum auto-resize after clearing the refresh rate ilist). Cheers! ilLogict
Index: src/bin/e_ilist.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_ilist.c,v retrieving revision 1.14 diff -u -r1.14 e_ilist.c --- src/bin/e_ilist.c 25 Jan 2006 04:06:51 -0000 1.14 +++ src/bin/e_ilist.c 3 Mar 2006 09:49:46 -0000 @@ -253,6 +253,10 @@ if (si) { sd->items = evas_list_remove(sd->items, si); + if (e_ilist_selected_get(obj) == n) + { + sd->selected = -1; + } if (si->icon_obj) evas_object_del(si->icon_obj); evas_object_del(si->base_obj); free(si); @@ -310,6 +314,7 @@ evas_object_del(si->base_obj); free(si); } + sd->selected = -1; } /* local subsystem functions */ Index: src/bin/e_int_config_display.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_int_config_display.c,v retrieving revision 1.2 diff -u -r1.2 e_int_config_display.c --- src/bin/e_int_config_display.c 15 Feb 2006 20:30:59 -0000 1.2 +++ src/bin/e_int_config_display.c 3 Mar 2006 09:49:48 -0000 @@ -17,14 +17,14 @@ Evas_Object *res_list = NULL; typedef struct _Resolution Resolution; -struct _Resolution +struct _Resolution { int size_id; Ecore_X_Screen_Size size; Ecore_X_Screen_Refresh_Rate *rates; }; -struct _E_Config_Dialog_Data +struct _E_Config_Dialog_Data { E_Config_Dialog *cfd; Resolution *res; @@ -33,7 +33,7 @@ }; EAPI E_Config_Dialog * -e_int_config_display(E_Container *con) +e_int_config_display(E_Container *con) { E_Config_Dialog *cfd; E_Config_Dialog_View *v; @@ -51,17 +51,17 @@ } static void -_fill_data(E_Config_Dialog_Data *cfdata) +_fill_data(E_Config_Dialog_Data *cfdata) { E_Manager *man; man = e_manager_current_get(); - cfdata->orig_size = ecore_x_randr_current_screen_size_get(man->root); + cfdata->orig_size = ecore_x_randr_current_screen_size_get(man->root); cfdata->orig_rate = ecore_x_randr_current_screen_refresh_rate_get(man->root); } static void * -_create_data(E_Config_Dialog *cfd) +_create_data(E_Config_Dialog *cfd) { E_Config_Dialog_Data *cfdata; cfdata = E_NEW(E_Config_Dialog_Data, 1); @@ -71,19 +71,19 @@ } static void -_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { free(cfdata); } static int -_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) +_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { char *sel_res, *sel_rate; int w, h, r, i, n; Ecore_X_Screen_Size *sizes; Ecore_X_Screen_Size size; - Ecore_X_Screen_Refresh_Rate *rates; + Ecore_X_Screen_Refresh_Rate *rates; Ecore_X_Screen_Refresh_Rate rate; E_Manager *man; @@ -91,35 +91,35 @@ sel_rate = (char *)e_widget_ilist_selected_label_get(rate_list); sscanf(sel_res, "%dx%d", &w, &h); sscanf(sel_rate, "%d Hz", &r); - - if ((cfdata->orig_size.width == w) && + + if ((cfdata->orig_size.width == w) && (cfdata->orig_size.height == h) && (cfdata->orig_rate.rate == r)) return 1; man = e_manager_current_get(); sizes = ecore_x_randr_screen_sizes_get(man->root, &n); - for (i = 0; i < n; i++) + for (i = 0; i < n; i++) { - if ((sizes[i].width == w) && + if ((sizes[i].width == w) && (sizes[i].height == h)) { size = sizes[i]; int k, rr; rates = ecore_x_randr_screen_refresh_rates_get(man->root, i, &rr); - for (k = 0; k < rr; k++) + for (k = 0; k < rr; k++) { - if (rates[k].rate == r) + if (rates[k].rate == r) { rate = rates[k]; break; - } + } } break; } } - int ret; + int ret; ret = ecore_x_randr_screen_refresh_rate_set(man->root, size, rate); cfdata->orig_size = size; cfdata->orig_rate = rate; @@ -128,7 +128,7 @@ } static Evas_Object * -_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) +_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { Evas_Object *o, *of, *ol, *rl; E_Manager *man; @@ -140,19 +140,19 @@ o = e_widget_list_add(evas, 0, 0); - of = e_widget_framelist_add(evas, _("Resolution"), 0); + of = e_widget_framelist_add(evas, _("Resolution"), 0); ol = e_widget_ilist_add(evas, 32, 32, NULL); - e_widget_min_size_set(ol, 140, 120); + e_widget_min_size_set(ol, 140, 120); e_widget_framelist_object_append(of, ol); e_widget_list_object_append(o, of, 1, 1, 0.5); res_list = ol; - of = e_widget_framelist_add(evas, _("Refresh Rate"), 0); + of = e_widget_framelist_add(evas, _("Refresh Rate"), 0); rl = e_widget_ilist_add(evas, 8, 8, NULL); - e_widget_min_size_set(rl, 140, 90); + e_widget_min_size_set(rl, 140, 90); e_widget_framelist_object_append(of, rl); - e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_list_object_append(o, of, 1, 1, 0.5); rate_list = rl; @@ -160,28 +160,28 @@ sizes = ecore_x_randr_screen_sizes_get(man->root, &s); size = ecore_x_randr_current_screen_size_get(man->root); - if (sizes) + if (sizes) { char buf[16]; - for (i = 0; i < s; i++) + for (i = 0; i < s; i++) { Resolution *res; res = E_NEW(Resolution, 1); if (!res) continue; - + res->size = sizes[i]; res->size_id = i; res->rates = ecore_x_randr_screen_refresh_rates_get(man->root, res->size_id, &r); - + snprintf(buf, sizeof(buf), "%dx%d", sizes[i].width, sizes[i].height); - e_widget_ilist_append(ol, NULL, buf, _ilist_item_change, res, NULL); + e_widget_ilist_append(ol, NULL, buf, _ilist_item_change, res, NULL); - if ((res->size.width == size.width) && (res->size.height == size.height)) - { + if ((res->size.width == size.width) && (res->size.height == size.height)) + { e_widget_ilist_selected_set(ol, i); - _load_rates(res); + _load_rates(res); } } } @@ -192,7 +192,7 @@ } static void -_load_rates(void *data) +_load_rates(void *data) { int k, r; E_Manager *man; @@ -201,24 +201,23 @@ Ecore_X_Screen_Refresh_Rate *rts; char buf[16]; - man = e_manager_current_get(); + man = e_manager_current_get(); rts = ecore_x_randr_screen_refresh_rates_get(man->root, res->size_id, &r); rt = ecore_x_randr_current_screen_refresh_rate_get(man->root); e_widget_ilist_clear(rate_list); - for (k = 0; k < r; k++) - { - + for (k = 0; k < r; k++) + { snprintf(buf, sizeof(buf), "%d Hz", rts[k].rate); e_widget_ilist_append(rate_list, NULL, buf, NULL, NULL, NULL); - if (rt.rate == rts[k].rate) + if (rt.rate == rts[k].rate) e_widget_ilist_selected_set(rate_list, k); - } + } } static void -_ilist_item_change(void *data) +_ilist_item_change(void *data) { _load_rates(data); } Index: src/bin/e_widget_ilist.c =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_widget_ilist.c,v retrieving revision 1.10 diff -u -r1.10 e_widget_ilist.c --- src/bin/e_widget_ilist.c 25 Jan 2006 04:06:51 -0000 1.10 +++ src/bin/e_widget_ilist.c 3 Mar 2006 09:49:48 -0000 @@ -87,6 +87,10 @@ e_widget_min_size_get(obj, &wmw, &wmh); e_widget_min_size_set(obj, mw + (w - vw), wmh); } + else if (mw < vw) + { + evas_object_resize(wd->o_ilist, vw,mh); + } } EAPI void @@ -162,14 +166,14 @@ } EAPI void -e_widget_ilist_clear(Evas_Object *obj) +e_widget_ilist_clear(Evas_Object *obj) { E_Widget_Data *wd; int mw, mh, vw, vh, w, h; wd = e_widget_data_get(obj); e_ilist_clear(wd->o_ilist); - +/* e_ilist_min_size_get(wd->o_ilist, &mw, &mh); evas_object_resize(wd->o_ilist, mw, mh); e_scrollframe_child_viewport_size_get(wd->o_scrollframe, &vw, &vh); @@ -180,8 +184,8 @@ e_widget_min_size_get(obj, &wmw, &wmh); e_widget_min_size_set(obj, mw + (w - vw), wmh); - } - return; + } + return;*/ } static void