Enlightenment CVS committal

Author  : sndev
Project : e_modules
Module  : language

Dir     : e_modules/language/src/module


Modified Files:
        e_mod_config.c e_mod_lang.c e_mod_lang.h e_mod_main.c 
        e_mod_main.h 


Log Message:

* code reorganization/cleanup
* changes wrt last modapi changes.
* hack around exml_file_read.

===================================================================
RCS file: /cvs/e/e_modules/language/src/module/e_mod_config.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- e_mod_config.c      29 May 2006 21:09:44 -0000      1.15
+++ e_mod_config.c      1 Jun 2006 19:23:42 -0000       1.16
@@ -17,23 +17,30 @@
    lang_switch_policy_t        lang_policy;
    int                 lang_show_indicator;
 
-   Evas_List   *selected_languages;
-
    /* for internal use only */
    Config   *conf;
    Evas            *evas;
+
+   Evas_List *s_langs;
+
+   char *plang;
+   char *slang;
+   char *kb_model;
+   char *kb_variant;
    /*************************/
 
    struct 
      {
-       Evas_Object  *lang_ilist;
-       Evas_Object  *btn_add;
-       Evas_Object  *btn_del;
-       Evas_Object  *btn_move_up;
-       Evas_Object  *btn_move_down;
-       Evas_Object  *selected_lang_ilist;
-       Evas_Object  *kbd_model_ilist;
-       Evas_Object  *kbd_layout_variant_ilist;
+       Evas_Object  *o_plang;
+       Evas_Object  *o_slang;
+
+       Evas_Object  *o_add;
+       Evas_Object  *o_del;
+       Evas_Object  *o_up;
+       Evas_Object  *o_down;
+
+       Evas_Object  *o_kbd_model;
+       Evas_Object  *o_kbd_variant;
      } gui;
 };
 
@@ -42,65 +49,95 @@
 /******************* Config Dialog related funcs *****************/
 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_widgets(E_Config_Dialog *cfd, Evas *evas,
                                           E_Config_Dialog_Data *cfdata);
-static int         _basic_apply_data(E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata);
+static int         _apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
 
-static void        _fill_data(E_Config_Dialog_Data *cfdata);
+static Evas_Object  *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas,
+                                             E_Config_Dialog_Data *cfdata);
 
-/**************** button update funcs ***************************/
-static void _lang_update_select_button(E_Config_Dialog_Data *cfdata);
-static void _lang_update_unselect_button(E_Config_Dialog_Data *cfdata);
-static void _lang_update_language_moveup_button(E_Config_Dialog_Data *cfdata);
-static void _lang_update_language_movedown_button(E_Config_Dialog_Data 
*cfdata);
-
-/*************** ilist update funcs ****************************/
-static void _lang_update_lang_defined_list(E_Config_Dialog_Data *cfdata);
-static void _lang_update_selected_lang_list(E_Config_Dialog_Data *cfdata);
-static void _lang_update_kbd_model_list(E_Config_Dialog_Data *cfdata);
-static void _lang_update_kbd_layout_variant_list(E_Config_Dialog_Data *cfdata);
-
-/************* button callbacks ****************************/
-static void _lang_select_language_cb(void *data, void *data2);
-static void _lang_unselect_language_cb(void *data, void *data2);
-static void _lang_move_language_order_up_cb(void *data, void *data2);
-static void _lang_move_language_order_down_cb(void *data, void *data2);
-
-/************ ilist callbacks *****************************/
-static void _lang_languages_ilist_cb_change(void *data, Evas_Object *obj);
-static void _lang_selected_languages_ilist_cb_change(void *data, Evas_Object 
*obj);
-static void _lang_kbd_model_ilist_cb_change(void *data, Evas_Object *obj);
-static void _lang_kbd_layout_variant_ilist_cb_change(void *data, Evas_Object 
*obj);
-/************************************************************/
+static void        _fill_data(E_Config_Dialog_Data *cfdata);
 
-void _lang_configure_language_module(Config *cfg)
+/****************** ilist callbacks **********************************/
+static void _conf_cb_planguage_select  (void *data);
+static void _conf_cb_slanguage_select  (void *data);
+static void _conf_cb_kbd_model_select  (void *data);
+static void _conf_cb_kbd_variant_select(void *data);
+
+/****************** button callbacks *********************************/
+static void _conf_cb_language_add   (void *data, void *data2);
+static void _conf_cb_language_del   (void *data, void *data2);
+static void _conf_cb_language_up    (void *data, void *data2);
+static void _conf_cb_language_down  (void *data, void *data2);
+
+/***************** button state set functions ************************/
+static void _conf_add_button_availability_set  (E_Config_Dialog_Data *cfdata);
+static void _conf_del_button_availability_set  (E_Config_Dialog_Data *cfdata);
+static void _conf_up_button_availability_set   (E_Config_Dialog_Data *cfdata);
+static void _conf_down_button_availability_set (E_Config_Dialog_Data *cfdata);
+
+/***************** list update functions ****************************/
+static void _conf_fill_planguages(E_Config_Dialog_Data *cfdata);
+static void _conf_fill_slanguages(E_Config_Dialog_Data *cfdata);
+static void _conf_fill_kbd_model (E_Config_Dialog_Data *cfdata);
+
+/*************************************************************************/
+void
+_lang_configure_language_module(Config *conf)
 {
-   E_Config_Dialog *cfd;
+   E_Config_Dialog     *cfd;
    E_Config_Dialog_View *v;
 
    v = E_NEW(E_Config_Dialog_View, 1);
-
-   v->create_cfdata       = _create_data;
-   v->free_cfdata         = _free_data;
-   v->basic.apply_cfdata   = _basic_apply_data;
-   v->basic.create_widgets = _basic_create_widgets;
+   
+   v->create_cfdata          = _create_data;
+   v->free_cfdata            = _free_data;
+   v->basic.apply_cfdata      = _apply_data;
+   v->basic.create_widgets    = _basic_create_widgets;
+   v->advanced.apply_cfdata   = _apply_data;
+   v->advanced.create_widgets = _advanced_create_widgets;
 
    cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),
-                            _("Language Module Configuration"), NULL, 0, v, 
cfg);
-   cfg->config_dialog = cfd;
+                            _("Language Module Settings"), NULL, 0, v, conf);
+
+   conf->config_dialog = cfd;
+}
+
+/*************** Config Dialog Functions ********************/
+static void
+_fill_data(E_Config_Dialog_Data *cfdata)
+{
+   Evas_List *l;
+
+   cfdata->lang_policy          = cfdata->conf->lang_policy;
+   cfdata->lang_show_indicator  = cfdata->conf->lang_show_indicator;
+
+   for (l = cfdata->conf->languages; l; l = l->next)
+     {
+       Language *lang;
+       
+       lang = lang_language_copy(l->data);
+       if (lang)
+         cfdata->s_langs = evas_list_append(cfdata->s_langs, lang);
+     }
+
+   cfdata->plang       = NULL;
+   cfdata->slang       = NULL;
+   cfdata->kb_model    = NULL;
+   cfdata->kb_variant  = NULL;
 }
 
-/******************* Config Dialog related funcs *****************/
 static void *
 _create_data(E_Config_Dialog *cfd)
 {
    E_Config_Dialog_Data *cfdata;
-   Config   *cfg;
+   Config              *conf;
 
-   cfg = cfd->data;
+   conf = cfd->data;
 
    cfdata = E_NEW(E_Config_Dialog_Data, 1);
-   cfdata->conf = cfg;
+   cfdata->conf = conf;
 
    _fill_data(cfdata);
    return cfdata;
@@ -108,153 +145,198 @@
 static void
 _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 {
-   while (cfdata->selected_languages)
+   while (cfdata->s_langs)
      {
-       lang_language_free(cfdata->selected_languages->data);
-       cfdata->selected_languages = 
evas_list_remove_list(cfdata->selected_languages,
-                                                          
cfdata->selected_languages);
+       lang_language_free(cfdata->s_langs->data);
+       cfdata->s_langs = evas_list_remove_list(cfdata->s_langs, 
cfdata->s_langs);
      }
 
+   if (cfdata->plang) E_FREE(cfdata->plang);
+   if (cfdata->slang) E_FREE(cfdata->slang);
+   if (cfdata->kb_model) E_FREE(cfdata->kb_model);
+   if (cfdata->kb_variant) E_FREE(cfdata->kb_variant);
+
    cfdata->conf->config_dialog = NULL;
    free(cfdata);
 }
 static Evas_Object *
 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata)
 {
-   E_Radio_Group  *rg;
-   Evas_Object *o, *of, *ob, *ot, *ot2, *oft;
+   E_Radio_Group *rg;
+   Evas_Object *o, *ol, *ol2, *of, *ob;
 
    cfdata->evas = evas;
 
    o = e_widget_list_add(evas, 0, 0);
 
-   ot = e_widget_table_add(evas, 0);
-   {
-      ot2 = e_widget_table_add(evas, 1);
-      {
-        of = e_widget_framelist_add(evas, _("Languages"), 1);
-        {
-           /* languages ilist */
-           ob = e_widget_ilist_add(evas, ILIST_ICON_LANG_WIDTH, 
ILIST_ICON_LANG_HEIGHT, NULL);
-           e_widget_on_change_hook_set(ob, _lang_languages_ilist_cb_change, 
cfdata);
-           cfdata->gui.lang_ilist = ob;
-           e_widget_min_size_set(ob, 250, 170);
-           e_widget_ilist_go(ob);
-           e_widget_framelist_object_append(of, ob);
-        }
-        e_widget_table_object_append(ot2, of, 0, 0, 1, 1, 1, 1, 1, 1);
-
-        oft = e_widget_frametable_add(evas, _("Selected Languages"), 0);
-        {
-
-           /* selected languages ilist */
-           ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
NULL);
-           e_widget_on_change_hook_set(ob, 
_lang_selected_languages_ilist_cb_change, cfdata);
-           cfdata->gui.selected_lang_ilist = ob;
-           e_widget_min_size_set(ob, 250, 170);
-           e_widget_ilist_go(ob);
-           e_widget_frametable_object_append(oft, ob, 0, 0, 4, 1, 1, 1, 1, 1);
-
-           ob = e_widget_button_add(evas, ">>", NULL, 
_lang_select_language_cb, cfdata, NULL);
-           cfdata->gui.btn_add = ob;
-           e_widget_frametable_object_append(oft, ob, 0, 1, 1, 1, 1, 1, 1, 1);
-
-           ob = e_widget_button_add(evas, "<<", NULL, 
_lang_unselect_language_cb, cfdata, NULL);
-           cfdata->gui.btn_del = ob;
-           e_widget_frametable_object_append(oft, ob, 1, 1, 1, 1, 1, 1, 1, 1);
-
-           ob = e_widget_button_add(evas, "Up", "widget/up_arrow", 
-                                    _lang_move_language_order_up_cb, cfdata, 
NULL);
-           cfdata->gui.btn_move_up = ob;
-           e_widget_frametable_object_append(oft, ob, 2, 1, 1, 1, 1, 1, 1, 1);
-
-           ob = e_widget_button_add(evas, "Down", "widget/down_arrow",
-                                    _lang_move_language_order_down_cb, cfdata, 
NULL);
-           cfdata->gui.btn_move_down = ob;
-           e_widget_frametable_object_append(oft, ob, 3, 1, 1, 1, 1, 1, 1, 1);
-        }
-        e_widget_table_object_append(ot2, oft, 1, 0, 1, 1, 1, 1, 1, 1);
-      }
-      e_widget_table_object_append(ot, ot2, 0, 0, 1, 1, 1, 1, 1, 1);
-
-      oft = e_widget_frametable_add(evas, _("Language Settings"), 0);
-      {
-        of = e_widget_framelist_add(evas, _("Keyboard Model"), 1);
-        {
-           ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
NULL);
-           e_widget_on_change_hook_set(ob, _lang_kbd_model_ilist_cb_change, 
cfdata);
-           cfdata->gui.kbd_model_ilist = ob;
-           {
-              e_widget_min_size_set(ob, 390, 80);
-              e_widget_ilist_go(ob);
-           }
-           e_widget_framelist_object_append(of, ob);
-        }
-        e_widget_frametable_object_append(oft, of, 0, 0, 1, 1, 1, 1, 1, 1);
-
-        of = e_widget_framelist_add(evas, _("Layout Variant"), 0);
-        {
-           ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
NULL);
-           e_widget_on_change_hook_set(ob, 
_lang_kbd_layout_variant_ilist_cb_change, cfdata);
-           cfdata->gui.kbd_layout_variant_ilist = ob;
-           {
-              e_widget_min_size_set(ob, 120, 80);
-              e_widget_ilist_go(ob);
-           }
-           e_widget_framelist_object_append(of, ob);
-        }
-        e_widget_frametable_object_append(oft, of, 1, 0, 1, 1, 1, 1, 1, 1);
-      }
-      e_widget_table_object_append(ot, oft, 0, 1, 1, 1, 1, 1, 1, 1);
-   }
-   e_widget_list_object_append(o, ot, 1, 1, 0.5);
-
-   
+   ol = e_widget_list_add(evas, 0, 1);
+      of = e_widget_framelist_add(evas, _("Available Languages"), 1);
+        ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
&(cfdata->plang));
+        e_widget_min_size_set(ob, 220, 160);
+        e_widget_ilist_go(ob);
+        e_widget_framelist_object_append(of, ob);
+        cfdata->gui.o_plang = ob;
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+
+      of = e_widget_framelist_add(evas, _("Selected Languages"), 0);
+        ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
&(cfdata->slang));
+        e_widget_min_size_set(ob, 220, 160);
+        e_widget_ilist_go(ob);
+        e_widget_framelist_object_append(of, ob);
+        cfdata->gui.o_slang = ob;
+
+        ol2 = e_widget_list_add(evas, 0, 1);
+           ob = e_widget_button_add(evas, ">>", NULL, _conf_cb_language_add, 
cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_add = ob;
+
+           ob = e_widget_button_add(evas, "<<", NULL, _conf_cb_language_del, 
cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_del = ob;
+
+           ob = e_widget_button_add(evas, _("Up"), "widget/up_arrow", 
+                                    _conf_cb_language_up, cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_up = ob;
+
+           ob = e_widget_button_add(evas, _("Down"), "widget/down_arrow", 
+                                    _conf_cb_language_down, cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_down = ob;
+        e_widget_framelist_object_append(of, ol2);
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+   e_widget_list_object_append(o, ol, 1, 1, 0.5);
 
-   of = e_widget_framelist_add(evas, _("Language Switching Policy"), 1);
-   { 
+   of = e_widget_framelist_add(evas, _("Language Switch Policy"), 1);
       rg = e_widget_radio_group_new((int *)&(cfdata->lang_policy));
 
-      ob = e_widget_radio_add(evas, "Global", LS_GLOBAL_POLICY, rg);
+      ob = e_widget_radio_add(evas, _("Global"), LS_GLOBAL_POLICY, rg);
       e_widget_framelist_object_append(of, ob);
 
-      ob = e_widget_radio_add(evas, "Window", LS_WINDOW_POLICY, rg);
+      ob = e_widget_radio_add(evas, _("Window"), LS_WINDOW_POLICY, rg);
       e_widget_framelist_object_append(of, ob);
 
-      ob = e_widget_radio_add(evas, "Application", LS_APPLICATION_POLICY, rg);
+      ob = e_widget_radio_add(evas, _("Application"), LS_APPLICATION_POLICY, 
rg);
       e_widget_framelist_object_append(of, ob);
-      e_widget_disabled_set(ob, 1);
-   }
-
+      e_widget_disabled_set(ob, 1); // this is temporary
    e_widget_list_object_append(o, of, 1, 1, 0.5);
 
-   /****************************************************/
+   cfdata->gui.o_kbd_model    = NULL;
+   cfdata->gui.o_kbd_variant  = NULL;
 
-   _lang_update_lang_defined_list(cfdata);
-   _lang_update_selected_lang_list(cfdata);
+   _conf_fill_planguages(cfdata); 
+   _conf_fill_slanguages(cfdata);
 
-   _lang_update_select_button(cfdata);
-   _lang_update_unselect_button(cfdata);
-   _lang_update_language_movedown_button(cfdata);
-   _lang_update_language_moveup_button(cfdata);
+   _conf_add_button_availability_set(cfdata);
+   _conf_del_button_availability_set(cfdata);
+   _conf_up_button_availability_set(cfdata);
+   _conf_down_button_availability_set(cfdata);
+
+   return o;
+}
+static Evas_Object *
+_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata)
+{
+   E_Radio_Group  *rg;
+   Evas_Object *o, *ol, *ol2, *of, *ob;
+
+   cfdata->evas = evas;
+
+   o = e_widget_list_add(evas, 0, 0);
+
+   ol = e_widget_list_add(evas, 0, 1);
+      of = e_widget_framelist_add(evas, _("Available Languages"), 1);
+        ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
&(cfdata->plang));
+        e_widget_min_size_set(ob, 220, 160);
+        e_widget_ilist_go(ob);
+        e_widget_framelist_object_append(of, ob);
+        cfdata->gui.o_plang = ob;
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+
+      of = e_widget_framelist_add(evas, _("Selected Languages"), 0);
+        ob = e_widget_ilist_add(evas, ILIST_ICON_WIDTH, ILIST_ICON_HEIGHT, 
&(cfdata->slang));
+        e_widget_min_size_set(ob, 220, 160);
+        e_widget_ilist_go(ob);
+        e_widget_framelist_object_append(of, ob);
+        cfdata->gui.o_slang = ob;
+
+        ol2 = e_widget_list_add(evas, 0, 1);
+           ob = e_widget_button_add(evas, ">>", NULL, _conf_cb_language_add, 
cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_add = ob;
+
+           ob = e_widget_button_add(evas, "<<", NULL, _conf_cb_language_del, 
cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_del = ob;
+
+           ob = e_widget_button_add(evas, _("Up"), "widget/up_arrow",
+                                    _conf_cb_language_up, cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_up = ob;
+
+           ob = e_widget_button_add(evas, _("Down"), "widget/down_arrow",
+                                    _conf_cb_language_down, cfdata, NULL);
+           e_widget_list_object_append(ol2, ob, 1, 1, 0.5);
+           cfdata->gui.o_down = ob;
+        e_widget_framelist_object_append(of, ol2);
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+   e_widget_list_object_append(o, ol, 1, 1, 0.5);
+
+   ol = e_widget_list_add(evas, 0, 1);
+      of = e_widget_framelist_add(evas, _("Keyboard Model"), 1);
+        ob = e_widget_ilist_add(evas, 0, 0, &(cfdata->kb_model));
+        e_widget_min_size_set(ob, 390, 80);
+        e_widget_ilist_go(ob);
+        cfdata->gui.o_kbd_model = ob;
+        e_widget_framelist_object_append(of, ob);
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+
+      of = e_widget_framelist_add(evas, _("Layout Variant"), 0);
+        ob = e_widget_ilist_add(evas, 0, 0, &(cfdata->kb_variant));
+        e_widget_min_size_set(ob, 120, 80);
+        e_widget_ilist_go(ob);
+        cfdata->gui.o_kbd_variant = ob;
+        e_widget_framelist_object_append(of, ob);
+      e_widget_list_object_append(ol, of, 1, 1, 0.5);
+   e_widget_list_object_append(o, ol, 1, 1, 0.5);
+
+   of = e_widget_framelist_add(evas, _("Language Switch Policy"), 1);
+      rg = e_widget_radio_group_new((int *)&(cfdata->lang_policy));
+
+      ob = e_widget_radio_add(evas, _("Global"), LS_GLOBAL_POLICY, rg);
+      e_widget_framelist_object_append(of, ob);
+
+      ob = e_widget_radio_add(evas, _("Window"), LS_WINDOW_POLICY, rg);
+      e_widget_framelist_object_append(of, ob);
+
+      ob = e_widget_radio_add(evas, _("Application"), LS_APPLICATION_POLICY, 
rg);
+      e_widget_framelist_object_append(of, ob);
+      e_widget_disabled_set(ob, 1); // this is temporary
+   e_widget_list_object_append(o, of, 1, 1, 0.5);
+
+   _conf_fill_planguages(cfdata);
+   _conf_fill_slanguages(cfdata);
+
+   _conf_add_button_availability_set(cfdata);
+   _conf_del_button_availability_set(cfdata);
+   _conf_up_button_availability_set(cfdata);
+   _conf_down_button_availability_set(cfdata);
 
    return o;
 }
 static int
-_basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
+_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 {
-   Evas_List   *l;
+   Evas_List *l;
    Language    *lang, *lang2;
 
    cfdata->conf->lang_policy = cfdata->lang_policy;
-   if (cfdata->conf->lang_policy == LS_GLOBAL_POLICY)
-     { 
-       language_clear_border_language_setup_list();
-       language_unregister_callback_handlers();
-     }
-   else if (cfdata->conf->lang_policy == LS_WINDOW_POLICY ||
-           cfdata->conf->lang_policy == LS_APPLICATION_POLICY)
-     { 
+
+   language_clear_border_language_setup_list();
+   language_unregister_callback_handlers();
+   if (cfdata->conf->lang_policy == LS_WINDOW_POLICY ||
+       cfdata->conf->lang_policy == LS_APPLICATION_POLICY)
+     {
        language_register_callback_handlers();
      }
 
@@ -266,535 +348,417 @@
        cfdata->conf->languages = evas_list_remove_list(cfdata->conf->languages,
                                                        
cfdata->conf->languages);
      }
-   for (l = cfdata->selected_languages; l; l = l->next)
+
+   for (l = cfdata->s_langs; l; l = l->next)
      {
        lang = lang_language_copy(l->data);
+       if (!lang) continue;
+
        lang_language_xorg_values_get(lang);
-       if (lang) 
-         cfdata->conf->languages = evas_list_append(cfdata->conf->languages, 
lang);
+       cfdata->conf->languages = evas_list_append(cfdata->conf->languages, 
lang);
      }
    cfdata->conf->language_selector = 0;
    e_config_save_queue();
 
-   lang_language_switch_to(cfdata->conf, (cfdata->conf->language_selector = 
0));
+   lang_language_switch_to(cfdata->conf, 0);
    return 1;
 }
-static void
-_fill_data(E_Config_Dialog_Data *cfdata)
-{
-   Evas_List   *l;
-   Language    *lang, *lang2;
-
-   if (!cfdata) return;
-
-   cfdata->lang_policy = cfdata->conf->lang_policy;
-   cfdata->lang_show_indicator = cfdata->conf->lang_show_indicator;
-
-   for (l = cfdata->conf->languages; l; l = l->next)
-     {
-       lang = lang_language_copy(l->data);
-       if (lang) 
-         cfdata->selected_languages = 
evas_list_append(cfdata->selected_languages, lang);
-     }
-}
-
-/**************** button update funcs ***************************/
-static void
-_lang_update_select_button(E_Config_Dialog_Data *cfdata)
-{
-   if (!cfdata) return;
 
-   if (e_widget_ilist_count(cfdata->gui.lang_ilist) &&
-       e_widget_ilist_selected_label_get(cfdata->gui.lang_ilist))
-     e_widget_disabled_set(cfdata->gui.btn_add, 0);
-   else
-     e_widget_disabled_set(cfdata->gui.btn_add, 1);
-}
+/***************** list update functions ****************************/
 static void
-_lang_update_unselect_button(E_Config_Dialog_Data *cfdata)
-{
-   if (!cfdata) return;
-
-   if (e_widget_ilist_count(cfdata->gui.selected_lang_ilist) &&
-       e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist))
-     e_widget_disabled_set(cfdata->gui.btn_del, 0);
-   else
-     e_widget_disabled_set(cfdata->gui.btn_del, 1);
-}
-static void
-_lang_update_language_moveup_button(E_Config_Dialog_Data *cfdata)
-{
-   if (!cfdata) return;
-
-   if (evas_list_count(cfdata->selected_languages) < 1 ||
-       !e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist) ||
-       !e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist))
-     { 
-       e_widget_disabled_set(cfdata->gui.btn_move_up, 1);
-     }
-   else
-     e_widget_disabled_set(cfdata->gui.btn_move_up, 0);
-}
-static void
-_lang_update_language_movedown_button(E_Config_Dialog_Data *cfdata)
-{
-   if (!cfdata) return;
-
-   if ((evas_list_count(cfdata->selected_languages) < 1) ||
-       (!e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist)) ||
-       (e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist) ==
-        e_widget_ilist_count(cfdata->gui.selected_lang_ilist) - 1))
-     { 
-       e_widget_disabled_set(cfdata->gui.btn_move_down, 1);
-     }
-   else
-     e_widget_disabled_set(cfdata->gui.btn_move_down, 0);
-}
-
-/*************** ilist update funcs ****************************/
-static void 
-_lang_update_lang_defined_list(E_Config_Dialog_Data *cfdata)
+_conf_fill_planguages(E_Config_Dialog_Data *cfdata)
 {
-   //FIXME: optimize - too slow
-   char                     buf[1024];
-   char                     lbuf[1024];
-   Evas_List        *l, *l2;
-   Language_Predef   *lp;
-   Language         *lang;
-   int indx;
-   char *sel_label = NULL;
-
-   if (!cfdata) return;
-
-   if (e_widget_ilist_count(cfdata->gui.lang_ilist))
-     { 
-       const char *t;
-       t = e_widget_ilist_selected_label_get(cfdata->gui.lang_ilist);
-       if (t)
-         sel_label = strdup(t);
-     }
-   else
-     sel_label = NULL;
+   Evas_List *l;
+   char             buf[128];
+   char             lflag[2048];
 
-   e_widget_ilist_clear(cfdata->gui.lang_ilist);
+   e_widget_ilist_clear(cfdata->gui.o_plang);
    for (l = cfdata->conf->language_predef_list; l; l = l->next)
      {
-       Evas_Object  *ic = NULL;
-       int found = 0;
+       Evas_Object     *ic = NULL;
+       Language_Predef *lp;
+       Evas_List       *l2;
+       int             found = 0;
+
        lp = l->data;
 
-       for (l2 = cfdata->selected_languages; l2 && !found; l2 = l2->next)
+       for (l2 = cfdata->s_langs; l2; l2 = l2->next)
          {
-            lang = l2->data;
-            if (!strcmp(lang->lang_name, lp->lang_name) &&
-                !strcmp(lang->lang_shortcut, lp->lang_shortcut))
-              {
-                 found = 1;
-              }
+            Language *lang = l2->data;
+            if (!strcmp(lang->lang_name, lp->lang_name))
+              found = 1;
          }
-       if (found) continue;
 
+       if (found) continue;
+       
        snprintf(buf, sizeof(buf), ILIST_LANGUAGE_LABEL_FORMAT, lp->lang_name, 
lp->lang_shortcut);
 
        ic = e_icon_add(cfdata->evas);
-       snprintf(lbuf, sizeof(lbuf), "%s/images/%s.png", 
e_module_dir_get(cfdata->conf->module),
-               lp->lang_flag);
-       e_icon_file_set(ic, lbuf);
-       e_widget_ilist_append(cfdata->gui.lang_ilist, ic, buf, NULL, NULL, 
NULL);
-     }
-
-   e_widget_ilist_go(cfdata->gui.lang_ilist);
-   if (sel_label)
-     {
-       int i;
-       int size = e_widget_ilist_count(cfdata->gui.lang_ilist);
-       const char *t;
-       for (i = 0; i < size; i++)
-         {
-            t = e_widget_ilist_nth_label_get(cfdata->gui.lang_ilist, i);
-            if (!strcmp(t, sel_label))
-              { 
-                 e_widget_ilist_selected_set(cfdata->gui.lang_ilist, i);
-                 break;
-              }
-         }
-       free(sel_label);
+       snprintf(lflag, sizeof(lflag), "%s/images/%s.png",
+                e_module_dir_get(cfdata->conf->module), lp->lang_flag);
+       e_icon_file_set(ic, lflag);
+       e_widget_ilist_append(cfdata->gui.o_plang, ic, buf, 
_conf_cb_planguage_select,
+                             cfdata, (char *)lp->lang_name);
      }
+   e_widget_ilist_go(cfdata->gui.o_plang);
 }
