+ case ButtonPress:
+ getmenuitem(ev.xbutton.window, ev.xbutton.y, &menu, &item);
+ if (menu == NULL || item == NULL)
+ return;
+ break;
+ case KeyPress:
+ ksym = XkbKeycodeToKeysym(dpy, ev.xkey.keycode, 0, 0);
+
+ if (ksym == XK_Escape && currmenu == rootmenu)
+ return;
+
+ /* Shift-Tab = ISO_Left_Tab */
+ if (ksym == XK_Tab && (ev.xkey.state & ShiftMask))
+ ksym = XK_ISO_Left_Tab;
+
+ /* cycle through menu */
+ item = NULL;
+ if (ksym == XK_ISO_Left_Tab || ksym == XK_Up) {
+ item = itemcycle(ITEMPREV);
+ } else if (ksym == XK_Tab || ksym == XK_Down) {
+ item = itemcycle(ITEMNEXT);
+ } else if ((ksym == XK_Return || ksym == XK_Right) &&
+ currmenu->selected != NULL) {
+ item = currmenu->selected;
+ goto selectitem;
+ } else if ((ksym == XK_Escape || ksym == XK_Left) &&
+ currmenu->parent != NULL) {
+ item = currmenu->parent->selected;
+ setcurrmenu(currmenu->parent);
+ } else
+ break;
+ currmenu->selected = item;
+ drawmenu();