diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2025-10-17 22:55:48 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2025-10-17 22:55:48 -0400 |
| commit | 9cdc8540fa3f7d36d48b44f9e955652b6e17dd91 (patch) | |
| tree | c2e81b97187390d2a7d74c4872823f84f64fa75f /input_field.c | |
| parent | 01f4ab89dd2c668e64af5459a615e50eb630dfc1 (diff) | |
item filtering
Diffstat (limited to 'input_field.c')
| -rw-r--r-- | input_field.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/input_field.c b/input_field.c index 14c34f7..75a0cbc 100644 --- a/input_field.c +++ b/input_field.c @@ -4,7 +4,25 @@ #include "array.h" #include "graphics.h" -void regenerate_text_buffer(client_state* state) { +void filter_items(client_state* state) { + array_clear(state->filtered_items); + + // get null terminated input buffer + size_t len = array_size(state->input_buffer); + char input_buffer_string[len + 1]; + memcpy(input_buffer_string, state->input_buffer, len); + input_buffer_string[len] = '\0'; + + // add all strings with substring + for (uint32_t i = 0; i < array_size(state->items); ++i) { + if (strstr(state->items[i].text, input_buffer_string) != NULL) { + array_add(state->filtered_items, i); + } + } +} + +void update_text_buffer(client_state* state) { + filter_items(state); destroy_text_buffer(&state->input_buffer_grafix); init_text_buffer(state, &state->input_buffer_grafix, state->input_buffer, array_size(state->input_buffer)); } @@ -24,7 +42,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { // submit line if (keysym == XKB_KEY_Return || keysym == XKB_KEY_KP_Enter) { submit_line(state); - regenerate_text_buffer(state); + update_text_buffer(state); return false; } @@ -35,7 +53,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { } else { array_pop(state->input_buffer); } - regenerate_text_buffer(state); + update_text_buffer(state); return true; } @@ -46,7 +64,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { for (int i = 0; i < strlen(buf); i++) { array_add(state->input_buffer, buf[i]); } - regenerate_text_buffer(state); + update_text_buffer(state); return true; } |
