forked from enlightenment/enlightenment
sort menu in xkbswitch by names of kbds/models etc.
SVN revision: 70582
This commit is contained in:
parent
1875206fdc
commit
50c68a2e5b
|
@ -43,7 +43,7 @@ static Eina_List *instances = NULL;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* CONFIG STRUCTURE */
|
/* CONFIG STRUCTURE */
|
||||||
Xkb _xkb = { NULL, NULL };
|
Xkb _xkb = { NULL, NULL, NULL };
|
||||||
|
|
||||||
static const E_Gadcon_Client_Class _gc_class =
|
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
|
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();
|
_xkb_update_icon();
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
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
|
static void
|
||||||
_e_xkb_cb_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event)
|
_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;
|
Eina_List *l;
|
||||||
int dir;
|
int dir;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
|
Eina_List *tlist = NULL;
|
||||||
|
|
||||||
mi = e_menu_item_new(inst->lmenu);
|
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);
|
mi = e_menu_item_new(inst->lmenu);
|
||||||
e_menu_item_separator_set(mi, 1);
|
e_menu_item_separator_set(mi, 1);
|
||||||
|
|
||||||
/* Append all the layouts */
|
|
||||||
EINA_LIST_FOREACH(e_config->xkb.used_layouts, l, cl)
|
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;
|
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_set(mi, 1);
|
||||||
e_menu_item_radio_group_set(mi, 1);
|
e_menu_item_radio_group_set(mi, 1);
|
||||||
e_menu_item_toggle_set(mi,
|
e_menu_item_toggle_set
|
||||||
(l == e_config->xkb.used_layouts) ? 1 : 0);
|
(mi, (cl == e_config->xkb.used_layouts->data) ? 1 : 0);
|
||||||
e_xkb_flag_file_get(buf, sizeof(buf), name);
|
e_xkb_flag_file_get(buf, sizeof(buf), name);
|
||||||
e_menu_item_icon_file_set(mi, buf);
|
e_menu_item_icon_file_set(mi, buf);
|
||||||
snprintf(buf, sizeof(buf), "%s (%s, %s)", cl->name,
|
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);
|
e_menu_item_callback_set(mi, _e_xkb_cb_lmenu_set, cl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tlist) eina_list_free(tlist);
|
||||||
|
|
||||||
/* Deactivate callback */
|
/* Deactivate callback */
|
||||||
e_menu_post_deactivate_callback_set(inst->lmenu,
|
e_menu_post_deactivate_callback_set(inst->lmenu,
|
||||||
_e_xkb_cb_lmenu_post, inst);
|
_e_xkb_cb_lmenu_post, inst);
|
||||||
|
|
Loading…
Reference in New Issue