forked from enlightenment/enlightenment
xkbswitch: rewrite the config panel to improve the gui design
This commit is contained in:
parent
b4f3a8da0a
commit
15c0d46050
File diff suppressed because it is too large
Load Diff
|
@ -279,21 +279,6 @@ _xkb_changed_state(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EIN
|
|||
return ECORE_CALLBACK_PASS_ON;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int
|
||||
_xkb_menu_items_sort(const void *data1, const void *data2)
|
||||
{
|
||||
const E_Config_XKB_Layout *cl1 = data1;
|
||||
const E_Config_XKB_Layout *cl2 = data2;
|
||||
int v;
|
||||
|
||||
v = strcmp(cl1->name, cl2->name);
|
||||
if (!v) v = strcmp(cl1->model, cl2->model);
|
||||
if (!v) v = strcmp(cl1->variant, cl2->variant);
|
||||
return v;
|
||||
}
|
||||
|
||||
#endif
|
||||
static void
|
||||
_e_xkb_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
|
||||
{
|
||||
|
|
|
@ -1,10 +1,57 @@
|
|||
#include "e.h"
|
||||
#include "e_mod_parse.h"
|
||||
|
||||
typedef struct Config_Parse_Label_ {
|
||||
const char *name;
|
||||
Eina_List **list;
|
||||
} Config_Parse_Label;
|
||||
|
||||
Eina_List *layouts = NULL;
|
||||
Eina_List *models = NULL;
|
||||
|
||||
Eina_List *optgroups = NULL;
|
||||
|
||||
Eina_List *optled = NULL;
|
||||
Eina_List *optswitch = NULL;
|
||||
Eina_List *optlv3 = NULL;
|
||||
Eina_List *optctrl = NULL;
|
||||
Eina_List *optkeypad = NULL;
|
||||
Eina_List *optdelkeypad = NULL;
|
||||
Eina_List *optcapslock = NULL;
|
||||
Eina_List *optaltwin = NULL;
|
||||
Eina_List *optcompose = NULL;
|
||||
Eina_List *optcurrency = NULL;
|
||||
Eina_List *optlv5 = NULL;
|
||||
Eina_List *optspacebar = NULL;
|
||||
Eina_List *optjapan = NULL;
|
||||
Eina_List *optkorean = NULL;
|
||||
Eina_List *optesperanto = NULL;
|
||||
Eina_List *optsolaris = NULL;
|
||||
Eina_List *optterminate = NULL;
|
||||
Eina_List *optmisc = NULL;
|
||||
|
||||
static Config_Parse_Label grplabels[] = {
|
||||
{ "grp_led", &optled },
|
||||
{ "grp", &optswitch },
|
||||
{ "lv3", &optlv3 },
|
||||
{ "ctrl", &optctrl },
|
||||
{ "keypad", &optkeypad },
|
||||
{ "kpdl", &optdelkeypad },
|
||||
{ "caps", &optcapslock },
|
||||
{ "altwin", &optaltwin },
|
||||
{ "compose", &optcompose },
|
||||
{ "currencysign", &optcurrency },
|
||||
{ "eurosign", &optcurrency },
|
||||
{ "rupeesign", &optcurrency },
|
||||
{ "lv5", &optlv5 },
|
||||
{ "nbsp", &optspacebar },
|
||||
{ "jap", &optjapan },
|
||||
{ "korean", &optkorean },
|
||||
{ "esperanto", &optesperanto },
|
||||
{ "solaris", &optsolaris },
|
||||
{ "terminate", &optterminate }
|
||||
};
|
||||
|
||||
static const char *rules_file = NULL;
|
||||
|
||||
static int layout_sort_cb(const void *data1, const void *data2);
|
||||
|
@ -54,8 +101,8 @@ parse_rules(void)
|
|||
E_XKB_Layout *layout = NULL;
|
||||
E_XKB_Option *option = NULL;
|
||||
E_XKB_Variant *variant = NULL;
|
||||
E_XKB_Option_Group *group = NULL;
|
||||
FILE *f;
|
||||
int i;
|
||||
|
||||
if (!rules_file) return 0;
|
||||
|
||||
|
@ -211,7 +258,7 @@ parse_rules(void)
|
|||
{
|
||||
if (fgets(buf, sizeof(buf), f))
|
||||
{
|
||||
char *n, *p, *t, *tmp, *name, *txt;
|
||||
char *n, *p, *tmp, *name, *txt;
|
||||
|
||||
n = strchr(buf, '\n');
|
||||
if (n) *n = '\0';
|
||||
|
@ -226,41 +273,25 @@ parse_rules(void)
|
|||
while (p[0] == ' ')
|
||||
++p;
|
||||
|
||||
/* skip "grp" options for switching kbd layouts */
|
||||
//if (strncmp(name, "grp", 3))
|
||||
{
|
||||
if (!strchr(name, ':'))
|
||||
{
|
||||
group = E_NEW(E_XKB_Option_Group, 1);
|
||||
|
||||
/* A hack to get it to parse right if
|
||||
* the group name contains a space
|
||||
*/
|
||||
t = strstr(p, " ");
|
||||
if (t)
|
||||
{
|
||||
while (t[0] == ' ')
|
||||
++t;
|
||||
p = t;
|
||||
}
|
||||
|
||||
txt = evas_textblock_text_markup_to_utf8(NULL, p);
|
||||
group->description = eina_stringshare_add(txt);
|
||||
E_FREE(txt);
|
||||
|
||||
optgroups = eina_list_append(optgroups, group);
|
||||
}
|
||||
else if (group)
|
||||
{
|
||||
option = E_NEW(E_XKB_Option, 1);
|
||||
option->name = eina_stringshare_add(name);
|
||||
txt = evas_textblock_text_markup_to_utf8(NULL, p);
|
||||
option->description = eina_stringshare_add(txt);
|
||||
E_FREE(txt);
|
||||
group->options = eina_list_append(group->options,
|
||||
option);
|
||||
}
|
||||
}
|
||||
if (strchr(name, ':'))
|
||||
{
|
||||
option = E_NEW(E_XKB_Option, 1);
|
||||
option->name = eina_stringshare_add(name);
|
||||
txt = evas_textblock_text_markup_to_utf8(NULL, p);
|
||||
option->description = eina_stringshare_add(txt);
|
||||
E_FREE(txt);
|
||||
for (i = 0; i < (sizeof(grplabels) / sizeof(grplabels[0])); ++i)
|
||||
{
|
||||
if (!strncasecmp(name, grplabels[i].name, (strlen(grplabels[i].name))))
|
||||
{
|
||||
*(grplabels[i].list) = eina_list_append(*(grplabels[i].list), option);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i < (sizeof(grplabels) / sizeof(grplabels[0]))) continue;
|
||||
optmisc = eina_list_append(optmisc, option);
|
||||
}
|
||||
else continue;
|
||||
|
||||
free(tmp);
|
||||
}
|
||||
|
@ -277,10 +308,20 @@ err:
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
_free_option(E_XKB_Option *o)
|
||||
{
|
||||
eina_stringshare_del(o->name);
|
||||
eina_stringshare_del(o->description);
|
||||
|
||||
E_FREE(o);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
clear_rules(void)
|
||||
{
|
||||
E_XKB_Option_Group *og;
|
||||
E_XKB_Variant *v;
|
||||
E_XKB_Option *o;
|
||||
E_XKB_Layout *la;
|
||||
|
@ -310,20 +351,23 @@ clear_rules(void)
|
|||
E_FREE(m);
|
||||
}
|
||||
|
||||
EINA_LIST_FREE(optgroups, og)
|
||||
{
|
||||
eina_stringshare_del(og->description);
|
||||
|
||||
EINA_LIST_FREE(og->options, o)
|
||||
{
|
||||
eina_stringshare_del(o->name);
|
||||
eina_stringshare_del(o->description);
|
||||
|
||||
E_FREE(o);
|
||||
}
|
||||
|
||||
E_FREE(og);
|
||||
}
|
||||
EINA_LIST_FREE(optled, o) _free_option(o);
|
||||
EINA_LIST_FREE(optswitch, o) _free_option(o);
|
||||
EINA_LIST_FREE(optlv3, o) _free_option(o);
|
||||
EINA_LIST_FREE(optctrl, o) _free_option(o);
|
||||
EINA_LIST_FREE(optkeypad, o) _free_option(o);
|
||||
EINA_LIST_FREE(optdelkeypad, o) _free_option(o);
|
||||
EINA_LIST_FREE(optcapslock, o) _free_option(o);
|
||||
EINA_LIST_FREE(optaltwin, o) _free_option(o);
|
||||
EINA_LIST_FREE(optcompose, o) _free_option(o);
|
||||
EINA_LIST_FREE(optcurrency, o) _free_option(o);
|
||||
EINA_LIST_FREE(optlv5, o) _free_option(o);
|
||||
EINA_LIST_FREE(optspacebar, o) _free_option(o);
|
||||
EINA_LIST_FREE(optjapan, o) _free_option(o);
|
||||
EINA_LIST_FREE(optkorean, o) _free_option(o);
|
||||
EINA_LIST_FREE(optesperanto, o) _free_option(o);
|
||||
EINA_LIST_FREE(optsolaris, o) _free_option(o);
|
||||
EINA_LIST_FREE(optterminate, o) _free_option(o);
|
||||
|
||||
optgroups = NULL;
|
||||
layouts = NULL;
|
||||
|
|
|
@ -26,12 +26,6 @@ typedef struct _E_XKB_Layout
|
|||
Eina_List *variants;
|
||||
} E_XKB_Layout;
|
||||
|
||||
typedef struct _E_XKB_Option_Group
|
||||
{
|
||||
const char *description;
|
||||
Eina_List *options;
|
||||
} E_XKB_Option_Group;
|
||||
|
||||
typedef struct _E_XKB_Option
|
||||
{
|
||||
const char *name;
|
||||
|
@ -46,6 +40,25 @@ int layout_sort_by_name_cb(const void *data1, const void *data2);
|
|||
|
||||
extern Eina_List *models;
|
||||
extern Eina_List *layouts;
|
||||
extern Eina_List *optgroups;
|
||||
|
||||
extern Eina_List *optled;
|
||||
extern Eina_List *optswitch;
|
||||
extern Eina_List *optlv3;
|
||||
extern Eina_List *optctrl;
|
||||
extern Eina_List *optkeypad;
|
||||
extern Eina_List *optdelkeypad;
|
||||
extern Eina_List *optcapslock;
|
||||
extern Eina_List *optaltwin;
|
||||
extern Eina_List *optcompose;
|
||||
extern Eina_List *optcurrency;
|
||||
extern Eina_List *optlv5;
|
||||
extern Eina_List *optspacebar;
|
||||
extern Eina_List *optjapan;
|
||||
extern Eina_List *optkorean;
|
||||
extern Eina_List *optesperanto;
|
||||
extern Eina_List *optsolaris;
|
||||
extern Eina_List *optterminate;
|
||||
extern Eina_List *optmisc;
|
||||
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue