ui: file list: fixes navigation (up/down/pup, pdown)

This commit is contained in:
2026-04-08 14:39:51 +03:00
parent 9dabb06d99
commit 95aeaebb57
4 changed files with 28 additions and 20 deletions
+1 -1
View File
@@ -136,7 +136,7 @@ int upload_confirm_cb(w_app_t *app, char *query, int q_len) {
clear_file_in_query(app->query_args);
app->query_args->state = S_FILE_LIST;
app->modal.needs_destroy = true;
w_fl_rest(fui);
w_fl_reset(fui);
server_send_string(app->query_args, "file list %u %u\n", fui->max_lines, 1);
return 0;
}
+20 -14
View File
@@ -16,7 +16,7 @@
#include <sys/types.h>
#include <unistd.h>
void w_fl_rest(w_ui_file_list_t *fl_ui);
void w_fl_reset(w_ui_file_list_t *fl_ui);
void w_fl_cb(w_cb_args_t *args) {
w_app_t *app = args->app;
@@ -45,7 +45,7 @@ void w_fl_cb(w_cb_args_t *args) {
}
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, 1);
w_fl_rest(fui);
w_fl_reset(fui);
} else {
bconchar(fui->search_key, key);
w_fl_draw(fui);
@@ -57,43 +57,48 @@ void w_fl_cb(w_cb_args_t *args) {
case KEY_DOWN:
if (fui->current_idx < fui->current_count - 1) {
fui->current_idx++;
w_fl_draw(fui);
} else if (fui->current_page < fui->pages) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page + 1);
w_fl_rest(fui);
w_fl_reset(fui);
break;
}
w_fl_draw(fui);
break;
case KEY_UP:
if (fui->current_idx > 0) {
fui->current_idx--;
w_fl_draw(fui);
} else if (fui->current_page > 1) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page - 1);
w_fl_rest(fui);
w_fl_reset(fui);
fui->activate_last = true;
break;
}
w_fl_draw(fui);
break;
case KEY_NPAGE:
if (fui->current_page < fui->pages) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page + 1);
w_fl_rest(fui);
w_fl_reset(fui);
break;
}
w_fl_draw(fui);
break;
case KEY_PPAGE:
if (fui->current_page > 1) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page - 1);
w_fl_rest(fui);
w_fl_reset(fui);
fui->activate_last = true;
}
break;
}
w_fl_draw(fui);
break;
case '\33':
fui->active_search = false;
@@ -103,7 +108,7 @@ void w_fl_cb(w_cb_args_t *args) {
app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, fui->max_lines,
1);
w_fl_rest(fui);
w_fl_reset(fui);
case '\n':
ui_file_select(app->file_args, app->query_args, fui->current_idx + 1);
break;
@@ -126,14 +131,13 @@ w_ui_file_list_t *w_fl_init(w_app_t *app) {
app->main_ui.type = mw_fl_server;
app->main_ui.cb_refresh = w_fl_cb_refresh;
w_init(&(fui->w), NULL, &(app->win), "");
WINDOW *parent_win = app->win;
WINDOW *win_parent = app->win;
fui->current_idx = 0;
fui->current_page = 1;
fui->pages = 1;
fui->current_count = 0;
fui->full_count = 0;
fui->activate_last = false;
fui->max_lines = getmaxy(parent_win) - 3; /* 2+1 (bottom info line) */
fui->active_search = false;
fui->search_key = bfromcstrrangealloc(12, 64, "");
fui->start = NULL;
@@ -153,6 +157,8 @@ w_ui_file_list_t *w_fl_init(w_app_t *app) {
/* create the action window */
fui->win_info =
newwin(app->coordinates.max_y - 4, right_w_x, 2, left_w_x + 1);
fui->max_lines = getmaxy(fui->win_list) - 3; /* 2+1 (bottom info line) */
return fui;
}
@@ -162,7 +168,7 @@ void w_fl_destroy(w_ui_file_list_t **fui) {
*fui = NULL;
}
void w_fl_rest(w_ui_file_list_t *fl_ui) {
void w_fl_reset(w_ui_file_list_t *fl_ui) {
fl_clear(fl_ui->start, fl_ui->current);
fl_ui->current_idx = 0;
fl_ui->current_page = 0;
@@ -218,7 +224,7 @@ void w_fl_draw(w_ui_file_list_t *fui) {
active_el = el;
}
p_x = 1;
p_x += u_utf8_curs_printw(win, p_y, p_x, el->name, sz_x-1);
p_x += u_utf8_curs_printw(win, p_y, p_x, el->name, sz_x - 1);
int pad = sz_x - p_x;
if (pad >= 0) {
mvwprintw(win, p_y, p_x, "%*s", pad, "");
+1 -1
View File
@@ -29,7 +29,7 @@ typedef struct {
void w_fl_draw(w_ui_file_list_t *fl_ui);
w_ui_file_list_t *w_fl_init(w_app_t *app);
void w_fl_cb(w_cb_args_t *args);
void w_fl_rest(w_ui_file_list_t *fl_ui);
void w_fl_reset(w_ui_file_list_t *fl_ui);
void w_fl_destroy(w_ui_file_list_t **fui);
#endif
+5 -3
View File
@@ -19,7 +19,7 @@
#include "fs_file_list.h"
#include "widget_core.h"
void w_fl_rest(w_lfl_ui_t *fl_ui);
void w_fl_reset(w_lfl_ui_t *fl_ui);
struct fl_args {
char *name;
@@ -225,22 +225,24 @@ void w_lfl_cb(w_cb_args_t *args) {
if (fui->current_idx < fui->rows_num - 1) {
fui->current = fui->current->next;
fui->current_idx++;
w_lfl_draw(fui);
} else {
page_next(fui);
break;
}
}
w_lfl_draw(fui);
break;
case KEY_UP:
if (fui->current->prev != NULL) {
if (fui->current_idx > 0) {
fui->current = fui->current->prev;
fui->current_idx--;
w_lfl_draw(fui);
} else {
page_previous(fui);
break;
}
}
w_lfl_draw(fui);
break;
case KEY_NPAGE:
page_next(fui);