sort menu in xkbswitch by names of kbds/models etc.

SVN revision: 70582
This commit is contained in:
Carsten Haitzler 2012-05-01 13:29:46 +00:00
parent 1875206fdc
commit 50c68a2e5b
1 changed files with 28 additions and 5 deletions

View File

@ -43,7 +43,7 @@ static Eina_List *instances = NULL;
*/
/* CONFIG STRUCTURE */
Xkb _xkb = { NULL, NULL };
Xkb _xkb = { NULL, NULL, NULL };
static const E_Gadcon_Client_Class _gc_class =
{
@ -265,12 +265,25 @@ _gc_icon(E_Gadcon_Client_Class *client_class __UNUSED__, Evas *evas)
}
static Eina_Bool
_xkb_changed(void *data, int type, void *event_info)
_xkb_changed(void *data __UNUSED__, int type __UNUSED__, void *event_info __UNUSED__)
{
_xkb_update_icon();
return ECORE_CALLBACK_PASS_ON;
}
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;
}
static void
_e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
{
@ -330,6 +343,7 @@ _e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSE
Eina_List *l;
int dir;
char buf[PATH_MAX];
Eina_List *tlist = NULL;
mi = e_menu_item_new(inst->lmenu);
@ -340,8 +354,15 @@ _e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSE
mi = e_menu_item_new(inst->lmenu);
e_menu_item_separator_set(mi, 1);
/* Append all the layouts */
EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl)
{
tlist = eina_list_append(tlist, cl);
}
tlist = eina_list_sort(tlist, eina_list_count(tlist),
_xkb_menu_items_sort);
/* Append all the layouts */
EINA_LIST_FOREACH(tlist, l, cl)
{
const char *name = cl->name;
@ -349,8 +370,8 @@ _e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSE
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
e_menu_item_toggle_set(mi,
(l == e_config->xkb.used_layouts) ? 1 : 0);
e_menu_item_toggle_set
(mi, (cl == e_config->xkb.used_layouts->data) ? 1 : 0);
e_xkb_flag_file_get(buf, sizeof(buf), name);
e_menu_item_icon_file_set(mi, buf);
snprintf(buf, sizeof(buf), "%s (%s, %s)", cl->name,
@ -359,6 +380,8 @@ _e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSE
e_menu_item_callback_set(mi, _e_xkb_cb_lmenu_set, cl);
}
if (tlist) eina_list_free(tlist);
/* Deactivate callback */
e_menu_post_deactivate_callback_set(inst->lmenu,
_e_xkb_cb_lmenu_post, inst);