-static void 
-_lang_update_selected_lang_list(E_Config_Dialog_Data *cfdata)
-{
-   //FIXME: optimize - too slow
-   char buf[1024];
-   char lbuf[1024];
-   Evas_List   *l;
-   Language    *lang;
-   int indx;
 
-   if (!cfdata) return;
-
-   if (e_widget_ilist_count(cfdata->gui.selected_lang_ilist))
-     indx = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist);
-   else
-     indx = -1;
+static void
+_conf_fill_slanguages(E_Config_Dialog_Data *cfdata)
+{
+   Evas_List *l;
+   char             buf[128];
+   char             lflag[2048];
 
-   e_widget_ilist_clear(cfdata->gui.selected_lang_ilist);
-   for (l = cfdata->selected_languages; l; l = l->next)
+   e_widget_ilist_clear(cfdata->gui.o_slang);
+   for (l = cfdata->s_langs; l; l = l->next)
      {
-       Evas_Object *ic;
+       Evas_Object *ic = NULL;
+       Language    *lang;
+
        lang = l->data;
 
-       snprintf(buf, sizeof(buf), ILIST_LANGUAGE_LABEL_FORMAT, lang->lang_name,
-                lang->lang_shortcut);
+       snprintf(buf, sizeof(buf), ILIST_LANGUAGE_LABEL_FORMAT,
+                lang->lang_name, lang->lang_shortcut);
 
        ic = e_icon_add(cfdata->evas);
-       snprintf(lbuf, sizeof(lbuf), "%s/images/%s.png", 
e_module_dir_get(cfdata->conf->module),
-               lang->lang_flag);
-       e_icon_file_set(ic, lbuf);
-       e_widget_ilist_append(cfdata->gui.selected_lang_ilist, ic, buf, NULL, 
NULL, NULL);
-     }
-
-   e_widget_ilist_go(cfdata->gui.selected_lang_ilist);
-   if (indx >= 0)
-     {
-       if (indx >= e_widget_ilist_count(cfdata->gui.selected_lang_ilist))
-         indx = e_widget_ilist_count(cfdata->gui.selected_lang_ilist) - 1;
-
-       e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx);
+       snprintf(lflag, sizeof(lflag), "%s/images/%s.png",
+                e_module_dir_get(cfdata->conf->module), lang->lang_flag);
+       e_icon_file_set(ic, lflag);
+       e_widget_ilist_append(cfdata->gui.o_slang, ic, buf, 
_conf_cb_slanguage_select,
+                             cfdata, (char *)lang->lang_name);
      }
+   e_widget_ilist_go(cfdata->gui.o_slang);
 }
 static void
-_lang_update_kbd_model_list(E_Config_Dialog_Data *cfdata)
+_conf_fill_kbd_model(E_Config_Dialog_Data *cfdata)
 {
-   int  kbd_model_indx = -1;
-   Language *selected_lang;
-   Language_Kbd_Model *lkm;
-   Evas_List *l;
+   int kbdm_i = -1;
+   Language *slang;
 
-   if (!cfdata) return;
+   if (!cfdata->gui.o_kbd_model) return;
 
-   selected_lang = evas_list_nth(cfdata->selected_languages,
-                                
e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist));
-
-   if (!selected_lang)
-     {
-       e_widget_ilist_clear(cfdata->gui.kbd_model_ilist);
+   if (!cfdata->slang)
+     { 
+       e_widget_ilist_clear(cfdata->gui.o_kbd_model);
        return;
      }
 
-   if (!e_widget_ilist_count(cfdata->gui.kbd_model_ilist))
+   slang = evas_list_nth(cfdata->s_langs, 
e_widget_ilist_selected_get(cfdata->gui.o_slang));
+
+   if (!e_widget_ilist_count(cfdata->gui.o_kbd_model))
      {
-       char buf[4096];
+       Evas_List *l;
        int i;
+       char buf[256];
 
        for (l = cfdata->conf->language_kbd_model_list, i = 0; l; l = l->next, 
i++)
          {
+            Language_Kbd_Model *lkm;
+
             lkm = l->data;
 
-            if (!strcmp(lkm->kbd_model, selected_lang->rdefs.model))
-              kbd_model_indx = i;
+            if (!strcmp(lkm->kbd_model, slang->rdefs.model))
+              kbdm_i = i;
 
-            //snprintf(buf, sizeof(buf), "%s (%s)", 
lkm->kbd_model_desctiption, lkm->kbd_model);
-            snprintf(buf, sizeof(buf), "%s", lkm->kbd_model_desctiption);
-            e_widget_ilist_append(cfdata->gui.kbd_model_ilist, NULL, buf, 
NULL, NULL, NULL);
+            snprintf(buf, sizeof(buf), "%s", lkm->kbd_model_description);
+            e_widget_ilist_append(cfdata->gui.o_kbd_model, NULL, buf,
+                                  _conf_cb_kbd_model_select, cfdata, (char 
*)lkm->kbd_model);
          }
      }
    else
      {
-       for (l = cfdata->conf->language_kbd_model_list, kbd_model_indx = 0;
-            l; l = l->next, kbd_model_indx++)
+       Evas_List *l;
+
+       for (l = cfdata->conf->language_kbd_model_list, kbdm_i = 0; l; l = 
l->next, kbdm_i++)
          {
+            Language_Kbd_Model *lkm;
+
             lkm = l->data;
-            if (!strcmp(lkm->kbd_model, selected_lang->rdefs.model))
+
+            if (!strcmp(lkm->kbd_model, slang->rdefs.model))
               break;
          }
        if (!l)
-         kbd_model_indx = -1;
+         kbdm_i = 0;
      }
 
