summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-04-12 23:09:35 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-04-12 23:09:35 +0300
commit994d6074bc390492764adb51dc2235d245145afa (patch)
tree5e0b2e09b8007548a4fd912c4234552e1bc69c35
parent3f0f507e4f3bea6c5936be62aeff507ed6c4ae25 (diff)
downloadbemenu-994d6074bc390492764adb51dc2235d245145afa.tar.gz
bemenu-994d6074bc390492764adb51dc2235d245145afa.tar.bz2
bemenu-994d6074bc390492764adb51dc2235d245145afa.zip
Stop assuming filter is static array anymore.
-rw-r--r--lib/menu.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/menu.c b/lib/menu.c
index e31c25f..5d2b37b 100644
--- a/lib/menu.c
+++ b/lib/menu.c
@@ -547,7 +547,7 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
switch (key) {
case BM_KEY_LEFT:
- {
+ if (menu->filter) {
unsigned int oldCursor = menu->cursor;
menu->cursor -= _bmUtf8RunePrev(menu->filter, menu->cursor);
menu->cursesCursor -= _bmUtf8RuneWidth(menu->filter + menu->cursor, oldCursor - menu->cursor);
@@ -555,7 +555,7 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_RIGHT:
- {
+ if (menu->filter) {
unsigned int oldCursor = menu->cursor;
menu->cursor += _bmUtf8RuneNext(menu->filter, menu->cursor);
menu->cursesCursor += _bmUtf8RuneWidth(menu->filter + oldCursor, menu->cursor - oldCursor);
@@ -568,7 +568,7 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
case BM_KEY_END:
menu->cursor = (menu->filter ? strlen(menu->filter) : 0);
- menu->cursesCursor = _bmUtf8StringScreenWidth(menu->filter);
+ menu->cursesCursor = (menu->filter ? _bmUtf8StringScreenWidth(menu->filter) : 0);
break;
case BM_KEY_UP:
@@ -598,7 +598,7 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_BACKSPACE:
- {
+ if (menu->filter) {
size_t width;
menu->cursor -= _bmUtf8RuneRemove(menu->filter, menu->cursor, &width);
menu->cursesCursor -= width;
@@ -606,11 +606,12 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_DELETE:
- _bmUtf8RuneRemove(menu->filter, menu->cursor + 1, NULL);
+ if (menu->filter)
+ _bmUtf8RuneRemove(menu->filter, menu->cursor + 1, NULL);
break;
case BM_KEY_LINE_DELETE_LEFT:
- {
+ if (menu->filter) {
while (menu->cursor > 0) {
size_t width;
menu->cursor -= _bmUtf8RuneRemove(menu->filter, menu->cursor, &width);
@@ -620,22 +621,23 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_LINE_DELETE_RIGHT:
- menu->filter[menu->cursor] = 0;
+ if (menu->filter)
+ menu->filter[menu->cursor] = 0;
break;
case BM_KEY_WORD_DELETE:
- {
- while (menu->cursor < (menu->filter ? strlen(menu->filter) : 0) && !isspace(menu->filter[menu->cursor])) {
+ if (menu->filter) {
+ while (menu->cursor < strlen(menu->filter) && !isspace(menu->filter[menu->cursor])) {
unsigned int oldCursor = menu->cursor;
menu->cursor += _bmUtf8RuneNext(menu->filter, menu->cursor);
menu->cursesCursor += _bmUtf8RuneWidth(menu->filter + oldCursor, menu->cursor - oldCursor);
}
- while (menu->cursor > 0 && menu->filter && isspace(menu->filter[menu->cursor - 1])) {
+ while (menu->cursor > 0 && isspace(menu->filter[menu->cursor - 1])) {
unsigned int oldCursor = menu->cursor;
menu->cursor -= _bmUtf8RunePrev(menu->filter, menu->cursor);
menu->cursesCursor -= _bmUtf8RuneWidth(menu->filter + menu->cursor, oldCursor - menu->cursor);
}
- while (menu->cursor > 0 && menu->filter && !isspace(menu->filter[menu->cursor - 1])) {
+ while (menu->cursor > 0 && !isspace(menu->filter[menu->cursor - 1])) {
size_t width;
menu->cursor -= _bmUtf8RuneRemove(menu->filter, menu->cursor, &width);
menu->cursesCursor -= width;
@@ -658,7 +660,7 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
if (highlighted && (text = bmItemGetText(highlighted))) {
bmMenuSetFilter(menu, text);
menu->cursor = (menu->filter ? strlen(menu->filter) : 0);
- menu->cursesCursor = _bmUtf8StringScreenWidth(menu->filter);
+ menu->cursesCursor = (menu->filter ? _bmUtf8StringScreenWidth(menu->filter) : 0);
}
}
break;