diff --git a/src/draw_modal.c b/src/draw_modal.c index 2e15c7d..2a702d4 100644 --- a/src/draw_modal.c +++ b/src/draw_modal.c @@ -5,12 +5,16 @@ #include #include "main.h" +static void (*active_callback_backup)(w_cb_args_t *) = NULL; + void app_draw_modal(app_t *app) { if (app->modal.needs_destroy || (app->query_args->state == S_WAIT_SERVER && app->modal.is_initiated)) { w_dialogue_destroy(&(app->modal), app); + app->active_callback = active_callback_backup; } if (!app->modal.is_initiated) { + active_callback_backup = app->active_callback; switch (app->query_args->state) { case S_ASK_SEVER_IP: m_asa_init(app); diff --git a/src/modals/upload_props_dialogue.c b/src/modals/upload_props_dialogue.c index 2f115d7..fbc9325 100644 --- a/src/modals/upload_props_dialogue.c +++ b/src/modals/upload_props_dialogue.c @@ -51,6 +51,7 @@ void upload_props_dialogue_modal_cb(w_cb_args_t *args) { FREE_MLC(app->query_args->file->name); FREE_MLC(app->query_args->file->path) FREE_MLC(app->query_args->file); + app->modal.needs_destroy = true; app->query_args->state = S_WAIT_SERVER; break; } diff --git a/src/query.c b/src/query.c index 5b2abd3..177b5b3 100644 --- a/src/query.c +++ b/src/query.c @@ -42,7 +42,7 @@ int32_t process_user_input(app_t *app, w_cb_args_t *d_args); { \ w_alert(message); \ close_session(app->params->sd); \ - app_destroy(app, exit_code); \ + app_destroy(app, exit_code); \ } void query_loop(app_t *app) { @@ -123,6 +123,7 @@ void query_loop(app_t *app) { w_alert("error while processing user input"); } } + d_args.resp_data.code = cbrc_none; } } } @@ -184,6 +185,11 @@ int process_query(app_t *app) { if (!file_upload_start(query_args)) { query_args->state = S_UPLOAD_FILE; } else { + if (app->query_args->file != NULL) { + FREE_MLC(app->query_args->file->name); + FREE_MLC(app->query_args->file->path) + FREE_MLC(app->query_args->file); + } query_args->state = WAIT_CLIENT; } break; diff --git a/src/widget/checkbox.c b/src/widget/checkbox.c index e8703b3..918bf0c 100644 --- a/src/widget/checkbox.c +++ b/src/widget/checkbox.c @@ -15,7 +15,7 @@ bool w_checkbox_default_key_action(w_cb_args_t *args) { w_g_el_t *g_el = args->active_el; w_checkbox_t *cbx = g_el->element; switch (key) { - case '\40': + case '\40': /* SPACE */ cbx->value = !cbx->value; break; default: diff --git a/src/widget/dialogue.c b/src/widget/dialogue.c index aa1bb55..62c7966 100644 --- a/src/widget/dialogue.c +++ b/src/widget/dialogue.c @@ -9,6 +9,8 @@ #include #include +static void (*active_callback_backup)(w_cb_args_t *) = NULL; + void incr_active_id(w_dialogue_t *d) { w_g_el_t *active_el = NULL; while (true) { @@ -133,6 +135,8 @@ void w_dialogue_callback_default(w_cb_args_t *args) { new_args.element = d->g_action; } w_group_cb_default(&new_args); + /* copy new result to the parental structure */ + mempcpy(&(args->resp_data), &(new_args.resp_data), sizeof(new_args.resp_data)); } }