-   e_widget_ilist_go(cfdata->gui.kbd_model_ilist);
-   e_widget_ilist_selected_set(cfdata->gui.kbd_model_ilist, kbd_model_indx);
+   e_widget_ilist_go(cfdata->gui.o_kbd_model);
+   e_widget_ilist_selected_set(cfdata->gui.o_kbd_model, kbdm_i);
 }
 static void
-_lang_update_kbd_layout_variant_list(E_Config_Dialog_Data *cfdata)
+_conf_fill_kbd_variant(E_Config_Dialog_Data *cfdata)
 {
-   Language         *selected_lang;
-   Language_Predef   *lp;
-   Evas_List        *l;
-   int              kbd_variant_indx = 0;
+   Language  *slang;
+   Evas_List *l;
+   int kbdv_i = 0;
 
-   if (!cfdata) return;
+   if (!cfdata->gui.o_kbd_variant) return;
 
-   selected_lang = evas_list_nth(cfdata->selected_languages,
-                                
e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist));
+   e_widget_ilist_clear(cfdata->gui.o_kbd_variant);
 
-   e_widget_ilist_clear(cfdata->gui.kbd_layout_variant_ilist);
+   if (!cfdata->slang) 
+     return;
 
-   if (!selected_lang) return;
+   e_widget_ilist_clear(cfdata->gui.o_kbd_variant);
 
    for (l = cfdata->conf->language_predef_list; l; l = l->next)
      {
+       Language_Predef *lp;
+
        lp = l->data;
 
-       if (!strcmp(lp->lang_name, selected_lang->lang_name))
+       if (!strcmp(lp->lang_name, cfdata->slang))
          {
+            Language *lang;
             int i;
-            e_widget_ilist_append(cfdata->gui.kbd_layout_variant_ilist,
-                                  NULL, "basic", NULL, NULL, NULL);
 
-            for (l = lp->kbd_variant, i = 1; l; l = l->next)
+            lang = evas_list_nth(cfdata->s_langs,
+                                 
e_widget_ilist_selected_get(cfdata->gui.o_slang));
+
+            e_widget_ilist_append(cfdata->gui.o_kbd_variant, NULL, "basic",
+                                  _conf_cb_kbd_variant_select, cfdata, 
"basic");
+
+            for (l = lp->kbd_variant, i = 1; l; l = l->next, i++)
               {
-                 char *variant = l->data;
-                 if (!strcmp(variant, "basic")) continue;
+                 char *var;
+
+                 var = l->data;
+
+                 if (!strcmp(var, "basic")) continue;
+
+                 if (lang->rdefs.variant && !strcmp(lang->rdefs.variant, var))
+                   kbdv_i = i;
 
-                 if (selected_lang->rdefs.variant &&
-                     !strcmp(selected_lang->rdefs.variant, variant))
-                   kbd_variant_indx = i;
-
-                 e_widget_ilist_append(cfdata->gui.kbd_layout_variant_ilist,
-                                       NULL, variant, NULL, NULL, NULL);
-                 i++;
+                 e_widget_ilist_append(cfdata->gui.o_kbd_variant, NULL, var,
+                                       _conf_cb_kbd_variant_select, cfdata, 
var);
               }
             break;
          }
      }
 
-   e_widget_ilist_go(cfdata->gui.kbd_layout_variant_ilist);
-   e_widget_ilist_selected_set(cfdata->gui.kbd_layout_variant_ilist, 
kbd_variant_indx);
+   e_widget_ilist_go(cfdata->gui.o_kbd_variant);
+   e_widget_ilist_selected_set(cfdata->gui.o_kbd_variant, kbdv_i);
 }
