X-Git-Url: https://git.subgeniuskitty.com/xmenu/.git/blobdiff_plain/78fb523f9ff58b3eb22b4e784400f53c36d45366..88341d204bd1ad3f95943190a6eea22cb4bf07da:/xmenu.c diff --git a/xmenu.c b/xmenu.c index f2eaab4..8658a9d 100644 --- a/xmenu.c +++ b/xmenu.c @@ -1315,36 +1315,38 @@ enteritem: ksym = XK_ISO_Left_Tab; /* cycle through menu */ - item = NULL; + select = NULL; ksym = normalizeksym(ksym); switch (ksym) { case XK_Home: - item = itemcycle(currmenu, ITEMFIRST); - action = ACTION_CLEAR; + select = itemcycle(currmenu, ITEMFIRST); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; case XK_End: - item = itemcycle(currmenu, ITEMLAST); - action = ACTION_CLEAR; + select = itemcycle(currmenu, ITEMLAST); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; case XK_ISO_Left_Tab: if (*text) { - item = matchitem(currmenu, text, -1); + select = matchitem(currmenu, text, -1); + action = ACTION_SELECT | ACTION_DRAW; break; } /* FALLTHROUGH */ case XK_Up: - item = itemcycle(currmenu, ITEMPREV); - action = ACTION_CLEAR; + select = itemcycle(currmenu, ITEMPREV); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; case XK_Tab: if (*text) { - item = matchitem(currmenu, text, 1); + select = matchitem(currmenu, text, 1); + action = ACTION_SELECT | ACTION_DRAW; break; } /* FALLTHROUGH */ case XK_Down: - item = itemcycle(currmenu, ITEMNEXT); - action = ACTION_CLEAR; + select = itemcycle(currmenu, ITEMNEXT); + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; case XK_1: case XK_2: case XK_3: case XK_4: case XK_5: case XK_6: case XK_7: case XK_8: case XK_9: item = itemcycle(currmenu, ITEMFIRST); @@ -1353,7 +1355,8 @@ enteritem: currmenu->selected = item; item = itemcycle(currmenu, ITEMNEXT); } - action = ACTION_CLEAR; + select = item; + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; case XK_Return: case XK_Right: if (currmenu->selected) { @@ -1363,26 +1366,27 @@ enteritem: break; case XK_Escape: case XK_Left: if (currmenu->parent) { - item = currmenu->parent->selected; + select = currmenu->parent->selected; currmenu = currmenu->parent; - action = ACTION_CLEAR | ACTION_MAP; + action = ACTION_CLEAR | ACTION_MAP | ACTION_SELECT | ACTION_DRAW; } break; case XK_BackSpace: case XK_Clear: case XK_Delete: - action = ACTION_CLEAR; + action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW; break; default: append: + if (*buf == '\0' || iscntrl(*buf)) + break; for (i = 0; i < 2; i++) { append(text, buf, sizeof text, len); - if ((item = matchitem(currmenu, text, 0))) + if ((select = matchitem(currmenu, text, 0))) break; text[0] = '\0'; } + action = ACTION_SELECT | ACTION_DRAW; break; } - select = item; - action |= ACTION_SELECT | ACTION_DRAW; break; case LeaveNotify: previtem = NULL;