diff --git a/menu/drivers/nuklear.c b/menu/drivers/nuklear.c index 6815405382..b59bef4838 100644 --- a/menu/drivers/nuklear.c +++ b/menu/drivers/nuklear.c @@ -54,10 +54,19 @@ static void nk_menu_main(nk_menu_handle_t *nk) settings_t *settings = config_get_ptr(); struct nk_context *ctx = &nk->ctx; + static char out[PATH_MAX_LENGTH]; + if (nk->window[NK_WND_SETTINGS].open) nk_wnd_settings(nk); if (nk->window[NK_WND_FILE_PICKER].open) - nk_wnd_file_picker(nk, settings->directory.menu_content, NULL, ".zip"); + { + if (nk_wnd_file_picker(nk, settings->directory.menu_content, out, ".zip")) + { + RARCH_LOG ("%s selected\n", out); + nk_window_close(&nk->ctx, "Select File"); + } + + } if (nk->window[NK_WND_SHADER_PARAMETERS].open) nk_wnd_shader_parameters(nk); if (nk->window[NK_WND_MAIN].open) @@ -297,11 +306,12 @@ static void *nk_menu_init(void **userdata) nk_menu_init_device(nk); /* for demo puposes only, opens all windows */ -#if 1 +#if 0 for (int i=0; i < NK_WND_LAST; i++) nk->window[i].open = true; #else nk->window[NK_WND_MAIN].open = true; + nk->window[NK_WND_FILE_PICKER].open = true; #endif return menu; diff --git a/menu/drivers/nuklear/nk_menu.h b/menu/drivers/nuklear/nk_menu.h index 7518c1e37d..928a32f923 100644 --- a/menu/drivers/nuklear/nk_menu.h +++ b/menu/drivers/nuklear/nk_menu.h @@ -95,7 +95,7 @@ typedef struct nk_menu_handle void nk_wnd_shader_parameters(nk_menu_handle_t *zr); void nk_wnd_main(nk_menu_handle_t *zr); -bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, const char* filter); +bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, char* out, const char* filter); void nk_wnd_settings(nk_menu_handle_t *zr); void nk_wnd_set_state(nk_menu_handle_t *zr, const int id, struct nk_vec2 pos, struct nk_vec2 size); diff --git a/menu/drivers/nuklear/nk_wnd_file_picker.c b/menu/drivers/nuklear/nk_wnd_file_picker.c index c6227979a8..ed35d65c25 100644 --- a/menu/drivers/nuklear/nk_wnd_file_picker.c +++ b/menu/drivers/nuklear/nk_wnd_file_picker.c @@ -61,7 +61,7 @@ void load_icons(nk_menu_handle_t *nk) assets_loaded = true; } -bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, const char* filter) +bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, char* out, const char* filter) { struct nk_panel layout; struct nk_context *ctx = &nk->ctx; @@ -70,6 +70,7 @@ bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, c static file_list_t *drives = NULL; static struct string_list *files = NULL; settings_t *settings = config_get_ptr(); + bool ret = false; if (!drives) { @@ -91,7 +92,7 @@ bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, c NK_WINDOW_CLOSABLE|NK_WINDOW_MINIMIZABLE|NK_WINDOW_MOVABLE| NK_WINDOW_BORDER)) { - nk_layout_row_dynamic(ctx, 30, 3); + nk_layout_row_dynamic(ctx, 30, 4); if (drives->size == 0) { @@ -131,6 +132,7 @@ bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, c files = dir_list_new(path, filter, true, true); else RARCH_LOG ("File: %s selected\n", path); + ret = true; } } } @@ -139,9 +141,12 @@ bool nk_wnd_file_picker(nk_menu_handle_t *nk, const char* in, const char* out, c /* sort the dir list with directories first */ dir_list_sort(files, true); + /* copy the path variable to out*/ + strlcpy(out, path, sizeof(path)); + /* save position and size to restore after context reset */ nk_wnd_set_state(nk, id, nk_window_get_position(ctx), nk_window_get_size(ctx)); nk_end(ctx); - return false; + return ret; }