aboutsummaryrefslogtreecommitdiff
path: root/input_field.c
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2025-10-17 22:55:48 -0400
committerJack Jamison <jackqjamison@gmail.com>2025-10-17 22:55:48 -0400
commit9cdc8540fa3f7d36d48b44f9e955652b6e17dd91 (patch)
treec2e81b97187390d2a7d74c4872823f84f64fa75f /input_field.c
parent01f4ab89dd2c668e64af5459a615e50eb630dfc1 (diff)
item filtering
Diffstat (limited to 'input_field.c')
-rw-r--r--input_field.c26
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;
}