-
-/************* button callbacks ****************************/
+/***************** button state set functions ************************/
 static void
-_lang_select_language_cb(void *data, void *data2)
+_conf_add_button_availability_set(E_Config_Dialog_Data *cfdata)
 {
-   char                        buf[1024];
-   const char          *sel_label;
-   Evas_List           *l;
-   E_Config_Dialog_Data        *cfdata;
-   Language_Predef     *lp = NULL;
-   Language            *lang;
-
-   if (!(cfdata = data)) return;
+   if (!e_widget_ilist_selected_label_get(cfdata->gui.o_plang))
+     e_widget_disabled_set(cfdata->gui.o_add, 1);
+   else
+     e_widget_disabled_set(cfdata->gui.o_add, 0);
+}
+static void
+_conf_del_button_availability_set(E_Config_Dialog_Data *cfdata)
+{
+   if (!e_widget_ilist_selected_label_get(cfdata->gui.o_slang))
+     e_widget_disabled_set(cfdata->gui.o_del, 1);
+   else
+     e_widget_disabled_set(cfdata->gui.o_del, 0);
+}
+static void
+_conf_up_button_availability_set(E_Config_Dialog_Data *cfdata)
+{
+   if (!e_widget_ilist_selected_label_get(cfdata->gui.o_slang) ||
+       !e_widget_ilist_selected_get(cfdata->gui.o_slang) ||
+       evas_list_count(cfdata->s_langs) < 1)
+     e_widget_disabled_set(cfdata->gui.o_up, 1);
+   else
+     e_widget_disabled_set(cfdata->gui.o_up, 0);
+}
+static void
+_conf_down_button_availability_set(E_Config_Dialog_Data *cfdata)
+{
+   if (!e_widget_ilist_selected_label_get(cfdata->gui.o_slang) ||
+       (e_widget_ilist_selected_get(cfdata->gui.o_slang) ==
+          e_widget_ilist_count(cfdata->gui.o_slang) - 1) ||
+       evas_list_count(cfdata->s_langs) < 1)
+     e_widget_disabled_set(cfdata->gui.o_down, 1);
+   else
+     e_widget_disabled_set(cfdata->gui.o_down, 0);
+}
 
-   sel_label = e_widget_ilist_selected_label_get(cfdata->gui.lang_ilist);
-   if (!sel_label) return;
+/***************** ilist callbacks ***********************************/
+static void 
+_conf_cb_planguage_select(void *data)
+{
+   E_Config_Dialog_Data *cfdata;
+   
+   cfdata = data;
 
-   for (l = cfdata->conf->language_predef_list; l; l = l->next)
-     {
-       lp = l->data;
+   _conf_add_button_availability_set(data);
+}
+static void 
+_conf_cb_slanguage_select(void *data)
+{
+   E_Config_Dialog_Data *cfdata;
 
-       snprintf(buf, sizeof(buf), ILIST_LANGUAGE_LABEL_FORMAT, lp->lang_name, 
lp->lang_shortcut);
+   cfdata = data;
 
-       if (!strcmp(sel_label, buf))
-         break;
-       lp = NULL;
-     }
+   _conf_fill_kbd_model(cfdata);
+   _conf_fill_kbd_variant(cfdata);
 
-   if (!lp) return;
+   _conf_del_button_availability_set(cfdata);
+   _conf_up_button_availability_set(cfdata);
+   _conf_down_button_availability_set(cfdata);
+}
+static void
+_conf_cb_kbd_model_select(void *data)
+{
+   Language *l;
+   E_Config_Dialog_Data *cfdata;
 
-   lang = E_NEW(Language, 1);
-   if (!lang) return;
+   cfdata = data;
 
-   lang->id           = evas_list_count(cfdata->selected_languages);
-   lang->lang_name     = evas_stringshare_add(lp->lang_name);
-   lang->lang_shortcut = evas_stringshare_add(lp->lang_shortcut);
-   lang->lang_flag     = !(lp->lang_flag) ? NULL : 
evas_stringshare_add(lp->lang_flag);
-   lang->rdefs.model   = (char *) 
evas_stringshare_add(lang_language_current_kbd_model_get());
-   lang->rdefs.layout  = (char *) evas_stringshare_add(lp->kbd_layout);
-   lang->rdefs.variant = (char *) evas_stringshare_add("basic");
-   //lang_language_xorg_values_get(lang);
-
-   cfdata->selected_languages = evas_list_append(cfdata->selected_languages, 
lang);
-   //DO NOT sort selected_languages list. Here the sequence of the langs is 
essential!
-
-   _lang_update_lang_defined_list(cfdata);
-   _lang_update_selected_lang_list(cfdata);
-   e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist,
-                              evas_list_count(cfdata->selected_languages) - 1);
+   l = evas_list_nth(cfdata->s_langs, 
e_widget_ilist_selected_get(cfdata->gui.o_slang));
+   if (!l) return;
 
-   _lang_update_select_button(cfdata);
-   _lang_update_unselect_button(cfdata);
+   if (l->rdefs.model) evas_stringshare_del(l->rdefs.model);
+   l->rdefs.model = (char *)evas_stringshare_add(cfdata->kb_model);
 }
 static void
-_lang_unselect_language_cb(void *data, void *data2)
+_conf_cb_kbd_variant_select(void *data)
 {
-   char                        buf[1024];
-   const char          *sel_label;
-   Evas_List           *l;
-   Language            *lang;
-   E_Config_Dialog_Data        *cfdata;
+   Language *l;
+   E_Config_Dialog_Data *cfdata;
 
-   if (!(cfdata = data)) return;
+   cfdata = data;
 
-   sel_label = 
e_widget_ilist_selected_label_get(cfdata->gui.selected_lang_ilist);
-   if (!sel_label) return;
+   l = evas_list_nth(cfdata->s_langs, 
e_widget_ilist_selected_get(cfdata->gui.o_slang));
+   if (!l) return;
 
-   for (l = cfdata->selected_languages; l; l = l->next)
-     {
-       lang = l->data;
+   if (l->rdefs.variant) evas_stringshare_del(l->rdefs.variant);
+   l->rdefs.variant = (char *)evas_stringshare_add(cfdata->kb_variant);
+}
+/****************** button callbacks *********************************/
+static void 
+_conf_cb_language_add(void *data, void *data2)
+{
+   Language            *lang;
+   E_Config_Dialog_Data *cfdata;
+   Language_Predef     *lp = NULL;
+   Evas_List           *l;
 
-       snprintf(buf, sizeof(buf), ILIST_LANGUAGE_LABEL_FORMAT, lang->lang_name,
-                lang->lang_shortcut);
+   cfdata = data;
 
-       if (!strcmp(sel_label, buf))
-         {
-            cfdata->selected_languages = 
evas_list_remove_list(cfdata->selected_languages, l);
-            lang_language_free(lang);
-            break;
-         }
+   for (l = cfdata->conf->language_predef_list; l; l = l->next)
+     {
+       lp = l->data;
+       if (!strcmp(lp->lang_name, cfdata->plang))
+         break;
+       lp = NULL;
      }
 
-   _lang_update_lang_defined_list(cfdata);
-   _lang_update_selected_lang_list(cfdata);
-
-   _lang_update_select_button(cfdata);
-   _lang_update_unselect_button(cfdata);
-
-   if (!evas_list_count(cfdata->selected_languages))
-     { 
-       _lang_update_kbd_model_list(cfdata);
-       _lang_update_kbd_layout_variant_list(cfdata);
-     }
-}
-static void 
-_lang_move_language_order_up_cb(void *data, void *data2)
-{
-   E_Config_Dialog_Data        *cfdata;
-   Evas_List   *lang, *lang2;
-   void *tmp;
-   int indx;
+   if (!lp) return;
 
-   if (!(cfdata = data)) return;
+   lang = E_NEW(Language, 1);
+   if (!lang) return;
 
-   indx = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist);
+   lang->id            = evas_list_count(cfdata->s_langs);
+   lang->lang_name     = evas_stringshare_add(lp->lang_name);
+   lang->lang_shortcut = evas_stringshare_add(lp->lang_shortcut);
+   lang->lang_flag     = !(lp->lang_flag) ? NULL : 
evas_stringshare_add(lp->lang_flag);
+   lang->rdefs.model   = (char *) lang_language_current_kbd_model_get();
+   lang->rdefs.layout  = (char *) evas_stringshare_add(lp->kbd_layout);
+   lang->rdefs.variant = (char *) evas_stringshare_add("basic");
 
-   if (indx <= 0) return;
+   cfdata->s_langs = evas_list_append(cfdata->s_langs, lang);
 
-   lang = evas_list_nth_list(cfdata->selected_languages, indx);
-   lang2 = evas_list_nth_list(cfdata->selected_languages, indx - 1);
+   _conf_fill_planguages(cfdata);
+   _conf_fill_slanguages(cfdata);
 
-   ((Language *)(lang->data))->id --;
-   ((Language *)(lang2->data))->id ++;
-   tmp = lang->data;
-   lang->data = lang2->data;
-   lang2->data = tmp;
+   E_FREE(cfdata->plang);
 
-   _lang_update_selected_lang_list(cfdata);
-   e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx - 1);
+   e_widget_ilist_selected_set(cfdata->gui.o_slang, 
evas_list_count(cfdata->s_langs) - 1);
+   _conf_add_button_availability_set(cfdata);
 }
