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

Reply via email to