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); clear_file_in_query(app->query_args);
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
app->modal.needs_destroy = true; 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); server_send_string(app->query_args, "file list %u %u\n", fui->max_lines, 1);
return 0; return 0;
} }
+19 -13
View File
@@ -16,7 +16,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <unistd.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) { void w_fl_cb(w_cb_args_t *args) {
w_app_t *app = args->app; 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, server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, 1); fui->max_lines, 1);
w_fl_rest(fui); w_fl_reset(fui);
} else { } else {
bconchar(fui->search_key, key); bconchar(fui->search_key, key);
w_fl_draw(fui); w_fl_draw(fui);
@@ -57,43 +57,48 @@ void w_fl_cb(w_cb_args_t *args) {
case KEY_DOWN: case KEY_DOWN:
if (fui->current_idx < fui->current_count - 1) { if (fui->current_idx < fui->current_count - 1) {
fui->current_idx++; fui->current_idx++;
w_fl_draw(fui);
} else if (fui->current_page < fui->pages) { } else if (fui->current_page < fui->pages) {
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page + 1); fui->max_lines, fui->current_page + 1);
w_fl_rest(fui); w_fl_reset(fui);
break;
} }
w_fl_draw(fui);
break; break;
case KEY_UP: case KEY_UP:
if (fui->current_idx > 0) { if (fui->current_idx > 0) {
fui->current_idx--; fui->current_idx--;
w_fl_draw(fui);
} else if (fui->current_page > 1) { } else if (fui->current_page > 1) {
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page - 1); fui->max_lines, fui->current_page - 1);
w_fl_rest(fui); w_fl_reset(fui);
fui->activate_last = true; fui->activate_last = true;
break;
} }
w_fl_draw(fui);
break; break;
case KEY_NPAGE: case KEY_NPAGE:
if (fui->current_page < fui->pages) { if (fui->current_page < fui->pages) {
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page + 1); fui->max_lines, fui->current_page + 1);
w_fl_rest(fui); w_fl_reset(fui);
break;
} }
w_fl_draw(fui);
break; break;
case KEY_PPAGE: case KEY_PPAGE:
if (fui->current_page > 1) { if (fui->current_page > 1) {
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, server_send_string(app->query_args, "%s %u %u\n", q_prefix,
fui->max_lines, fui->current_page - 1); fui->max_lines, fui->current_page - 1);
w_fl_rest(fui); w_fl_reset(fui);
fui->activate_last = true; fui->activate_last = true;
}
break; break;
}
w_fl_draw(fui);
break; break;
case '\33': case '\33':
fui->active_search = false; fui->active_search = false;
@@ -103,7 +108,7 @@ void w_fl_cb(w_cb_args_t *args) {
app->query_args->state = S_FILE_LIST; app->query_args->state = S_FILE_LIST;
server_send_string(app->query_args, "%s %u %u\n", q_prefix, fui->max_lines, server_send_string(app->query_args, "%s %u %u\n", q_prefix, fui->max_lines,
1); 1);
w_fl_rest(fui); w_fl_reset(fui);
case '\n': case '\n':
ui_file_select(app->file_args, app->query_args, fui->current_idx + 1); ui_file_select(app->file_args, app->query_args, fui->current_idx + 1);
break; 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.type = mw_fl_server;
app->main_ui.cb_refresh = w_fl_cb_refresh; app->main_ui.cb_refresh = w_fl_cb_refresh;
w_init(&(fui->w), NULL, &(app->win), ""); w_init(&(fui->w), NULL, &(app->win), "");
WINDOW *parent_win = app->win; WINDOW *win_parent = app->win;
fui->current_idx = 0; fui->current_idx = 0;
fui->current_page = 1; fui->current_page = 1;
fui->pages = 1; fui->pages = 1;
fui->current_count = 0; fui->current_count = 0;
fui->full_count = 0; fui->full_count = 0;
fui->activate_last = false; fui->activate_last = false;
fui->max_lines = getmaxy(parent_win) - 3; /* 2+1 (bottom info line) */
fui->active_search = false; fui->active_search = false;
fui->search_key = bfromcstrrangealloc(12, 64, ""); fui->search_key = bfromcstrrangealloc(12, 64, "");
fui->start = NULL; fui->start = NULL;
@@ -153,6 +157,8 @@ w_ui_file_list_t *w_fl_init(w_app_t *app) {
/* create the action window */ /* create the action window */
fui->win_info = fui->win_info =
newwin(app->coordinates.max_y - 4, right_w_x, 2, left_w_x + 1); 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; return fui;
} }
@@ -162,7 +168,7 @@ void w_fl_destroy(w_ui_file_list_t **fui) {
*fui = NULL; *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_clear(fl_ui->start, fl_ui->current);
fl_ui->current_idx = 0; fl_ui->current_idx = 0;
fl_ui->current_page = 0; fl_ui->current_page = 0;
+1 -1
View File
@@ -29,7 +29,7 @@ typedef struct {
void w_fl_draw(w_ui_file_list_t *fl_ui); void w_fl_draw(w_ui_file_list_t *fl_ui);
w_ui_file_list_t *w_fl_init(w_app_t *app); w_ui_file_list_t *w_fl_init(w_app_t *app);
void w_fl_cb(w_cb_args_t *args); 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); void w_fl_destroy(w_ui_file_list_t **fui);
#endif #endif
+5 -3
View File
@@ -19,7 +19,7 @@
#include "fs_file_list.h" #include "fs_file_list.h"
#include "widget_core.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 { struct fl_args {
char *name; char *name;
@@ -225,22 +225,24 @@ void w_lfl_cb(w_cb_args_t *args) {
if (fui->current_idx < fui->rows_num - 1) { if (fui->current_idx < fui->rows_num - 1) {
fui->current = fui->current->next; fui->current = fui->current->next;
fui->current_idx++; fui->current_idx++;
w_lfl_draw(fui);
} else { } else {
page_next(fui); page_next(fui);
break;
} }
} }
w_lfl_draw(fui);
break; break;
case KEY_UP: case KEY_UP:
if (fui->current->prev != NULL) { if (fui->current->prev != NULL) {
if (fui->current_idx > 0) { if (fui->current_idx > 0) {
fui->current = fui->current->prev; fui->current = fui->current->prev;
fui->current_idx--; fui->current_idx--;
w_lfl_draw(fui);
} else { } else {
page_previous(fui); page_previous(fui);
break;
} }
} }
w_lfl_draw(fui);
break; break;
case KEY_NPAGE: case KEY_NPAGE:
page_next(fui); page_next(fui);