From b346e364c58d6fc1a2e78d32993183656b33b070 Mon Sep 17 00:00:00 2001 From: Alexander Zhylin Date: Fri, 8 May 2026 15:10:33 +0300 Subject: [PATCH] file list fixes --- src/app.c | 4 ++-- src/common.h | 2 +- src/main.h | 6 +++++- src/query.c | 3 --- src/windows/file_list.c | 13 ++++++++++++- src/windows/fs_file_list.c | 19 ++++++++++++++++--- 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/app.c b/src/app.c index d78a32a..fbd6655 100644 --- a/src/app.c +++ b/src/app.c @@ -157,8 +157,8 @@ void app_refresh(app_t *app) { if (app->modal.is_initiated != 0) { wnoutrefresh(app->modal.win); } - } else if (app->main_ui.cb_refresh != NULL) { - app->main_ui.cb_refresh(app); + } else if (app->main_ui.cb_ui_refresh != NULL) { + app->main_ui.cb_ui_refresh(app); } doupdate(); } diff --git a/src/common.h b/src/common.h index e2956ff..df46617 100644 --- a/src/common.h +++ b/src/common.h @@ -13,7 +13,7 @@ typedef struct { #define MAIN_UI_RESET(app) \ app->main_ui.ui = NULL; \ - app->main_ui.cb_refresh = NULL; \ + app->main_ui.cb_ui_refresh = NULL; \ app->main_ui.cb_b_press = NULL; \ app->main_ui.b_keys = NULL; \ app->main_ui.b_keys_len = 0; diff --git a/src/main.h b/src/main.h index 67f156b..87dd6e4 100644 --- a/src/main.h +++ b/src/main.h @@ -89,11 +89,15 @@ enum main_window_type { mw_f_desc, /* file description */ }; +typedef void (draw_f_t) (void *fui) ; + typedef struct main_window { enum main_window_type type; void *ui; /* structure which describes window UI */ int32_t (*cb_b_press) (void *app, void *args); /* callback on button press */ - void (*cb_refresh) (void *app); /* refresh callback */ + void (*cb_ui_refresh) (void *app); /* refresh callback */ + void (*reset) (void *app); /* reset state of the window */ + draw_f_t *draw; struct action_key *b_keys; int32_t b_keys_len; } main_window_t; diff --git a/src/query.c b/src/query.c index 177b5b3..7569c5c 100644 --- a/src/query.c +++ b/src/query.c @@ -139,15 +139,12 @@ void wait_register(query_args_t *q_args) { int upload_confirm_cb(app_t *app, char *query, int q_len) { if (!strncmp("finished\n", query, sizeof("finished\n") - 1)) { - w_ui_file_list_t *fui = (w_ui_file_list_t *)app->query_args->main_ui->ui; w_notification("File upload", dc_normal, "File %s is uploaded to the server!", app->query_args->file->name); clear_file_in_query(app->query_args); app->query_args->state = S_FILE_LIST; app->modal.needs_destroy = true; - w_fl_reset(fui); - server_send_string(app->query_args, "file list %u %u\n", fui->max_lines, 1); return 0; } return 1; /* TODO: Error case */ diff --git a/src/windows/file_list.c b/src/windows/file_list.c index 9d35306..e2d9bcf 100644 --- a/src/windows/file_list.c +++ b/src/windows/file_list.c @@ -164,15 +164,20 @@ static int32_t process_user_input(app_t *app, w_cb_args_t *d_args) { return OK; } +void w_fl_reset_app(void *app); + void *w_fl_init(app_t *app) { w_ui_file_list_t *fui = malloc(sizeof(w_ui_file_list_t)); app->main_ui.ui = fui; app->main_ui.type = mw_fl_server; - app->main_ui.cb_refresh = w_fl_cb_refresh; + app->main_ui.cb_ui_refresh = w_fl_cb_refresh; app->main_ui.b_keys = action_keys; app->main_ui.b_keys_len = 4; app->main_ui.cb_b_press = (w_cb_press_t)process_user_input; + app->main_ui.reset = w_fl_reset_app; + app->main_ui.draw = (draw_f_t *) w_fl_draw; app->active_callback = w_fl_cb; + fui->w.callback = w_fl_cb; w_init(&(fui->w), NULL, &(app->win), ""); WINDOW *win_parent = app->win; fui->current_idx = 0; @@ -221,6 +226,12 @@ void w_fl_reset(w_ui_file_list_t *fl_ui) { fl_ui->active_search = false; } +void w_fl_reset_app(void *app) { + app_t *_app = (app_t *) app; + w_ui_file_list_t *fl_ui = (w_ui_file_list_t *) _app->main_ui.ui; + w_fl_reset(fl_ui); +} + void w_fl_draw(w_ui_file_list_t *fui) { int32_t sz_y, sz_x; int64_t p_y, p_x; diff --git a/src/windows/fs_file_list.c b/src/windows/fs_file_list.c index 73b3d14..ba6848b 100644 --- a/src/windows/fs_file_list.c +++ b/src/windows/fs_file_list.c @@ -354,20 +354,24 @@ static int32_t process_user_input(app_t *app, w_cb_args_t *d_args) { return OK; } +void w_lfl_reset_app(void *app); + w_lfl_ui_t *w_lfl_init_win(app_t *app) { w_lfl_ui_t *fui = malloc(sizeof(w_lfl_ui_t)); app->main_ui.ui = fui; app->main_ui.type = mw_fl_local; - app->main_ui.cb_refresh = w_lfl_cb_refresh; + app->main_ui.cb_ui_refresh = w_lfl_cb_refresh; app->main_ui.b_keys = action_keys; app->main_ui.b_keys_len = 2; app->main_ui.cb_b_press = (w_cb_press_t)process_user_input; + app->main_ui.reset = w_lfl_reset_app; + app->main_ui.draw = (draw_f_t *) w_lfl_draw; app->active_callback = w_lfl_cb; + fui->w.callback = w_lfl_cb; w_init(&(fui->w), NULL, &(app->win), ""); fui->current_idx = 0; fui->win_info = NULL; fui->d_path = NULL; - fui->w.callback = w_lfl_cb; fui->w.sz.x = getmaxx(app->win); fui->w.sz.y = getmaxy(app->win); fui->cur_page = 1; @@ -393,7 +397,16 @@ w_lfl_ui_t *w_lfl_init_win(app_t *app) { return fui; } -void w_lfl_reset(w_lfl_ui_t *fl_ui) { fl_ui->current_idx = 0; } +void w_lfl_reset(w_lfl_ui_t *fl_ui) { + fl_ui->current_idx = 0; + lfl_clear(&(fl_ui->start), &(fl_ui->current)); +} + +void w_lfl_reset_app(void *app) { + app_t *_app = app; + w_lfl_ui_t *fl_ui = (w_lfl_ui_t *) _app->main_ui.ui; + w_lfl_reset(fl_ui); +} void w_lfl_draw(w_lfl_ui_t *fui) { int32_t sz_y, sz_x;