diff options
| author | 2025-03-05 14:37:12 -0500 | |
|---|---|---|
| committer | 2025-03-06 16:05:01 -0500 | |
| commit | 46d5660a2582323e1c9c33a56694c322bc21b7bc (patch) | |
| tree | d7db990d5978eb66847d4daadcd45bd723a62f01 /src/fruits/cmc | |
| parent | 2f7e7ed84b6dafa0a81dde686b4a8e7cbecfcd94 (diff) | |
| download | camu-46d5660a2582323e1c9c33a56694c322bc21b7bc.tar.gz camu-46d5660a2582323e1c9c33a56694c322bc21b7bc.tar.bz2 camu-46d5660a2582323e1c9c33a56694c322bc21b7bc.zip | |
More robust disconnect for errored entries
- Improve >1 width character handling in tui input.
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/fruits/cmc')
| -rw-r--r-- | src/fruits/cmc/ui/pane_search.c | 19 | ||||
| -rw-r--r-- | src/fruits/cmc/ui/ui.h | 1 |
2 files changed, 16 insertions, 4 deletions
diff --git a/src/fruits/cmc/ui/pane_search.c b/src/fruits/cmc/ui/pane_search.c index e75caa5..e273504 100644 --- a/src/fruits/cmc/ui/pane_search.c +++ b/src/fruits/cmc/ui/pane_search.c @@ -37,6 +37,8 @@ void cmc_sp_add_search(struct cmc_ui *ui, struct cmc_search *search) static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) { + bool entered = false; + switch (input->id) { case NCKEY_BACKSPACE: if (tab->cursor > 0) { @@ -59,7 +61,8 @@ static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) tab->input_active = false; // Erase text on next render. tab->input_changed = true; - return true; + entered = true; + break; default: if (ncinput_ctrl_p(input)) { switch (input->id) { @@ -111,7 +114,15 @@ static bool handle_text_input(struct cmc_search_tab *tab, struct ncinput *input) break; } - return false; + + tab->visual_cursor = 0; + if (tab->cursor > 0) { + for (u32 i = 0; i < tab->cursor; i++) { + tab->visual_cursor += al_wchar_width(al_wstr_at(&tab->input_text, i)); + } + } + + return entered; } bool cmc_sp_handle_input(struct cmc_ui *ui, struct ncinput *input) @@ -142,7 +153,7 @@ bool cmc_sp_handle_input(struct cmc_ui *ui, struct ncinput *input) tab->input_changed = true; s32 absx = ncplane_abs_x(tab->input); s32 absy = ncplane_abs_y(tab->input); - notcurses_cursor_enable(ui->nc, absy, absx + tab->cursor); + notcurses_cursor_enable(ui->nc, absy, absx + tab->visual_cursor); break; } } @@ -174,7 +185,7 @@ void cmc_sp_render(struct cmc_ui *ui) if (tab->input_active) { s32 absx = ncplane_abs_x(tab->input); s32 absy = ncplane_abs_y(tab->input); - notcurses_cursor_enable(ui->nc, absy, absx + tab->cursor); + notcurses_cursor_enable(ui->nc, absy, absx + tab->visual_cursor); } } diff --git a/src/fruits/cmc/ui/ui.h b/src/fruits/cmc/ui/ui.h index 996bb73..2f73a81 100644 --- a/src/fruits/cmc/ui/ui.h +++ b/src/fruits/cmc/ui/ui.h @@ -21,6 +21,7 @@ struct cmc_search_tab { struct cmc_search *search; struct ncplane *input; u32 cursor; + u32 visual_cursor; bool input_active; wstr input_text; bool input_changed; |