Menuitem option 'submenu'. Draw bullet '>' on the right.
This commit is contained in:
parent
8a45d219bd
commit
4138894db1
@ -564,6 +564,7 @@ conf_menu_section(char *src)
|
||||
conf.menu[i].item[j].func = name_to_func(get_opt(tmp2, "", "func").str, func_list);
|
||||
conf.menu[i].item[j].cmd = (!get_opt(tmp2, "", "cmd").str) ? NULL : get_opt(tmp2, "", "cmd").str;
|
||||
conf.menu[i].item[j].check = name_to_func(get_opt(tmp2, "", "check").str, func_list);
|
||||
conf.menu[i].item[j].submenu = get_opt(tmp2, "", "submenu").str;
|
||||
|
||||
cfg_set_sauv(tmp);
|
||||
}
|
||||
|
||||
47
src/menu.c
47
src/menu.c
@ -135,12 +135,7 @@ menu_manage_event(XEvent *ev, Menu *menu, BarWindow *winitem[])
|
||||
{
|
||||
if(ev->xbutton.window == winitem[i]->win
|
||||
&& (ev->xbutton.button == Button1 || ev->xbutton.button == Button2))
|
||||
{
|
||||
if(menu->item[i].func)
|
||||
menu->item[i].func(menu->item[i].cmd);
|
||||
|
||||
quit = True;
|
||||
}
|
||||
quit = menu_activate_item(menu, i);
|
||||
else if(ev->xbutton.window != winitem[i]->win)
|
||||
++c;
|
||||
else if(ev->xbutton.button == Button4)
|
||||
@ -169,9 +164,7 @@ menu_manage_event(XEvent *ev, Menu *menu, BarWindow *winitem[])
|
||||
break;
|
||||
|
||||
case XK_Return:
|
||||
if(menu->item[menu->focus_item].func)
|
||||
menu->item[menu->focus_item].func(menu->item[menu->focus_item].cmd);
|
||||
quit = True;
|
||||
quit = menu_activate_item(menu, menu->focus_item);
|
||||
break;
|
||||
|
||||
case XK_Escape:
|
||||
@ -198,6 +191,33 @@ menu_manage_event(XEvent *ev, Menu *menu, BarWindow *winitem[])
|
||||
return quit;
|
||||
}
|
||||
|
||||
Bool
|
||||
menu_activate_item(Menu *menu, int i)
|
||||
{
|
||||
int j, d, u, x, y;
|
||||
Window w;
|
||||
|
||||
if(menu->item[i].submenu)
|
||||
{
|
||||
for(j = 0; j < conf.nmenu; ++j)
|
||||
if(!strcmp(menu->item[i].submenu, conf.menu[j].name))
|
||||
{
|
||||
XQueryPointer(dpy, ROOT, &w, &w, &x, &y, &d, &d, (uint *)&u);
|
||||
|
||||
x = menu->x;
|
||||
x += menu_get_longer_string(menu->item, menu->nitem) + PAD * 3;
|
||||
|
||||
menu_draw(conf.menu[i], x, y);
|
||||
return True;
|
||||
}
|
||||
}
|
||||
else if(menu->item[i].func)
|
||||
{
|
||||
menu->item[i].func(menu->item[i].cmd);
|
||||
return True;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
void
|
||||
menu_focus_item(Menu *menu, int item, BarWindow *winitem[])
|
||||
@ -228,7 +248,7 @@ void
|
||||
menu_draw_item_name(Menu *menu, int item, BarWindow *winitem[])
|
||||
{
|
||||
int x;
|
||||
int width = menu_get_longer_string(menu->item, menu->nitem) + PAD;
|
||||
int width = menu_get_longer_string(menu->item, menu->nitem);
|
||||
|
||||
switch(menu->align)
|
||||
{
|
||||
@ -249,6 +269,9 @@ menu_draw_item_name(Menu *menu, int item, BarWindow *winitem[])
|
||||
if(menu->item[item].check(menu->item[item].cmd))
|
||||
barwin_draw_text(winitem[item], PAD / 3, FHINFOBAR, "*");
|
||||
|
||||
if(menu->item[item].submenu)
|
||||
barwin_draw_text(winitem[item], width + PAD * 2, FHINFOBAR, ">");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -277,7 +300,11 @@ uicb_menu(uicb_t cmd)
|
||||
if(!strcmp(cmd, conf.menu[i].name))
|
||||
{
|
||||
if(conf.menu[i].place_at_mouse)
|
||||
{
|
||||
XQueryPointer(dpy, ROOT, &w, &w, &x, &y, &d, &d, (uint *)&u);
|
||||
conf.menu[i].x = x;
|
||||
conf.menu[i].y = y;
|
||||
}
|
||||
else
|
||||
{
|
||||
screen_get_sel();
|
||||
|
||||
@ -276,6 +276,7 @@ typedef struct
|
||||
void (*func)(uicb_t);
|
||||
uicb_t cmd;
|
||||
Bool (*check)(uicb_t);
|
||||
char *submenu;
|
||||
} MenuItem;
|
||||
|
||||
/* Menu Struct */
|
||||
|
||||
@ -235,6 +235,7 @@ void menu_init(Menu *menu, char *name, int nitem, uint bg_f, char *fg_f, uint bg
|
||||
void menu_new_item(MenuItem *mi, char *name, void *func, char *cmd);
|
||||
void menu_draw(Menu menu, int x, int y);
|
||||
Bool menu_manage_event(XEvent *ev, Menu *menu, BarWindow *winitem[]);
|
||||
Bool menu_activate_item(Menu *menu, int i);
|
||||
void menu_focus_item(Menu *menu, int item, BarWindow *winitem[]);
|
||||
void menu_draw_item_name(Menu *menu, int item, BarWindow *winitem[]);
|
||||
int menu_get_longer_string(MenuItem *mi, int nitem);
|
||||
|
||||
12
wmfsrc.in
12
wmfsrc.in
@ -149,6 +149,7 @@
|
||||
fg_normal = "#9F9AB3" bg_normal = "#191919"
|
||||
|
||||
[item] name = "Terminal" func = "spawn" cmd = "@WMFS_TERM@" [/item]
|
||||
[item] name = "Applications" submenu = "appmenu" [/item]
|
||||
[item] name = "Next tag" func = "tag_next" [/item]
|
||||
[item] name = "Previous tag" func = "tag_prev" [/item]
|
||||
[item] name = "Next layout" func = "layout_next" [/item]
|
||||
@ -157,6 +158,17 @@
|
||||
[item] name = "Quit WMFS" func = "quit" [/item]
|
||||
[/set_menu]
|
||||
|
||||
[set_menu]
|
||||
name = "appmenu"
|
||||
align = "left"
|
||||
|
||||
fg_focus = "#191919" bg_focus = "#7E89A2"
|
||||
fg_normal = "#9F9AB3" bg_normal = "#191919"
|
||||
|
||||
[item] name = "Browser" func = "spawn" cmd = "firefox" [/item]
|
||||
[item] name = "Calculator" func = "spawn" cmd = "xcalc" [/item]
|
||||
[/set_menu]
|
||||
|
||||
[set_menu]
|
||||
name = "clientmenu"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user