switch (ksym) {
case XK_Home:
item = itemcycle(currmenu, ITEMFIRST);
- action = ACTION_CLEAR;
+ action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW;
break;
case XK_End:
item = itemcycle(currmenu, ITEMLAST);
- action = ACTION_CLEAR;
+ action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW;
break;
case XK_ISO_Left_Tab:
if (*text) {
/* FALLTHROUGH */
case XK_Up:
item = itemcycle(currmenu, ITEMPREV);
- action = ACTION_CLEAR;
+ action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW;
break;
case XK_Tab:
if (*text) {
/* FALLTHROUGH */
case XK_Down:
item = itemcycle(currmenu, ITEMNEXT);
- action = ACTION_CLEAR;
+ 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);
currmenu->selected = item;
item = itemcycle(currmenu, ITEMNEXT);
}
- action = ACTION_CLEAR;
+ action = ACTION_CLEAR | ACTION_SELECT | ACTION_DRAW;
break;
case XK_Return: case XK_Right:
if (currmenu->selected) {
item = currmenu->selected;
goto enteritem;
}
+ action = ACTION_SELECT | ACTION_DRAW;
break;
case XK_Escape: case XK_Left:
if (currmenu->parent) {
currmenu = currmenu->parent;
action = ACTION_CLEAR | ACTION_MAP;
}
+ action = 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)))
break;
}
select = item;
- action |= ACTION_SELECT | ACTION_DRAW;
break;
case LeaveNotify:
previtem = NULL;