-static void 
-_lang_move_language_order_down_cb(void *data, void *data2)
+static void
+_conf_cb_language_del(void *data, void *data2)
 {
-   E_Config_Dialog_Data        *cfdata;
-   Evas_List *lang, *lang2;
-   int indx;
-   void *tmp;
+   E_Config_Dialog_Data *cfdata;
+   Language *l;
+   int n;
 
-   if (!(cfdata = data)) return;
+   cfdata = data;
 
-   indx = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist);
+   n = e_widget_ilist_selected_get(cfdata->gui.o_slang);
 
-   if ((indx < 0) || (indx >= evas_list_count(cfdata->selected_languages))) 
return;
+   l = evas_list_nth(cfdata->s_langs, n);
+   cfdata->s_langs = evas_list_remove(cfdata->s_langs, l);
 
-   lang = evas_list_nth_list(cfdata->selected_languages, indx);
-   lang2 = evas_list_nth_list(cfdata->selected_languages, indx + 1);
+   lang_language_free(l);
 
-   ((Language *)(lang->data))->id ++;
-   ((Language *)(lang->data))->id --;
-   tmp = lang->data;
-   lang->data = lang2->data;
-   lang2->data = tmp;
+   _conf_fill_planguages(cfdata);
+   _conf_fill_slanguages(cfdata);
 
-   _lang_update_selected_lang_list(cfdata);
-   e_widget_ilist_selected_set(cfdata->gui.selected_lang_ilist, indx + 1);
-}
+   E_FREE(cfdata->slang);
 
-/************ ilist callbacks *****************************/
-static void
-_lang_languages_ilist_cb_change(void *data, Evas_Object *obj)
-{
-   if (!data) return;
-   _lang_update_select_button(data);
-}
-static void
-_lang_selected_languages_ilist_cb_change(void *data, Evas_Object *obj)
-{
-   if (!data) return;
+   if (n >= evas_list_count(cfdata->s_langs)) 
+     n = evas_list_count(cfdata->s_langs) - 1;
+
+   if (n >= 0) 
+     e_widget_ilist_selected_set(cfdata->gui.o_slang, n);
+   else
+     {
+       E_FREE(cfdata->kb_model);
+       E_FREE(cfdata->kb_variant);
 
-   _lang_update_unselect_button(data);
-   _lang_update_language_moveup_button(data);
-   _lang_update_language_movedown_button(data);
+       _conf_fill_kbd_model(cfdata);
+       _conf_fill_kbd_variant(cfdata);
 
-   _lang_update_kbd_model_list(data); 
-   _lang_update_kbd_layout_variant_list(data);
+       _conf_del_button_availability_set(cfdata);
+     }
 }
-static void 
-_lang_kbd_model_ilist_cb_change(void *data, Evas_Object *obj)
+static void
+_conf_cb_language_up(void *data, void *data2)
 {
-   E_Config_Dialog_Data        *cfdata;
-   Language_Kbd_Model  *lkm;
-   Language            *lang;
-   int  indx_model;
-   int  indx_lang;
+   E_Config_Dialog_Data *cfdata;
+   Evas_List *l, *l2;
+   void *tmp;
+   int n;
 
-   if (!(cfdata = data)) return;
+   cfdata = data;
 
-   indx_lang = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist);
-   if (indx_lang < 0) return;
+   n = e_widget_ilist_selected_get(cfdata->gui.o_slang);
+   if (n <= 0) return;
 
-   indx_model = e_widget_ilist_selected_get(cfdata->gui.kbd_model_ilist);
-   if (indx_model < 0) return;
+   l  = evas_list_nth_list(cfdata->s_langs, n);
+   l2 = evas_list_nth_list(cfdata->s_langs, n - 1); 
 
-   lang         = evas_list_nth(cfdata->selected_languages, indx_lang);
-   lkm  = evas_list_nth(cfdata->conf->language_kbd_model_list, indx_model);
+   ((Language *)(l->data))->id --;
+   ((Language *)(l2->data))->id ++;
 
-   if (!lang || !lkm) return;
+   tmp = l->data;
+   l->data = l2->data;
+   l2->data = tmp;
 
-   if (lang->rdefs.model) evas_stringshare_del(lang->rdefs.model);
-   lang->rdefs.model = (char *) evas_stringshare_add(lkm->kbd_model);
-   //lang_language_xorg_values_get(lang);
+   _conf_fill_slanguages(cfdata);
+   e_widget_ilist_selected_set(cfdata->gui.o_slang, n - 1);
 }
 static void 
-_lang_kbd_layout_variant_ilist_cb_change(void *data, Evas_Object *obj)
+_conf_cb_language_down(void *data, void *data2)
 {
-   E_Config_Dialog_Data        *cfdata;
-   Language *lang;
-   int  indx_variant, indx_lang;
+   E_Config_Dialog_Data *cfdata;
+   Evas_List *l, *l2;
+   void *tmp;
+   int n;
 
-   if (!(cfdata = data)) return;
+   cfdata = data;
 
-   indx_lang = e_widget_ilist_selected_get(cfdata->gui.selected_lang_ilist);
-   if (indx_lang < 0) return;
+   n = e_widget_ilist_selected_get(cfdata->gui.o_slang);
+   if ((n < 0) || (n >= evas_list_count(cfdata->s_langs))) return;
 
-   indx_variant = 
e_widget_ilist_selected_get(cfdata->gui.kbd_layout_variant_ilist);
-   if (indx_variant < 0) return;
+   l  = evas_list_nth_list(cfdata->s_langs, n);
+   l2 = evas_list_nth_list(cfdata->s_langs, n + 1);
 
-   lang = evas_list_nth(cfdata->selected_languages, indx_lang);
-   if (indx_variant == 0)
-     {
-       if (lang->rdefs.variant) evas_stringshare_del(lang->rdefs.variant);
-       lang->rdefs.variant = (char *) evas_stringshare_add("basic");
-       //lang_language_xorg_values_get(lang);
-       return;
-     }
-   else
-     {
-       Evas_List    *l;
-       Language_Predef *lp;
-       char *variant;
+   ((Language *)(l->data))->id ++;
+   ((Language *)(l2->data))->id --;
 
-       for (l = cfdata->conf->language_predef_list; l; l = l->next)
-         {
-            lp = l->data;
-            if (!strcmp(lp->lang_name, lang->lang_name))
-              {
-                 variant = evas_list_nth(lp->kbd_variant, indx_variant - 1);
+   tmp = l->data;
+   l->data = l2->data;
+   l2->data = tmp;
 
-                 if (lang->rdefs.variant) 
evas_stringshare_del(lang->rdefs.variant);
-                 lang->rdefs.variant = (char *) evas_stringshare_add(variant);
-                 //lang_language_xorg_values_get(lang);
-                 break;
-              }
-         }
-     }
+   _conf_fill_slanguages(cfdata);
+   e_widget_ilist_selected_set(cfdata->gui.o_slang, n + 1);
 }
