On Fri, 4 Nov 2011 18:54:58 -0700 "Enlightenment SVN" <no-re...@enlightenment.org> wrote:
> Log: > Much cleaned and more efficient config stuff in xkbswitch. > > Author: quaker > Date: 2011-11-04 18:54:57 -0700 (Fri, 04 Nov 2011) > New Revision: 64752 > Trac: http://trac.enlightenment.org/e/changeset/64752 > > Modified: > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_config.c > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.c > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.h > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_parse.c > > Modified: trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_config.c > =================================================================== > --- trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_config.c 2011-11-04 > 23:19:14 UTC (rev 64751) +++ > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_config.c 2011-11-05 01:54:57 > UTC (rev 64752) @@ -1,13 +1,9 @@ -/* > - * Configuration dialog handling for XKB Switcher module, sync'd with Eet > storage. > - */ > +#include <e.h> > > -#include <e.h> > #include "e_mod_main.h" > #include "e_mod_parse.h" > > -/* This is automatically typedef'd by E */ > - > +/* automatically typedef'd by E */ > struct _E_Config_Dialog_Data > { > Evas *evas; > @@ -18,11 +14,20 @@ > > /* Local prototypes */ > > -static void *_create_data (E_Config_Dialog *cfd); > -static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data > *cfdata); -static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas > *evas, E_Config_Dialog_Data *cfdata); -static int _basic_apply > (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); +static void > *_create_data(E_Config_Dialog *cfd); > +static void _free_data ( > + E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata > +); > + > +static Evas_Object *_basic_create( > + E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata > +); > + > +static int _basic_apply( > + E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata > +); > + > static void _cb_add (void *data, void *data2 __UNUSED__); > static void _cb_del (void *data, void *data2 __UNUSED__); > static void _cb_up (void *data, void *data2 __UNUSED__); > @@ -36,18 +41,21 @@ > > static void _fill_used_list(E_Config_Dialog_Data *cfdata); > > -/* External Functions */ > +/* Externals */ > > -E_Config_Dialog *e_xkb_cfg_dialog(E_Container *con, const char *params) > +E_Config_Dialog * > +e_xkb_cfg_dialog(E_Container *con, const char *params) > { > E_Config_Dialog *cfd = NULL; > E_Config_Dialog_View *v = NULL; > + > char buf[4096]; > > - if (e_config_dialog_find("XKB Switcher", > "keyboard_and_mouse/xkbswitch")) return NULL; > + if (e_config_dialog_find("XKB Switcher", "keyboard_and_mouse/xkbswitch")) > + return NULL; > > - v = E_NEW(E_Config_Dialog_View, 1); > - if (!v) return NULL; > + if (!(v = E_NEW(E_Config_Dialog_View, 1))) > + return NULL; > > v->create_cfdata = _create_data; > v->free_cfdata = _free_data; > @@ -55,7 +63,11 @@ > v->basic.apply_cfdata = _basic_apply; > > /* Icon in the theme */ > - snprintf(buf, sizeof(buf), "%s/e-module-xkbswitch.edj", > e_xkb_cfg_inst->module->dir); > + snprintf( > + buf, sizeof(buf), > + "%s/e-module-xkbswitch.edj", > + e_xkb_cfg_inst->module->dir > + ); > > /* create our config dialog */ > cfd = e_config_dialog_new( > @@ -73,68 +85,80 @@ > > /* Locals */ > > -static void *_create_data(E_Config_Dialog *cfd) > +static void * > +_create_data(E_Config_Dialog *cfd) > { > - E_Config_Dialog_Data *cfdata = NULL; > - Eina_List *l; > - e_xkb_cfg_layout *cfglayout; > - E_XKB_Layout *layout; > - E_XKB_Model *model; > - E_XKB_Variant *variant; > + E_Config_Dialog_Data *cfdata = NULL; > + Eina_List *l = NULL; > + E_XKB_Config_Layout *cl = NULL; > + E_XKB_Layout *layout = NULL; > + E_XKB_Model *model = NULL; > + E_XKB_Variant *variant = NULL; > > cfdata = E_NEW(E_Config_Dialog_Data, 1); > > - EINA_LIST_FOREACH(e_xkb_cfg_inst->used_layouts, l, cfglayout) > + EINA_LIST_FOREACH(e_xkb_cfg_inst->used_layouts, l, cl) > { > - Eina_List *node = eina_list_search_unsorted_list(layouts, > layout_sort_by_name_cb, cfglayout->name); > + Eina_List *node = eina_list_search_unsorted_list( > + layouts, layout_sort_by_name_cb, cl->name > + ); > if (!node) continue; > > layout = eina_list_data_get(node); > + > /* this is important for load ordering */ > - layouts = eina_list_append(eina_list_remove_list(layouts, node), > layout); > + layouts = eina_list_append( > + eina_list_remove_list(layouts, node), layout > + ); > > - model = eina_list_search_unsorted(models, model_sort_by_name_cb, > cfglayout->model); > - variant = eina_list_search_unsorted(layout->variants, > variant_sort_by_name_cb, cfglayout->variant); > + model = eina_list_search_unsorted( > + models, model_sort_by_name_cb, cl->model > + ); > + variant = eina_list_search_unsorted( > + layout->variants, variant_sort_by_name_cb, cl->variant > + ); > > layout->used = EINA_TRUE; > > - if (model) layout->model = model; > + if (model ) layout->model = model; > if (variant) layout->variant = variant; > } > > return cfdata; > } > > -static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) > +static void > +_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) > { > e_xkb_cfg_inst->cfd = NULL; > E_FREE(cfdata); > } > > -static Evas_Object *_basic_create(E_Config_Dialog *cfd, Evas *evas, > E_Config_Dialog_Data *cfdata) +static Evas_Object * > +_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) > { > /* Main toolbook that holds all the pages */ > - Evas_Object *main_tbox = NULL; > + Evas_Object *main_tbox = NULL; > > /* Available layouts page */ > - Evas_Object *avb_box = NULL; > - Evas_Object *avb_lst = NULL; > + Evas_Object *avb_box = NULL; > + Evas_Object *avb_lst = NULL; > Evas_Object *avb_act_hbox = NULL; > - Evas_Object *avb_add = NULL; > - Evas_Object *avb_del = NULL; > + Evas_Object *avb_add = NULL; > + Evas_Object *avb_del = NULL; > > /* Used layouts page */ > - Evas_Object *add_box = NULL; > - Evas_Object *add_lst = NULL; > + Evas_Object *add_box = NULL; > + Evas_Object *add_lst = NULL; > Evas_Object *add_act_hbox = NULL; > - Evas_Object *add_up = NULL; > - Evas_Object *add_down = NULL; > + Evas_Object *add_up = NULL; > + Evas_Object *add_down = NULL; > > /* Available models page */ > - Evas_Object *mdl_lst = NULL; > + Evas_Object *mdl_lst = NULL; > > /* Available variants page */ > - Evas_Object *vrn_lst = NULL; > + Evas_Object *vrn_lst = NULL; > > /* Create widgets */ > > @@ -145,7 +169,6 @@ > avb_box = e_widget_list_add(evas, 0, 0); > > avb_lst = e_widget_ilist_add(evas, 32, 32, NULL); > - e_widget_ilist_multi_select_set(avb_lst, EINA_TRUE); > e_widget_size_min_set(avb_lst, 220, 160); > e_widget_ilist_go(avb_lst); > e_widget_list_object_append(avb_box, avb_lst, 1, 1, 0.5); > @@ -250,19 +273,21 @@ > /* Expose evas */ > cfdata->evas = evas; > > - if (cfdata->fill_delay) ecore_timer_del(cfdata->fill_delay); > - cfdata->fill_delay = ecore_timer_add(0.2, _cb_fill_delay, cfdata); > + if (cfdata->fill_delay) ecore_timer_del(cfdata->fill_delay); > + cfdata->fill_delay = ecore_timer_add(0.2, _cb_fill_delay, cfdata); > you could use ecore_timer_delay here to avoid creating a new timer > return main_tbox; > } > > -static int _basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) > +static int > +_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) > { > /* Here, set stuff from cfdata back into config */ > - Eina_List *l; > - E_XKB_Layout *layout; > - e_xkb_cfg_layout *cl = NULL; > + Eina_List *l = NULL; > + E_XKB_Layout *layout = NULL; > + E_XKB_Config_Layout *cl = NULL; > > + /* the old stuff has to be freed */ > while (e_xkb_cfg_inst->used_layouts) > { > cl = e_xkb_cfg_inst->used_layouts->data; > @@ -282,233 +307,296 @@ > { > if (!layout->used) continue; > > - cl = E_NEW(e_xkb_cfg_layout, 1); > - cl->name = eina_stringshare_add(layout->name); > - cl->model = eina_stringshare_add(layout->model ? > layout->model->name : ""); > - cl->variant = eina_stringshare_add(layout->variant ? > layout->variant->name : ""); > + cl = E_NEW(E_XKB_Config_Layout, 1); > + cl->name = eina_stringshare_add(layout->name); > + cl->model = eina_stringshare_add(layout->model > + ? layout->model->name : "" > + ); > + cl->variant = eina_stringshare_add(layout->variant > + ? layout->variant->name : "" > + ); I'm guessing a lot of these could be stringshare_ref > > - e_xkb_cfg_inst->used_layouts = > eina_list_append(e_xkb_cfg_inst->used_layouts, cl); > + e_xkb_cfg_inst->used_layouts = > + eina_list_append(e_xkb_cfg_inst->used_layouts, cl); > } > > e_config_save_queue(); > return 1; > } > > -static void _cb_add(void *data, void *data2 __UNUSED__) > +static void > +_cb_add(void *data, void *data2 __UNUSED__) > { > E_Config_Dialog_Data *cfdata = NULL; > - const E_Ilist_Item *it = NULL; > - E_XKB_Layout *layout = NULL; > - Evas_Object *end = NULL; > - Eina_List *l = NULL; > + E_XKB_Layout *layout = NULL; > + Evas_Object *end = NULL; > + Eina_List *l = NULL; > + const char *label = NULL; > + int n = 0; > > - if (!(cfdata = data)) return; > - EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->layout_list), l, it) > - { > - if (!it->selected || it->header) continue; > - if (!(layout = eina_list_search_unsorted(layouts, > layout_sort_by_label_cb, it->label))) continue; > - if (!layout->used) > - { > - end = e_widget_ilist_item_end_get(it); > - if (end) edje_object_signal_emit(end, "e,state,checked", "e"); > + if (!(cfdata = data)) > + return; > > - layout->used = EINA_TRUE; > - } > - } > + if ((n = e_widget_ilist_selected_get(cfdata->layout_list)) < 0) > + return; > > + if (!(label = e_widget_ilist_nth_label_get(cfdata->layout_list, n))) > + return; > + > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > + if ((end = e_widget_ilist_nth_end_get(cfdata->layout_list, n))) > + edje_object_signal_emit(end, "e,state,checked", "e"); > + > + layout->used = EINA_TRUE; > + > e_widget_ilist_unselect(cfdata->layout_list); > - e_widget_disabled_set(cfdata->btn_add, EINA_TRUE); > - e_widget_disabled_set(cfdata->btn_del, EINA_TRUE); > + e_widget_disabled_set (cfdata->btn_add, EINA_TRUE); > + e_widget_disabled_set (cfdata->btn_del, EINA_TRUE); > > _fill_used_list(cfdata); > } > > -static void _cb_del(void *data, void *data2 __UNUSED__) > +static void > +_cb_del(void *data, void *data2 __UNUSED__) > { > E_Config_Dialog_Data *cfdata = NULL; > - const E_Ilist_Item *it = NULL; > - E_XKB_Layout *layout = NULL; > - Evas_Object *end = NULL; > - Eina_List *l = NULL; > + E_XKB_Layout *layout = NULL; > + Evas_Object *end = NULL; > + Eina_List *l = NULL; > + const char *label = NULL; > + int n = 0; > > - if (!(cfdata = data)) return; > - EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->layout_list), l, it) > - { > - if (!it->selected || it->header) continue; > - if (!(layout = eina_list_search_unsorted(layouts, > layout_sort_by_label_cb, it->label))) continue; > - if (layout->used) > - { > - end = e_widget_ilist_item_end_get(it); > - if (end) edje_object_signal_emit(end, "e,state,unchecked", "e"); > + if (!(cfdata = data)) > + return; > > - layout->used = EINA_FALSE; > - } > - } > + if ((n = e_widget_ilist_selected_get(cfdata->layout_list)) < 0) > + return; > > + if (!(label = e_widget_ilist_nth_label_get(cfdata->layout_list, n))) > + return; > + > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > + if ((end = e_widget_ilist_nth_end_get(cfdata->layout_list, n))) > + edje_object_signal_emit(end, "e,state,unchecked", "e"); > + > + layout->used = EINA_FALSE; > + > e_widget_ilist_unselect(cfdata->layout_list); > - e_widget_disabled_set(cfdata->btn_add, EINA_TRUE); > - e_widget_disabled_set(cfdata->btn_del, EINA_TRUE); > + e_widget_disabled_set (cfdata->btn_add, EINA_TRUE); > + e_widget_disabled_set (cfdata->btn_del, EINA_TRUE); > > _fill_used_list(cfdata); > } > > -static void _cb_up(void *data, void *data2 __UNUSED__) > +static void > +_cb_up(void *data, void *data2 __UNUSED__) > { > E_Config_Dialog_Data *cfdata = NULL; > - Eina_List *l = NULL, *ll = NULL; > - E_XKB_Layout *layout = NULL; > - Evas_Object *icon = NULL; > - const char *lbl = NULL; > + Eina_List *l = NULL; > + Eina_List *ll = NULL; > + E_XKB_Layout *layout = NULL; > + Evas_Object *icon = NULL; > + const char *label = NULL; > + int n = 0; > + > char buf[4096]; > - int sel = 0; > > - if (!(cfdata = data)) return; > + if (!(cfdata = data)) > + return; > > - evas_event_freeze(cfdata->evas); > - edje_freeze(); > + evas_event_freeze (cfdata->evas); > + edje_freeze (); > + > e_widget_ilist_freeze(cfdata->used_list); > > - sel = e_widget_ilist_selected_get(cfdata->used_list); > - lbl = e_widget_ilist_selected_label_get(cfdata->used_list); > - if ((l = eina_list_search_unsorted_list(layouts, > layout_sort_by_label_cb, lbl))) > + if ((n = e_widget_ilist_selected_get(cfdata->used_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->used_list, n))) > + return; > + > + if ((l = eina_list_search_unsorted_list( > + layouts, layout_sort_by_label_cb, label > + ))) > { > layout = eina_list_data_get(l); > - if (l->prev) > + > + if (eina_list_prev(l)) > { > - ll = l->prev; > + ll = eina_list_prev(l); > > layouts = eina_list_remove_list(layouts, l); > layouts = eina_list_prepend_relative_list(layouts, layout, ll); > > - e_widget_ilist_remove_num(cfdata->used_list, sel); > - e_widget_ilist_go(cfdata->used_list); > + e_widget_ilist_remove_num(cfdata->used_list, n); > + e_widget_ilist_go (cfdata->used_list); > > icon = e_icon_add(cfdata->evas); > + > snprintf( > buf, sizeof(buf), > "%s/flags/%s_flag.png", > e_module_dir_get(e_xkb_cfg_inst->module), > layout->name > ); > - if (!ecore_file_exists(buf)) > - snprintf( > - buf, sizeof(buf), > - "%s/flags/unknown_flag.png", > - e_module_dir_get(e_xkb_cfg_inst->module) > - ); > + > + if (!ecore_file_exists(buf)) snprintf( > + buf, sizeof(buf), > + "%s/flags/unknown_flag.png", > + e_module_dir_get(e_xkb_cfg_inst->module) > + ); > + > e_icon_file_set(icon, buf); > - snprintf(buf, sizeof(buf), "%s (%s)", layout->description, > layout->name); + > + snprintf( > + buf, sizeof(buf), > + "%s (%s)", > + layout->description, > + layout->name > + ); > + > e_widget_ilist_prepend_relative( > - cfdata->used_list, > - icon, buf, > + cfdata->used_list, icon, buf, > _cb_layout_used_select, > - cfdata, layout->name, > - (sel - 1) > + cfdata, layout->name, (n - 1) > ); > - e_widget_ilist_selected_set(cfdata->used_list, (sel - 1)); > + e_widget_ilist_selected_set(cfdata->used_list, (n - 1)); > } > } > > - e_widget_ilist_go(cfdata->used_list); > + e_widget_ilist_go (cfdata->used_list); > e_widget_ilist_thaw(cfdata->used_list); > - edje_thaw(); > + > + edje_thaw (); > evas_event_thaw(cfdata->evas); > } > > -static void _cb_down(void *data, void *data2 __UNUSED__) > +static void > +_cb_down(void *data, void *data2 __UNUSED__) > { > E_Config_Dialog_Data *cfdata = NULL; > - Eina_List *l = NULL, *ll = NULL; > - E_XKB_Layout *layout = NULL; > - Evas_Object *icon = NULL; > - const char *lbl = NULL; > + Eina_List *l = NULL; > + Eina_List *ll = NULL; > + E_XKB_Layout *layout = NULL; > + Evas_Object *icon = NULL; > + const char *label = NULL; > + int n = 0; > + > char buf[4096]; > - int sel = 0; > > - if (!(cfdata = data)) return; > + if (!(cfdata = data)) > + return; > > - evas_event_freeze(cfdata->evas); > - edje_freeze(); > + evas_event_freeze (cfdata->evas); > + edje_freeze (); > + > e_widget_ilist_freeze(cfdata->used_list); > > - sel = e_widget_ilist_selected_get(cfdata->used_list); > - lbl = e_widget_ilist_selected_label_get(cfdata->used_list); > - if ((l = eina_list_search_unsorted_list(layouts, > layout_sort_by_label_cb, lbl))) > + if ((n = e_widget_ilist_selected_get(cfdata->used_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->used_list, n))) > + return; > + > + if ((l = eina_list_search_unsorted_list( > + layouts, layout_sort_by_label_cb, label > + ))) > { > layout = eina_list_data_get(l); > - if (l->next) > + > + if (eina_list_next(l)) > { > - ll = l->next; > + ll = eina_list_next(l); > > layouts = eina_list_remove_list(layouts, l); > layouts = eina_list_append_relative_list(layouts, layout, ll); > > - e_widget_ilist_remove_num(cfdata->used_list, sel); > - e_widget_ilist_go(cfdata->used_list); > + e_widget_ilist_remove_num(cfdata->used_list, n); > + e_widget_ilist_go (cfdata->used_list); > > icon = e_icon_add(cfdata->evas); > + > snprintf( > buf, sizeof(buf), > "%s/flags/%s_flag.png", > e_module_dir_get(e_xkb_cfg_inst->module), > layout->name > ); > - if (!ecore_file_exists(buf)) > - snprintf( > - buf, sizeof(buf), > - "%s/flags/unknown_flag.png", > - e_module_dir_get(e_xkb_cfg_inst->module) > - ); > + > + if (!ecore_file_exists(buf)) snprintf( > + buf, sizeof(buf), > + "%s/flags/unknown_flag.png", > + e_module_dir_get(e_xkb_cfg_inst->module) > + ); > + > e_icon_file_set(icon, buf); > - snprintf(buf, sizeof(buf), "%s (%s)", layout->description, > layout->name); + > + snprintf( > + buf, sizeof(buf), > + "%s (%s)", > + layout->description, > + layout->name > + ); > + > e_widget_ilist_append_relative( > - cfdata->used_list, > - icon, buf, > + cfdata->used_list, icon, buf, > _cb_layout_used_select, > - cfdata, layout->name, > - sel > + cfdata, layout->name, n > ); > - e_widget_ilist_selected_set(cfdata->used_list, (sel + 1)); > + e_widget_ilist_selected_set(cfdata->used_list, (n + 1)); > } > } > > - e_widget_ilist_go(cfdata->used_list); > + e_widget_ilist_go (cfdata->used_list); > e_widget_ilist_thaw(cfdata->used_list); > - edje_thaw(); > + > + edje_thaw (); > evas_event_thaw(cfdata->evas); > } > > -static Eina_Bool _cb_fill_delay(void *data) > +static Eina_Bool > +_cb_fill_delay(void *data) > { > E_Config_Dialog_Data *cfdata = NULL; > - Eina_List *l = NULL; > - Evas_Object *ic = NULL; > - Evas_Object *end = NULL; > - E_XKB_Layout *layout = NULL; > + Eina_List *l = NULL; > + Evas_Object *ic = NULL; > + Evas_Object *end = NULL; > + E_XKB_Layout *layout = NULL; > + > char buf[4096]; > > - if (!(cfdata = data)) return ECORE_CALLBACK_RENEW; > + if (!(cfdata = data)) > + return ECORE_CALLBACK_RENEW; > > evas_event_freeze(cfdata->evas); > - edje_freeze(); > + edje_freeze (); > + > e_widget_ilist_freeze(cfdata->layout_list); > - e_widget_ilist_clear(cfdata->layout_list); > + e_widget_ilist_clear (cfdata->layout_list); > > EINA_LIST_FOREACH(layouts, l, layout) > { > ic = e_icon_add(cfdata->evas); > + > snprintf( > buf, sizeof(buf), > "%s/flags/%s_flag.png", > e_module_dir_get(e_xkb_cfg_inst->module), > layout->name > ); > - if (!ecore_file_exists(buf)) > - snprintf( > - buf, sizeof(buf), > - "%s/flags/unknown_flag.png", > - e_module_dir_get(e_xkb_cfg_inst->module) > - ); > + > + if (!ecore_file_exists(buf)) snprintf( > + buf, sizeof(buf), > + "%s/flags/unknown_flag.png", > + e_module_dir_get(e_xkb_cfg_inst->module) > + ); > + > e_icon_file_set(ic, buf); > > end = edje_object_add(cfdata->evas); > @@ -526,7 +614,13 @@ > else if (end) > edje_object_signal_emit(end, "e,state,unchecked", "e"); > > - snprintf(buf, sizeof(buf), "%s (%s)", layout->description, > layout->name); > + snprintf( > + buf, sizeof(buf), > + "%s (%s)", > + layout->description, > + layout->name > + ); > + > e_widget_ilist_append_full( > cfdata->layout_list, > ic, end, buf, > @@ -534,12 +628,12 @@ > cfdata, > layout->name > ); > - > } > > - e_widget_ilist_go(cfdata->layout_list); > + e_widget_ilist_go (cfdata->layout_list); > e_widget_ilist_thaw(cfdata->layout_list); > - edje_thaw(); > + > + edje_thaw (); > evas_event_thaw(cfdata->evas); > > /* fill the list of used keyboards here */ > @@ -549,37 +643,50 @@ > return ECORE_CALLBACK_CANCEL; > } > > -static void _fill_used_list(E_Config_Dialog_Data *cfdata) > +static void > +_fill_used_list(E_Config_Dialog_Data *cfdata) > { > - Eina_List *l = NULL; > - Evas_Object *ic = NULL; > + Eina_List *l = NULL; > + Evas_Object *ic = NULL; > E_XKB_Layout *layout = NULL; > + > char buf[4096]; > > evas_event_freeze(cfdata->evas); > - edje_freeze(); > + edje_freeze (); > + > e_widget_ilist_freeze(cfdata->used_list); > - e_widget_ilist_clear(cfdata->used_list); > + e_widget_ilist_clear (cfdata->used_list); > > EINA_LIST_FOREACH(layouts, l, layout) > { > - if (!layout->used) continue; > + if (!layout->used) > + continue; > + > ic = e_icon_add(cfdata->evas); > + > snprintf( > buf, sizeof(buf), > "%s/flags/%s_flag.png", > e_module_dir_get(e_xkb_cfg_inst->module), > layout->name > ); > - if (!ecore_file_exists(buf)) > - snprintf( > - buf, sizeof(buf), > - "%s/flags/unknown_flag.png", > - e_module_dir_get(e_xkb_cfg_inst->module) > - ); > + > + if (!ecore_file_exists(buf)) snprintf( > + buf, sizeof(buf), > + "%s/flags/unknown_flag.png", > + e_module_dir_get(e_xkb_cfg_inst->module) > + ); > + > e_icon_file_set(ic, buf); > > - snprintf(buf, sizeof(buf), "%s (%s)", layout->description, > layout->name); > + snprintf( > + buf, sizeof(buf), > + "%s (%s)", > + layout->description, > + layout->name > + ); > + > e_widget_ilist_append( > cfdata->used_list, > ic, buf, > @@ -589,57 +696,69 @@ > ); > } > > - e_widget_ilist_go(cfdata->used_list); > + e_widget_ilist_go (cfdata->used_list); > e_widget_ilist_thaw(cfdata->used_list); > - edje_thaw(); > + > + edje_thaw (); > evas_event_thaw(cfdata->evas); > } > > -static void _cb_layout_select(void *data) > +static void > +_cb_layout_select(void *data) > { > E_Config_Dialog_Data *cfdata = NULL; > - const E_Ilist_Item *it = NULL; > - Eina_List *l = NULL; > - unsigned int enabled = 0, disabled = 0; > - E_XKB_Layout *layout = NULL; > + E_XKB_Layout *layout = NULL; > + const char *label = NULL; > + int n = 0; > > - if (!(cfdata = data)) return; > - EINA_LIST_FOREACH(e_widget_ilist_items_get(cfdata->layout_list), l, it) > - { > - if (!it->selected || it->header) continue; > - if (!(layout = eina_list_search_unsorted(layouts, > layout_sort_by_label_cb, it->label))) continue; > - if (layout->used) > - enabled++; > - else > - disabled++; > - } > + if (!(cfdata = data)) > + return; > > - e_widget_disabled_set(cfdata->btn_add, !disabled); > - e_widget_disabled_set(cfdata->btn_del, !enabled); > + if ((n = e_widget_ilist_selected_get(cfdata->layout_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->layout_list, n))) > + return; > + > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > + e_widget_disabled_set(cfdata->btn_add, layout->used); > + e_widget_disabled_set(cfdata->btn_del, !layout->used); > } > > -static void _cb_layout_used_select(void *data) > +static void > +_cb_layout_used_select(void *data) > { > - Eina_List *variants = NULL, *ll = NULL, *l = NULL; > - E_Config_Dialog_Data *cfdata = NULL; > - E_XKB_Variant *variant = NULL; > - E_XKB_Layout *layout = NULL; > - E_XKB_Model *model = NULL; > - int sel = 0, count = 0; > + E_Config_Dialog_Data *cfdata = NULL; > + E_XKB_Variant *variant = NULL; > + E_XKB_Layout *layout = NULL; > + E_XKB_Model *model = NULL; > + Eina_List *l = NULL; > + const char *label = NULL; > + int n = 0; > + > char buf[4096]; > > - if (!(cfdata = data)) return; > + if (!(cfdata = data)) > + return; > > - const char *label = e_widget_ilist_selected_label_get(cfdata->used_list); > - if (!label) return; > + if ((n = e_widget_ilist_selected_get(cfdata->used_list)) < 0) > + return; > > - layout = eina_list_search_unsorted(layouts, layout_sort_by_label_cb, > label); > - if (!layout) return; > + if (!(label = e_widget_ilist_nth_label_get(cfdata->used_list, n))) > + return; > > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > evas_event_freeze(cfdata->evas); > - edje_freeze(); > + edje_freeze (); > + > e_widget_ilist_freeze(cfdata->model_list); > - e_widget_ilist_clear(cfdata->model_list); > + e_widget_ilist_clear (cfdata->model_list); > > EINA_LIST_FOREACH(models, l, model) > { > @@ -648,86 +767,122 @@ > model->description, _cb_model_select, > cfdata, model->name > ); > + > if (model == layout->model) > - e_widget_ilist_selected_set(cfdata->model_list, > e_widget_ilist_count(cfdata->model_list)); > + e_widget_ilist_selected_set( > + cfdata->model_list, > + (e_widget_ilist_count(cfdata->model_list) - 1) > + ); > } > > - e_widget_ilist_go(cfdata->model_list); > - e_widget_ilist_thaw(cfdata->model_list); > + e_widget_ilist_go (cfdata->model_list); > + e_widget_ilist_thaw (cfdata->model_list); > e_widget_ilist_freeze(cfdata->variant_list); > - e_widget_ilist_clear(cfdata->variant_list); > + e_widget_ilist_clear (cfdata->variant_list); > > - EINA_LIST_FOREACH(layout->variants, ll, variant) > + EINA_LIST_FOREACH(layout->variants, l, variant) > { > - snprintf(buf, sizeof(buf), "%s (%s)", variant->name, > variant->description); > + snprintf( > + buf, sizeof(buf), > + "%s (%s)", > + variant->name, > + variant->description > + ); > + > e_widget_ilist_append( > cfdata->variant_list, NULL, > buf, _cb_variant_select, > cfdata, variant->name > ); > + > if (variant == layout->variant) > - e_widget_ilist_selected_set(cfdata->variant_list, > e_widget_ilist_count(cfdata->variant_list)); > + e_widget_ilist_selected_set( > + cfdata->variant_list, > + (e_widget_ilist_count(cfdata->variant_list) - 1) > + ); > } > > - e_widget_ilist_go(cfdata->variant_list); > + e_widget_ilist_go (cfdata->variant_list); > e_widget_ilist_thaw(cfdata->variant_list); > - edje_thaw(); > + > + edje_thaw (); > evas_event_thaw(cfdata->evas); > > - sel = e_widget_ilist_selected_get(cfdata->used_list); > + n = e_widget_ilist_selected_get(cfdata->used_list); > > - EINA_LIST_FOREACH(layouts, l, layout) > - { > - if (!layout->used) continue; > - ++count; > - } > - > - e_widget_disabled_set(cfdata->btn_up, (sel == 0)); > - e_widget_disabled_set(cfdata->btn_down, !(sel < (count - 1))); > + e_widget_disabled_set(cfdata->btn_up, (n <= 0)); > + e_widget_disabled_set( > + cfdata->btn_down, > + (n == (e_widget_ilist_count(cfdata->used_list) - 1)) > + ); > } > > -static void _cb_model_select(void *data) > +static void > +_cb_model_select(void *data) > { > E_Config_Dialog_Data *cfdata = NULL; > - E_XKB_Layout *layout = NULL; > - E_XKB_Model *model = NULL; > - if (!(cfdata = data)) return; > + E_XKB_Layout *layout = NULL; > + E_XKB_Model *model = NULL; > + const char *label = NULL; > + int n = 0; > > - const char *label = e_widget_ilist_selected_label_get(cfdata->used_list); > - if (label) > - { > - layout = eina_list_search_unsorted(layouts, layout_sort_by_label_cb, > label); > - if (layout) > - { > - const char *lbl = > e_widget_ilist_selected_label_get(cfdata->model_list); > - if (lbl) > - { > - model = eina_list_search_unsorted(models, > model_sort_by_label_cb, lbl); > - if (model) layout->model = model; > - } > - } > - } > + if (!(cfdata = data)) > + return; > + > + if ((n = e_widget_ilist_selected_get(cfdata->used_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->used_list, n))) > + return; > + > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > + if ((n = e_widget_ilist_selected_get(cfdata->model_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->model_list, n))) > + return; > + > + if (!(model = eina_list_search_unsorted( > + models, model_sort_by_label_cb, label > + ))) return; > + > + if (model) layout->model = model; > } > > -static void _cb_variant_select(void *data) > +static void > +_cb_variant_select(void *data) > { > - E_Config_Dialog_Data *cfdata = NULL; > - E_XKB_Layout *layout = NULL; > - E_XKB_Variant *variant = NULL; > - if (!(cfdata = data)) return; > + E_Config_Dialog_Data *cfdata = NULL; > + E_XKB_Variant *variant = NULL; > + E_XKB_Layout *layout = NULL; > + const char *label = NULL; > + int n = 0; > > - const char *label = e_widget_ilist_selected_label_get(cfdata->used_list); > - if (label) > - { > - layout = eina_list_search_unsorted(layouts, layout_sort_by_label_cb, > label); > - if (layout) > - { > - const char *lbl = > e_widget_ilist_selected_label_get(cfdata->variant_list); > - if (lbl) > - { > - variant = eina_list_search_unsorted(layout->variants, > variant_sort_by_label_cb, lbl); > - if (variant) layout->variant = variant; > - } > - } > - } > + if (!(cfdata = data)) > + return; > + > + if ((n = e_widget_ilist_selected_get(cfdata->used_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->used_list, n))) > + return; > + > + if (!(layout = eina_list_search_unsorted( > + layouts, layout_sort_by_label_cb, label > + ))) return; > + > + if ((n = e_widget_ilist_selected_get(cfdata->variant_list)) < 0) > + return; > + > + if (!(label = e_widget_ilist_nth_label_get(cfdata->variant_list, n))) > + return; > + > + if (!(variant = eina_list_search_unsorted( > + layout->variants, variant_sort_by_label_cb, label > + ))) return; > + > + if (variant) layout->variant = variant; > } > > Modified: trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.c > =================================================================== > --- trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.c 2011-11-04 > 23:19:14 UTC (rev 64751) +++ > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.c 2011-11-05 01:54:57 > UTC (rev 64752) @@ -82,10 +82,10 @@ ); > > /* Define EET Data Storage for the config file */ > - e_xkb_cfg_layout_edd = E_CONFIG_DD_NEW("e_xkb_cfg_layout", > e_xkb_cfg_layout); > + e_xkb_cfg_layout_edd = E_CONFIG_DD_NEW("E_XKB_Config_Layout", > E_XKB_Config_Layout); #undef T > #undef D > - #define T e_xkb_cfg_layout > + #define T E_XKB_Config_Layout > #define D e_xkb_cfg_layout_edd > E_CONFIG_VAL(D, T, name, STR); > E_CONFIG_VAL(D, T, model, STR); > @@ -182,7 +182,7 @@ > > while (e_xkb_cfg_inst->used_layouts) > { > - e_xkb_cfg_layout *cl = NULL; > + E_XKB_Config_Layout *cl = NULL; > > cl = e_xkb_cfg_inst->used_layouts->data; > > @@ -212,7 +212,7 @@ > > EAPI int e_modapi_save(E_Module *m) > { > - e_config_domain_save("module.xkbswitch", e_xkb_cfg_edd, e_xkb_cfg_inst); > + e_config_domain_save("module.xkbswitch", e_xkb_cfg_edd, e_xkb_cfg_inst); > return 1; > } > > @@ -353,7 +353,7 @@ > { > while (e_xkb_cfg_inst->used_layouts) > { > - e_xkb_cfg_layout *cl = NULL; > + E_XKB_Config_Layout *cl = NULL; > > cl = e_xkb_cfg_inst->used_layouts->data; > > > Modified: trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.h > =================================================================== > --- trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.h 2011-11-04 > 23:19:14 UTC (rev 64751) +++ > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_main.h 2011-11-05 01:54:57 > UTC (rev 64752) @@ -38,12 +38,12 @@ } e_xkb_cfg; > > /* used layout - these are saved in a list */ > -typedef struct _e_xkb_cfg_layout > +typedef struct _E_XKB_Config_Layout > { > const char *name; > const char *model; > const char *variant; > -} e_xkb_cfg_layout; > +} E_XKB_Config_Layout; > > /* Prototypes */ > > > Modified: trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_parse.c > =================================================================== > --- trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_parse.c 2011-11-04 > 23:19:14 UTC (rev 64751) +++ > trunk/E-MODULES-EXTRA/xkbswitch/src/e_mod_parse.c 2011-11-05 01:54:57 > UTC (rev 64752) @@ -1,16 +1,10 @@ -/* > - * This file parses the XML file with rules into a tree with which we can > work. > - * It's supposed to serve as simple interface to layouts and variants. > - * > - * Reader example on libxml2 page used for reference. > - */ > - > #include "e_mod_parse.h" > > Eina_List *layouts = NULL; > Eina_List *models = NULL; > > -void parse_rules(const char *fname) > +void > +parse_rules(const char *fname) > { > E_XKB_Model *model = NULL; > E_XKB_Layout *layout = NULL; > @@ -73,13 +67,13 @@ > while (p[0] == ' ') ++p; > > variant = E_NEW(E_XKB_Variant, 1); > - variant->name = "basic"; > - variant->description = "Default layout variant"; > + variant->name = eina_stringshare_add("basic"); > + variant->description = eina_stringshare_add("Default layout > variant"); > layout->description = eina_stringshare_add(p); > layout->used = EINA_FALSE; > layout->model = NULL; > - layout->variant = NULL; > + layout->variant = variant; > layout->variants = eina_list_append(layout->variants, variant); > > layouts = eina_list_append(layouts, layout); > @@ -119,12 +113,15 @@ > variant->description = eina_stringshare_add(p); > } else break; > > + fclose(f); > + > /* Sort layouts */ > layouts = > eina_list_sort(layouts, eina_list_count(layouts), layout_sort_cb); > } > > -void clear_rules() > +void > +clear_rules() > { > E_XKB_Variant *v = NULL; > E_XKB_Layout *la = NULL; > @@ -134,19 +131,33 @@ > > EINA_LIST_FOREACH(layouts, l, la) this should be EINA_LIST_FREE to avoid unnecessary iterating > { > + if (la->name ) eina_stringshare_del(la->name); > + if (la->description) eina_stringshare_del(la->description); > + > EINA_LIST_FOREACH(la->variants, ll, v) this as well > + { > + if (v->name ) eina_stringshare_del(v->name); > + if (v->description) eina_stringshare_del(v->description); > free(v); > + } > eina_list_free(la->variants); > + > free(la); > } > eina_list_free(layouts); > > EINA_LIST_FOREACH(models, l, m) and this > + { > + if (m->name ) eina_stringshare_del(m->name); > + if (m->description) eina_stringshare_del(m->description); > + > free(m); > + } > eina_list_free(models); > } > all of these sorting functions below here look like they operate only on stringshared strings. if that's the case, you can just return X != Y and drop all the strcmp calls. > -int layout_sort_cb(const void *data1, const void *data2) > +int > +layout_sort_cb(const void *data1, const void *data2) > { > const E_XKB_Layout *l1 = NULL, *l2 = NULL; > > @@ -157,7 +168,8 @@ > return strcmp(l1->name, l2->name); > } > > -int model_sort_cb(const void *data1, const void *data2) > +int > +model_sort_cb(const void *data1, const void *data2) > { > const E_XKB_Model *l1 = NULL, *l2 = NULL; > > @@ -168,7 +180,8 @@ > return strcmp(l1->name, l2->name); > } > > -int variant_sort_cb(const void *data1, const void *data2) > +int > +variant_sort_cb(const void *data1, const void *data2) > { > const E_XKB_Variant *l1 = NULL, *l2 = NULL; > > @@ -179,7 +192,8 @@ > return strcmp(l1->name, l2->name); > } > > -int model_sort_by_name_cb(const void *data1, const void *data2) > +int > +model_sort_by_name_cb(const void *data1, const void *data2) > { > const E_XKB_Model *l1 = NULL; > const char *l2 = NULL; > @@ -190,7 +204,8 @@ > return strcmp(l1->name, l2); > } > > -int variant_sort_by_name_cb(const void *data1, const void *data2) > +int > +variant_sort_by_name_cb(const void *data1, const void *data2) > { > const E_XKB_Variant *l1 = NULL; > const char *l2 = NULL; > @@ -201,7 +216,8 @@ > return strcmp(l1->name, l2); > } > > -int layout_sort_by_name_cb(const void *data1, const void *data2) > +int > +layout_sort_by_name_cb(const void *data1, const void *data2) > { > const E_XKB_Layout *l1 = NULL; > const char *l2 = NULL; > @@ -212,7 +228,8 @@ > return strcmp(l1->name, l2); > } > > -int model_sort_by_label_cb(const void *data1, const void *data2) > +int > +model_sort_by_label_cb(const void *data1, const void *data2) > { > const E_XKB_Model *l1 = NULL; > const char *l2 = NULL; > @@ -224,7 +241,8 @@ > return strcmp(l1->description, l2); > } > > -int variant_sort_by_label_cb(const void *data1, const void *data2) > +int > +variant_sort_by_label_cb(const void *data1, const void *data2) > { > const E_XKB_Variant *l1 = NULL; > const char *l2 = NULL; > @@ -239,7 +257,8 @@ > return strcmp(buf, l2); > } > > -int layout_sort_by_label_cb(const void *data1, const void *data2) > +int > +layout_sort_by_label_cb(const void *data1, const void *data2) > { > const E_XKB_Layout *l1 = NULL; > const char *l2 = NULL; > > -- Mike Blumenkrantz Zentific: Doctor recommended, mother approved. ------------------------------------------------------------------------------ RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel