diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-12 23:09:35 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-12 23:09:35 +0300 |
commit | 994d6074bc390492764adb51dc2235d245145afa (patch) | |
tree | 5e0b2e09b8007548a4fd912c4234552e1bc69c35 | |
parent | 3f0f507e4f3bea6c5936be62aeff507ed6c4ae25 (diff) | |
download | bemenu-994d6074bc390492764adb51dc2235d245145afa.tar.gz bemenu-994d6074bc390492764adb51dc2235d245145afa.tar.bz2 bemenu-994d6074bc390492764adb51dc2235d245145afa.zip |
Stop assuming filter is static array anymore.
-rw-r--r-- | lib/menu.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -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; |