===================================================================
RCS file: /cvs/e/e_modules/language/src/module/e_mod_lang.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -3 -r1.24 -r1.25
--- e_mod_lang.c        30 May 2006 10:51:26 -0000      1.24
+++ e_mod_lang.c        1 Jun 2006 19:23:42 -0000       1.25
@@ -179,8 +179,7 @@
             lang->lang_shortcut = evas_stringshare_add(lp->lang_shortcut); 
             lang->lang_flag     = evas_stringshare_add(lp->lang_flag); 
 
-            lang->rdefs.model   = (char *)evas_stringshare_add
-                                                  
(lang_language_current_kbd_model_get());
+            lang->rdefs.model   = (char *) 
lang_language_current_kbd_model_get();
             lang->rdefs.layout  = (char *) 
evas_stringshare_add(lp->kbd_layout); 
             lang->rdefs.variant = (char *) evas_stringshare_add("basic"); 
             lang_language_xorg_values_get(lang);
@@ -195,6 +194,7 @@
 {
    EXML         *exml;
    int  found;
+   int  result;
 
    if (!cfg) return;
 
@@ -203,7 +203,8 @@
    if (!exml) return;
    if (!exml_init(exml)) EXML_RETURN_ON_ERROR(exml);
 
-   if (!exml_file_read(exml, "/usr/lib/X11/xkb/rules/xfree86.xml"))
+   result = exml_file_read(exml, "/usr/lib/X11/xkb/rules/xfree86.xml");
+   if (!result || result == -1)
      EXML_RETURN_ON_ERROR(exml);
 
    exml_down(exml);
@@ -278,6 +279,7 @@
 {
    EXML         *exml;
    int  found;
+   int  result;
 
    exml = exml_new();
 
@@ -285,7 +287,8 @@
    if (!exml_init(exml))
      EXML_RETURN_ON_ERROR(exml);
 
-   if (!exml_file_read(exml, "/usr/lib/X11/xkb/rules/xfree86.xml"))
+   result = exml_file_read(exml, "/usr/lib/X11/xkb/rules/xfree86.xml");
+   if (!result || result == -1)
      EXML_RETURN_ON_ERROR(exml);
 
    if (strcasecmp(exml_tag_get(exml), "xkbConfigRegistry"))
@@ -337,25 +340,25 @@
                         { 
                            char *attr = exml_attribute_get(exml, "xml:lang"); 
                            if (!attr) 
-                             lkm->kbd_model_desctiption = 
+                             lkm->kbd_model_description = 
                                                      
evas_stringshare_add(exml_value_get(exml)); 
                         } 
                       
-                      if (lkm->kbd_model && lkm->kbd_model_desctiption) 
+                      if (lkm->kbd_model && lkm->kbd_model_description) 
                         break; 
                       
                       if (!exml_next_nomove(exml)) 
                         break; 
                    } 
                  
-                 if (lkm->kbd_model && lkm->kbd_model_desctiption) 
+                 if (lkm->kbd_model && lkm->kbd_model_description) 
                    cfg->language_kbd_model_list = 
evas_list_append(cfg->language_kbd_model_list,
                                                                    lkm); 
                  else 
                    { 
                       if (lkm->kbd_model) 
evas_stringshare_del(lkm->kbd_model); 
-                      if (lkm->kbd_model_desctiption) 
-                        evas_stringshare_del(lkm->kbd_model_desctiption); 
+                      if (lkm->kbd_model_description) 
+                        evas_stringshare_del(lkm->kbd_model_description); 
                       E_FREE(lkm); 
                    } 
               }
@@ -378,7 +381,7 @@
        lkm = cfg->language_kbd_model_list->data;
 
        if (lkm->kbd_model) evas_stringshare_del(lkm->kbd_model);
-       if (lkm->kbd_model_desctiption) 
evas_stringshare_del(lkm->kbd_model_desctiption);
+       if (lkm->kbd_model_description) 
evas_stringshare_del(lkm->kbd_model_description);
        E_FREE(lkm);
        cfg->language_kbd_model_list = 
evas_list_remove_list(cfg->language_kbd_model_list,
                                                             
cfg->language_kbd_model_list);
@@ -450,8 +453,8 @@
    char *tmp;
 
    if (!XkbRF_GetNamesProp((Display *)ecore_x_display_get(), &tmp, &vd))
-     return "pc101";
-   return vd.model;
+     return evas_stringshare_add("pc101");
+   return evas_stringshare_add(vd.model);
 } 
 
 /************** private ******************/
===================================================================
RCS file: /cvs/e/e_modules/language/src/module/e_mod_lang.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_mod_lang.h        27 May 2006 22:05:08 -0000      1.13
+++ e_mod_lang.h        1 Jun 2006 19:23:42 -0000       1.14
@@ -16,7 +16,7 @@
 struct _Language_Kbd_Model
 {
    const char *kbd_model;
-   const char *kbd_model_desctiption;
+   const char *kbd_model_description;
 };
 
 struct _Border_Language_Settings
===================================================================
RCS file: /cvs/e/e_modules/language/src/module/e_mod_main.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- e_mod_main.c        30 May 2006 10:51:26 -0000      1.17
+++ e_mod_main.c        1 Jun 2006 19:23:42 -0000       1.18
@@ -281,16 +281,6 @@
 }
 
 EAPI int
-e_modapi_info(E_Module *m)
-{
-   char buf[4096];
-
-   snprintf(buf, sizeof(buf), "%s/module_icon.png", e_module_dir_get(m));
-   m->icon_file = strdup(buf);
-   return 1;
-}
-
-EAPI int
 e_modapi_about(E_Module *m)
 {
    e_module_dialog_show( _("Enlightenment Language Enhancment Module"),
===================================================================
RCS file: /cvs/e/e_modules/language/src/module/e_mod_main.h,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- e_mod_main.h        27 May 2006 22:05:08 -0000      1.13
+++ e_mod_main.h        1 Jun 2006 19:23:42 -0000       1.14
@@ -49,7 +49,6 @@
 EAPI void   *e_modapi_init     (E_Module *m);
 EAPI int     e_modapi_shutdown (E_Module *m);
 EAPI int     e_modapi_save     (E_Module *m);
-EAPI int     e_modapi_info     (E_Module *m);
 EAPI int     e_modapi_about    (E_Module *m);
 EAPI int     e_modapi_config   (E_Module *m);
 




_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to