diff --git a/Makefile.common b/Makefile.common
index 18a90a43db..28692d589c 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -109,7 +109,6 @@ OBJ += frontend/frontend.o \
gfx/video_monitor.o \
gfx/video_pixel_converter.o \
gfx/video_viewport.o \
- osk/osk_driver.o \
camera/camera_driver.o \
menu/menu_driver.o \
location/location_driver.o \
@@ -162,7 +161,6 @@ OBJ += frontend/frontend.o \
audio/drivers/nullaudio.o \
input/drivers/nullinput.o \
input/drivers_joypad/nullinput_joypad.o \
- osk/drivers/nullosk.o \
playlist.o \
movie.o \
record/record_driver.o \
diff --git a/audio/audio_driver.c b/audio/audio_driver.c
index 5ff5279b60..4838b86641 100644
--- a/audio/audio_driver.c
+++ b/audio/audio_driver.c
@@ -189,6 +189,12 @@ const char* config_get_audio_driver_options(void)
options = (char*)calloc(options_len, sizeof(char));
+ if (!options)
+ {
+ string_list_free(options_l);
+ return NULL;
+ }
+
string_list_join_concat(options, options_len, options_l, "|");
string_list_free(options_l);
diff --git a/driver.c b/driver.c
index e046525b54..77ca46144e 100644
--- a/driver.c
+++ b/driver.c
@@ -61,12 +61,6 @@ static const void *find_driver_nonempty(const char *label, int i,
if (drv)
strlcpy(str, location_driver_find_ident(i), sizeof_str);
}
- else if (!strcmp(label, "osk_driver"))
- {
- drv = osk_driver_find_handle(i);
- if (drv)
- strlcpy(str, osk_driver_find_ident(i), sizeof_str);
- }
#ifdef HAVE_MENU
else if (!strcmp(label, "menu_driver"))
{
@@ -190,7 +184,6 @@ void init_drivers_pre(void)
find_input_driver();
find_camera_driver();
find_location_driver();
- find_osk_driver();
#ifdef HAVE_MENU
find_menu_driver();
#endif
@@ -303,8 +296,6 @@ void init_drivers(int flags)
driver.camera_data_own = false;
if (flags & DRIVER_LOCATION)
driver.location_data_own = false;
- if (flags & DRIVER_OSK)
- driver.osk_data_own = false;
#ifdef HAVE_MENU
/* By default, we want the menu to persist through driver reinits. */
@@ -339,9 +330,6 @@ void init_drivers(int flags)
if ((flags & DRIVER_LOCATION) && driver.location_active)
init_location();
- if (flags & DRIVER_OSK)
- init_osk();
-
#ifdef HAVE_MENU
if (flags & DRIVER_MENU)
{
@@ -413,12 +401,6 @@ void uninit_drivers(int flags)
driver.location_data = NULL;
}
- if ((flags & DRIVER_OSK) && !driver.osk_data_own)
- {
- uninit_osk();
- driver.osk_data = NULL;
- }
-
if ((flags & DRIVER_INPUT) && !driver.input_data_own)
driver.input_data = NULL;
diff --git a/driver.h b/driver.h
index b553f7adda..7e8c1b4ae4 100644
--- a/driver.h
+++ b/driver.h
@@ -31,7 +31,6 @@
#include "audio/audio_driver.h"
#include "menu/menu_driver.h"
-#include "osk/osk_driver.h"
#include "camera/camera_driver.h"
#include "location/location_driver.h"
#include "audio/audio_resampler_driver.h"
@@ -169,11 +168,10 @@ enum
DRIVER_AUDIO = 1 << 0,
DRIVER_VIDEO = 1 << 1,
DRIVER_INPUT = 1 << 2,
- DRIVER_OSK = 1 << 3,
- DRIVER_CAMERA = 1 << 4,
- DRIVER_LOCATION = 1 << 5,
- DRIVER_MENU = 1 << 6,
- DRIVERS_VIDEO_INPUT = 1 << 7
+ DRIVER_CAMERA = 1 << 3,
+ DRIVER_LOCATION = 1 << 4,
+ DRIVER_MENU = 1 << 5,
+ DRIVERS_VIDEO_INPUT = 1 << 6
};
/* Drivers for RARCH_CMD_DRIVERS_DEINIT and RARCH_CMD_DRIVERS_INIT */
@@ -181,7 +179,6 @@ enum
( DRIVER_AUDIO \
| DRIVER_VIDEO \
| DRIVER_INPUT \
- | DRIVER_OSK \
| DRIVER_CAMERA \
| DRIVER_LOCATION \
| DRIVER_MENU \
@@ -193,7 +190,6 @@ typedef struct driver
const audio_driver_t *audio;
const video_driver_t *video;
const input_driver_t *input;
- const input_osk_driver_t *osk;
const camera_driver_t *camera;
const location_driver_t *location;
const rarch_resampler_t *resampler;
@@ -205,7 +201,6 @@ typedef struct driver
void *video_context_data;
void *video_shader_data;
void *input_data;
- void *osk_data;
void *camera_data;
void *location_data;
void *resampler_data;
@@ -251,7 +246,6 @@ typedef struct driver
bool input_data_own;
bool camera_data_own;
bool location_data_own;
- bool osk_data_own;
#ifdef HAVE_MENU
bool menu_data_own;
#endif
@@ -289,6 +283,7 @@ typedef struct driver
#ifdef HAVE_OVERLAY
input_overlay_t *overlay;
+ input_overlay_t *osk_overlay;
input_overlay_state_t overlay_state;
#endif
diff --git a/general.h b/general.h
index c909052ffa..1a2128ab6d 100644
--- a/general.h
+++ b/general.h
@@ -105,6 +105,7 @@ struct defaults
char core_dir[PATH_MAX_LENGTH];
char core_info_dir[PATH_MAX_LENGTH];
char overlay_dir[PATH_MAX_LENGTH];
+ char osk_overlay_dir[PATH_MAX_LENGTH];
char port_dir[PATH_MAX_LENGTH];
char shader_dir[PATH_MAX_LENGTH];
char savestate_dir[PATH_MAX_LENGTH];
@@ -239,12 +240,6 @@ struct settings
int update_interval_distance;
} location;
- struct
- {
- char driver[32];
- bool enable;
- } osk;
-
struct
{
char driver[32];
@@ -309,6 +304,14 @@ struct settings
char remapping_path[PATH_MAX_LENGTH];
} input;
+ struct
+ {
+ bool enable;
+ char overlay[PATH_MAX_LENGTH];
+ float opacity;
+ float scale;
+ } osk;
+
struct
{
unsigned mode;
@@ -462,6 +465,7 @@ struct global
#ifdef HAVE_OVERLAY
char overlay_dir[PATH_MAX_LENGTH];
+ char osk_overlay_dir[PATH_MAX_LENGTH];
#endif
bool block_patch;
@@ -608,12 +612,6 @@ struct global
bool movie_end;
} bsv;
- struct
- {
- bool (*cb_init)(void *data);
- bool (*cb_callback)(void *data);
- } osk;
-
bool sram_load_disable;
bool sram_save_disable;
bool use_sram;
diff --git a/gfx/video_driver.c b/gfx/video_driver.c
index 9d796ba47b..83f4c3f1cc 100644
--- a/gfx/video_driver.c
+++ b/gfx/video_driver.c
@@ -484,7 +484,9 @@ void init_video(void)
init_video_input(tmp);
rarch_main_command(RARCH_CMD_OVERLAY_DEINIT);
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
rarch_main_command(RARCH_CMD_OVERLAY_INIT);
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_INIT);
g_extern.measure_data.frame_time_samples_count = 0;
diff --git a/griffin/griffin.c b/griffin/griffin.c
index 785d52376e..e8b4efe8f7 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -361,12 +361,6 @@ INPUT
#include "../input/drivers_joypad/winxinput_joypad.c"
#endif
-#if defined(__CELLOS_LV2__)
-#include "../osk/drivers/ps3_osk.c"
-#endif
-
-#include "../osk/drivers/nullosk.c"
-
#if defined(__linux__) && !defined(ANDROID)
#include "../input/drivers/linuxraw_input.c"
#include "../input/drivers_joypad/linuxraw_joypad.c"
@@ -515,7 +509,6 @@ DRIVERS
#include "../input/input_driver.c"
#include "../audio/audio_driver.c"
#include "../audio/audio_monitor.c"
-#include "../osk/osk_driver.c"
#include "../camera/camera_driver.c"
#include "../location/location_driver.c"
#include "../menu/menu_driver.c"
diff --git a/input/input_overlay.c b/input/input_overlay.c
index 847c352613..b436b37c95 100644
--- a/input/input_overlay.c
+++ b/input/input_overlay.c
@@ -14,9 +14,11 @@
* If not, see .
*/
+#include
+#include
#include "input_overlay.h"
-#include "../general.h"
#include "../driver.h"
+#include "../general.h"
#include
#include
#include "input_common.h"
@@ -565,7 +567,8 @@ end:
return ret;
}
-static void input_overlay_load_active(input_overlay_t *ol)
+static void input_overlay_load_active(input_overlay_t *ol,
+ float opacity)
{
if (!ol)
return;
@@ -573,7 +576,7 @@ static void input_overlay_load_active(input_overlay_t *ol)
ol->iface->load(ol->iface_data, ol->active->load_images,
ol->active->load_images_size);
- input_overlay_set_alpha_mod(ol, g_settings.input.overlay_opacity);
+ input_overlay_set_alpha_mod(ol, opacity);
input_overlay_set_vertex_geom(ol);
ol->iface->full_screen(ol->iface_data, ol->active->full_screen);
}
@@ -587,16 +590,20 @@ static void input_overlay_load_active(input_overlay_t *ol)
*
* Returns: Overlay handle on success, otherwise NULL.
**/
-input_overlay_t *input_overlay_new(const char *path, bool enable)
+input_overlay_t *input_overlay_new(const char *path, bool enable,
+ float opacity, float scale_factor)
{
input_overlay_t *ol = (input_overlay_t*)calloc(1, sizeof(*ol));
+ RARCH_LOG("path is: %s\n", path);
+
if (!ol)
goto error;
ol->overlay_path = strdup(path);
if (!ol->overlay_path)
{
+ RARCH_LOG("exits here, path is: %s.\n", path);
free(ol);
return NULL;
}
@@ -619,11 +626,11 @@ input_overlay_t *input_overlay_new(const char *path, bool enable)
ol->active = &ol->overlays[0];
- input_overlay_load_active(ol);
+ input_overlay_load_active(ol, opacity);
input_overlay_enable(ol, enable);
- input_overlay_set_alpha_mod(ol, g_settings.input.overlay_opacity);
- input_overlay_set_scale_factor(ol, g_settings.input.overlay_scale);
+ input_overlay_set_alpha_mod(ol, opacity);
+ input_overlay_set_scale_factor(ol, scale_factor);
ol->next_index = (ol->index + 1) % ol->size;
return ol;
@@ -802,11 +809,11 @@ static void input_overlay_update_desc_geom(input_overlay_t *ol,
* update the range modifiers for pressed/unpressed regions
* and alpha mods.
**/
-void input_overlay_post_poll(input_overlay_t *ol)
+void input_overlay_post_poll(input_overlay_t *ol, float opacity)
{
size_t i;
- input_overlay_set_alpha_mod(ol, g_settings.input.overlay_opacity);
+ input_overlay_set_alpha_mod(ol, opacity);
for (i = 0; i < ol->active->size; i++)
{
@@ -826,7 +833,7 @@ void input_overlay_post_poll(input_overlay_t *ol)
if (desc->image.pixels)
ol->iface->set_alpha(ol->iface_data, desc->image_index,
- desc->alpha_mod * g_settings.input.overlay_opacity);
+ desc->alpha_mod * opacity);
}
input_overlay_update_desc_geom(ol, desc);
@@ -841,12 +848,12 @@ void input_overlay_post_poll(input_overlay_t *ol)
* Call when there is nothing to poll. Allows overlay to
* clear certain state.
**/
-void input_overlay_poll_clear(input_overlay_t *ol)
+void input_overlay_poll_clear(input_overlay_t *ol, float opacity)
{
size_t i;
ol->blocked = false;
- input_overlay_set_alpha_mod(ol, g_settings.input.overlay_opacity);
+ input_overlay_set_alpha_mod(ol, opacity);
for (i = 0; i < ol->active->size; i++)
{
@@ -872,7 +879,7 @@ void input_overlay_poll_clear(input_overlay_t *ol)
* Switch to the next available overlay
* screen.
**/
-void input_overlay_next(input_overlay_t *ol)
+void input_overlay_next(input_overlay_t *ol, float opacity)
{
if (!ol)
return;
@@ -880,7 +887,7 @@ void input_overlay_next(input_overlay_t *ol)
ol->index = ol->next_index;
ol->active = &ol->overlays[ol->index];
- input_overlay_load_active(ol);
+ input_overlay_load_active(ol, opacity);
ol->blocked = true;
ol->next_index = (ol->index + 1) % ol->size;
@@ -937,6 +944,5 @@ void input_overlay_set_alpha_mod(input_overlay_t *ol, float mod)
return;
for (i = 0; i < ol->active->load_images_size; i++)
- ol->iface->set_alpha(ol->iface_data, i,
- g_settings.input.overlay_opacity);
+ ol->iface->set_alpha(ol->iface_data, i, mod);
}
diff --git a/input/input_overlay.h b/input/input_overlay.h
index 896fce7dd8..d6335e57e7 100644
--- a/input/input_overlay.h
+++ b/input/input_overlay.h
@@ -154,7 +154,8 @@ typedef struct input_overlay_state
*
* Returns: Overlay handle on success, otherwise NULL.
**/
-input_overlay_t *input_overlay_new(const char *overlay, bool enable);
+input_overlay_t *input_overlay_new(const char *path, bool enable,
+ float alpha_mod, float scale_factor);
/**
* input_overlay_free:
@@ -201,21 +202,23 @@ void input_overlay_poll(input_overlay_t *ol,
/**
* input_overlay_post_poll:
* @ol : overlay handle
+ *
*
* Called after all the input_overlay_poll() calls to
* update the range modifiers for pressed/unpressed regions
* and alpha mods.
**/
-void input_overlay_post_poll(input_overlay_t *ol);
+void input_overlay_post_poll(input_overlay_t *ol, float opacity);
/**
* input_overlay_poll_clear:
* @ol : overlay handle
+ * @opacity : Opacity of overlay.
*
* Call when there is nothing to poll. Allows overlay to
* clear certain state.
**/
-void input_overlay_poll_clear(input_overlay_t *ol);
+void input_overlay_poll_clear(input_overlay_t *ol, float opacity);
/**
* input_overlay_set_alpha_mod:
@@ -243,7 +246,7 @@ void input_overlay_set_scale_factor(input_overlay_t *ol, float scale);
* Switch to the next available overlay
* screen.
**/
-void input_overlay_next(input_overlay_t *ol);
+void input_overlay_next(input_overlay_t *ol, float opacity);
#ifdef __cplusplus
}
diff --git a/input/keyboard_line.c b/input/keyboard_line.c
index cd287d6fd2..3e31a81957 100644
--- a/input/keyboard_line.c
+++ b/input/keyboard_line.c
@@ -17,6 +17,7 @@
#include "keyboard_line.h"
#include "../general.h"
#include "../driver.h"
+#include "../retroarch.h"
#include
#include
#include
@@ -49,6 +50,8 @@ void input_keyboard_line_free(input_keyboard_line_t *state)
free(state->buffer);
free(state);
+
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_STOP);
}
/**
@@ -72,6 +75,9 @@ input_keyboard_line_t *input_keyboard_line_new(void *userdata,
state->cb = cb;
state->userdata = userdata;
+
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_START);
+
return state;
}
@@ -243,7 +249,7 @@ void input_keyboard_event(bool down, unsigned code,
if (!down)
return;
- if (enable_osk && code != 0x12d)
+ if (driver.osk_active && code != 0x12d)
{
if (!input_keyboard_line_event(g_keyboard_line, (char)code))
return;
diff --git a/libretro_version_1.c b/libretro_version_1.c
index 4b8466271e..3d6a8c8496 100644
--- a/libretro_version_1.c
+++ b/libretro_version_1.c
@@ -465,10 +465,11 @@ static int16_t input_state(unsigned port, unsigned device,
#ifdef HAVE_OVERLAY
/*
* input_poll_overlay:
+ * @overlay_device : pointer to overlay
*
* Poll pressed buttons/keys on currently active overlay.
**/
-static inline void input_poll_overlay(void)
+static inline void input_poll_overlay(input_overlay_t *overlay_device, float opacity)
{
input_overlay_state_t old_key_state;
unsigned i, j, device;
@@ -479,7 +480,7 @@ static inline void input_poll_overlay(void)
sizeof(driver.overlay_state.keys));
memset(&driver.overlay_state, 0, sizeof(driver.overlay_state));
- device = input_overlay_full_screen(driver.overlay) ?
+ device = input_overlay_full_screen(overlay_device) ?
RARCH_DEVICE_POINTER_SCREEN : RETRO_DEVICE_POINTER;
for (i = 0;
@@ -493,7 +494,7 @@ static inline void input_poll_overlay(void)
int16_t y = driver.input->input_state(driver.input_data, NULL, 0,
device, i, RETRO_DEVICE_ID_POINTER_Y);
- input_overlay_poll(driver.overlay, &polled_data, x, y);
+ input_overlay_poll(overlay_device, &polled_data, x, y);
driver.overlay_state.buttons |= polled_data.buttons;
@@ -587,9 +588,9 @@ static inline void input_poll_overlay(void)
}
if (polled)
- input_overlay_post_poll(driver.overlay);
+ input_overlay_post_poll(overlay_device, opacity);
else
- input_overlay_poll_clear(driver.overlay);
+ input_overlay_poll_clear(overlay_device, opacity);
}
#endif
@@ -600,11 +601,20 @@ static inline void input_poll_overlay(void)
**/
static void input_poll(void)
{
+#ifdef HAVE_OVERLAY
+ input_overlay_t *overlay_device = driver.overlay;
+ float opacity = g_settings.input.overlay_opacity;
+ if (driver.osk_active)
+ {
+ overlay_device = driver.osk_overlay;
+ opacity = g_settings.osk.opacity;
+ }
+#endif
driver.input->poll(driver.input_data);
#ifdef HAVE_OVERLAY
- if (driver.overlay)
- input_poll_overlay();
+ if (overlay_device)
+ input_poll_overlay(overlay_device, opacity);
#endif
#ifdef HAVE_COMMAND
diff --git a/menu/menu_entries_cbs.c b/menu/menu_entries_cbs.c
index fa7aaca706..15a1f4b4ca 100644
--- a/menu/menu_entries_cbs.c
+++ b/menu/menu_entries_cbs.c
@@ -3205,6 +3205,13 @@ static int deferred_push_input_overlay(void *data, void *userdata,
MENU_FILE_OVERLAY, "cfg", NULL);
}
+static int deferred_push_input_osk_overlay(void *data, void *userdata,
+ const char *path, const char *label, unsigned type)
+{
+ return menu_entries_parse_list((file_list_t*)data, (file_list_t*)userdata, path, label, type,
+ MENU_FILE_OVERLAY, "cfg", NULL);
+}
+
static int deferred_push_video_font_path(void *data, void *userdata,
const char *path, const char *label, unsigned type)
{
@@ -4386,6 +4393,8 @@ static void menu_entries_cbs_init_bind_deferred_push(menu_file_list_cbs_t *cbs,
cbs->action_deferred_push = deferred_push_audio_dsp_plugin;
else if (!strcmp(label, "input_overlay"))
cbs->action_deferred_push = deferred_push_input_overlay;
+ else if (!strcmp(label, "input_osk_overlay"))
+ cbs->action_deferred_push = deferred_push_input_osk_overlay;
else if (!strcmp(label, "video_font_path"))
cbs->action_deferred_push = deferred_push_video_font_path;
else if (!strcmp(label, "game_history_path"))
diff --git a/osk/drivers/nullosk.c b/osk/drivers/nullosk.c
deleted file mode 100644
index 801822e6b8..0000000000
--- a/osk/drivers/nullosk.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#include
-#include
-#include "../../driver.h"
-
-
-static void *nullosk_init(size_t size)
-{
- return (void*)-1;
-}
-
-static void nullosk_free(void *data)
-{
-}
-
-static bool nullosk_enable_key_layout(void *data)
-{
- return true;
-}
-
-static void nullosk_create_activation_parameters(void *data)
-{
-}
-
-static void nullosk_write_message(void *data, const void *data_msg)
-{
-}
-
-static void nullosk_write_initial_message(void *data, const void *data_msg)
-{
-}
-
-static bool nullosk_start(void *data)
-{
- return true;
-}
-
-static void *nullosk_get_text_buf(void *data)
-{
- return NULL;
-}
-
-static void nullosk_lifecycle(void *data, uint64_t status)
-{
-}
-
-input_osk_driver_t input_null_osk = {
- nullosk_init,
- nullosk_free,
- nullosk_enable_key_layout,
- nullosk_create_activation_parameters,
- nullosk_write_message,
- nullosk_write_initial_message,
- nullosk_start,
- nullosk_lifecycle,
- nullosk_get_text_buf,
- "null"
-};
diff --git a/osk/drivers/ps3_osk.c b/osk/drivers/ps3_osk.c
deleted file mode 100644
index 94d4ae15c0..0000000000
--- a/osk/drivers/ps3_osk.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#include
-#include
-#include
-#include
-
-typedef struct ps3_osk
-{
- unsigned int osk_memorycontainer;
- wchar_t init_message[CELL_OSKDIALOG_STRING_SIZE + 1];
- wchar_t message[CELL_OSKDIALOG_STRING_SIZE + 1];
- wchar_t text_buf[CELL_OSKDIALOG_STRING_SIZE + 1];
- uint32_t flags;
- sys_memory_container_t containerid;
- CellOskDialogPoint pos;
- CellOskDialogInputFieldInfo inputFieldInfo;
- CellOskDialogCallbackReturnParam outputInfo;
- CellOskDialogParam dialogParam;
-} ps3_osk_t;
-
-#define OSK_IN_USE 1
-
-static void *oskutil_init(size_t size)
-{
- ps3_osk_t *params = (ps3_osk_t*)calloc(1, sizeof(*params));
-
- if (!params)
- return NULL;
-
- params->flags = 0;
- if (size)
- params->osk_memorycontainer = size;
- else
- params->osk_memorycontainer = 1024*1024*2;
-
- return params;
-}
-
-static void oskutil_free(void *data)
-{
- ps3_osk_t *params = (ps3_osk_t*)data;
-
- if (params)
- free(params);
-}
-
-static bool oskutil_enable_key_layout(void *data)
-{
- (void)data;
-
- if (pOskSetKeyLayoutOption(CELL_OSKDIALOG_10KEY_PANEL | CELL_OSKDIALOG_FULLKEY_PANEL) < 0)
- return false;
-
- return true;
-}
-
-static void oskutil_create_activation_parameters(void *data)
-{
- ps3_osk_t *params = (ps3_osk_t*)data;
- params->dialogParam.controlPoint.x = 0.0;
- params->dialogParam.controlPoint.y = 0.0;
-
- int32_t LayoutMode = CELL_OSKDIALOG_LAYOUTMODE_X_ALIGN_CENTER | CELL_OSKDIALOG_LAYOUTMODE_Y_ALIGN_TOP;
- pOskSetLayoutMode(LayoutMode);
-
- params->dialogParam.osk_allowed_panels =
- CELL_OSKDIALOG_PANELMODE_ALPHABET |
- CELL_OSKDIALOG_PANELMODE_NUMERAL |
- CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH |
- CELL_OSKDIALOG_PANELMODE_ENGLISH;
-
- params->dialogParam.firstViewPanel = CELL_OSKDIALOG_PANELMODE_ENGLISH;
- params->dialogParam.osk_prohibit_flags = 0;
-}
-
-static void oskutil_write_message(void *data, const void *data_msg)
-{
- ps3_osk_t *params = (ps3_osk_t*)data;
- const wchar_t *msg = (const wchar_t*)data_msg;
- params->inputFieldInfo.osk_inputfield_message = (uint16_t*)msg;
-}
-
-static void oskutil_write_initial_message(void *data, const void *data_msg)
-{
- ps3_osk_t *params = (ps3_osk_t*)data;
- const wchar_t *msg = (const wchar_t*)data_msg;
- params->inputFieldInfo.osk_inputfield_starttext = (uint16_t*)msg;
-}
-
-static bool oskutil_start(void *data)
-{
- ps3_osk_t *params = (ps3_osk_t*)data;
-
- if (params->flags & OSK_IN_USE)
- {
- RARCH_WARN("OSK util already initialized and in use\n");
- return true;
- }
-
- if (sys_memory_container_create(¶ms->containerid, params->osk_memorycontainer) < 0)
- goto do_deinit;
-
- params->outputInfo.osk_callback_return_param = CELL_OSKDIALOG_INPUT_FIELD_RESULT_OK;
- params->outputInfo.osk_callback_num_chars = 256;
- params->outputInfo.osk_callback_return_string = (uint16_t *)params->text_buf;
-
- memset(params->text_buf, 0, sizeof(*params->text_buf));
-
- params->inputFieldInfo.osk_inputfield_max_length = CELL_OSKDIALOG_STRING_SIZE;
-
- oskutil_create_activation_parameters(params);
-
- if (!oskutil_enable_key_layout(params))
- return (false);
-
- if (pOskLoadAsync(params->containerid, ¶ms->dialogParam, ¶ms->inputFieldInfo) < 0)
- goto do_deinit;
-
- params->flags |= OSK_IN_USE;
-
- return true;
-
-do_deinit:
- RARCH_ERR("Could not properly initialize OSK util.\n");
- return false;
-}
-
-static void *oskutil_get_text_buf(void *data)
-{
- ps3_osk_t *osk = (ps3_osk_t*)data;
- return osk->text_buf;
-}
-
-static void oskutil_lifecycle(void *data, uint64_t status)
-{
- ps3_osk_t *osk = (ps3_osk_t*)data;
-
- switch (status)
- {
- case CELL_SYSUTIL_OSKDIALOG_LOADED:
- break;
- case CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED:
- RARCH_LOG("CELL_SYSUTIL_OSKDIALOG_INPUT_CANCELED.\n");
- pOskAbort(); //fall-through
- case CELL_SYSUTIL_OSKDIALOG_FINISHED:
- if (status == CELL_SYSUTIL_OSKDIALOG_FINISHED)
- RARCH_LOG("CELL_SYSUTIL_OSKDIALOG_FINISHED.\n");
-
- pOskUnloadAsync(&osk->outputInfo);
-
- if (osk->outputInfo.result == CELL_OSKDIALOG_INPUT_FIELD_RESULT_OK)
- {
- RARCH_LOG("Setting MODE_OSK_ENTRY_SUCCESS.\n");
- /* TODO */
- }
- else
- {
- RARCH_LOG("Setting MODE_OSK_ENTRY_FAIL.\n");
- /* TODO */
- }
-
- osk->flags &= ~OSK_IN_USE;
- break;
- case CELL_SYSUTIL_OSKDIALOG_UNLOADED:
- RARCH_LOG("CELL_SYSUTIL_OSKDIALOG_UNLOADED.\n");
- sys_memory_container_destroy(osk->containerid);
- break;
- }
-}
-
-input_osk_driver_t input_ps3_osk = {
- oskutil_init,
- oskutil_free,
- oskutil_enable_key_layout,
- oskutil_create_activation_parameters,
- oskutil_write_message,
- oskutil_write_initial_message,
- oskutil_start,
- oskutil_lifecycle,
- oskutil_get_text_buf,
- "ps3"
-};
diff --git a/osk/osk_driver.c b/osk/osk_driver.c
deleted file mode 100644
index 5a52179107..0000000000
--- a/osk/osk_driver.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#include
-#include
-#include "osk_driver.h"
-#include "../driver.h"
-#include "../general.h"
-
-static const input_osk_driver_t *osk_drivers[] = {
-#ifdef __CELLOS_LV2__
- &input_ps3_osk,
-#endif
- &input_null_osk,
- NULL,
-};
-
-/**
- * osk_driver_find_handle:
- * @idx : index of driver to get handle to.
- *
- * Returns: handle to OSK driver at index. Can be NULL
- * if nothing found.
- **/
-const void *osk_driver_find_handle(int idx)
-{
- const void *drv = osk_drivers[idx];
- if (!drv)
- return NULL;
- return drv;
-}
-
-/**
- * osk_driver_find_ident:
- * @idx : index of driver to get handle to.
- *
- * Returns: Human-readable identifier of OSK driver at index. Can be NULL
- * if nothing found.
- **/
-const char *osk_driver_find_ident(int idx)
-{
- const input_osk_driver_t *drv = osk_drivers[idx];
- if (!drv)
- return NULL;
- return drv->ident;
-}
-
-/**
- * config_get_osk_driver_options:
- *
- * Get an enumerated list of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- *
- * Returns: string listing of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- **/
-const char* config_get_osk_driver_options(void)
-{
- union string_list_elem_attr attr;
- unsigned i;
- char *options = NULL;
- int options_len = 0;
- struct string_list *options_l = string_list_new();
-
- attr.i = 0;
-
- for (i = 0; osk_driver_find_handle(i); i++)
- {
- const char *opt = osk_driver_find_ident(i);
- options_len += strlen(opt) + 1;
- string_list_append(options_l, opt, attr);
- }
-
- options = (char*)calloc(options_len, sizeof(char));
-
- string_list_join_concat(options, options_len, options_l, "|");
-
- string_list_free(options_l);
- options_l = NULL;
-
- return options;
-}
-
-/**
- * find_osk_driver:
- *
- * Find OSK (onscreen keyboard) driver.
- **/
-void find_osk_driver(void)
-{
- int i = find_driver_index("osk_driver", g_settings.osk.driver);
- if (i >= 0)
- driver.osk = (const input_osk_driver_t*)osk_driver_find_handle(i);
- else
- {
- unsigned d;
- RARCH_ERR("Couldn't find any OSK driver named \"%s\"\n",
- g_settings.osk.driver);
- RARCH_LOG_OUTPUT("Available OSK drivers are:\n");
- for (d = 0; osk_driver_find_handle(d); d++)
- RARCH_LOG_OUTPUT("\t%s\n", osk_driver_find_ident(d));
-
- RARCH_WARN("Going to default to first OSK driver...\n");
-
- driver.osk = (const input_osk_driver_t*)osk_driver_find_handle(0);
-
- if (!driver.osk)
- rarch_fail(1, "find_osk_driver()");
- }
-}
-
-void init_osk(void)
-{
- /* Resource leaks will follow if osk is initialized twice. */
- if (driver.osk_data)
- return;
-
- find_osk_driver();
-
- /* FIXME - refactor params later based on semantics */
- driver.osk_data = driver.osk->init(0);
-
- if (!driver.osk_data)
- {
- RARCH_ERR("Failed to initialize OSK driver. Will continue without OSK.\n");
- driver.osk_active = false;
- }
-}
-
-void uninit_osk(void)
-{
- if (driver.osk_data && driver.osk && driver.osk->free)
- driver.osk->free(driver.osk_data);
- driver.osk_data = NULL;
-}
diff --git a/osk/osk_driver.h b/osk/osk_driver.h
deleted file mode 100644
index c27f365879..0000000000
--- a/osk/osk_driver.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* RetroArch - A frontend for libretro.
- * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
- * Copyright (C) 2011-2015 - Daniel De Matteis
- *
- * RetroArch is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Found-
- * ation, either version 3 of the License, or (at your option) any later version.
- *
- * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with RetroArch.
- * If not, see .
- */
-
-#ifndef __OSK_DRIVER__H
-#define __OSK_DRIVER__H
-
-#include
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct input_osk_driver
-{
- void *(*init)(size_t size);
- void (*free)(void *data);
- bool (*enable_key_layout)(void *data);
- void (*oskutil_create_activation_parameters)(void *data);
- void (*write_msg)(void *data, const void *msg);
- void (*write_initial_msg)(void *data, const void *msg);
- bool (*start)(void *data);
- void (*lifecycle)(void *data, uint64_t status);
- void *(*get_text_buf)(void *data);
- const char *ident;
-} input_osk_driver_t;
-
-extern input_osk_driver_t input_ps3_osk;
-extern input_osk_driver_t input_null_osk;
-
-/**
- * osk_driver_find_handle:
- * @index : index of driver to get handle to.
- *
- * Returns: handle to OSK driver at index. Can be NULL
- * if nothing found.
- **/
-const void *osk_driver_find_handle(int index);
-
-/**
- * osk_driver_find_ident:
- * @index : index of driver to get handle to.
- *
- * Returns: Human-readable identifier of OSK driver at index. Can be NULL
- * if nothing found.
- **/
-const char *osk_driver_find_ident(int index);
-
-/**
- * config_get_osk_driver_options:
- *
- * Get an enumerated list of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- *
- * Returns: string listing of all OSK (onscreen keyboard) driver names,
- * separated by '|'.
- **/
-const char* config_get_osk_driver_options(void);
-
-/**
- * find_osk_driver:
- *
- * Find OSK (onscreen keyboard) driver.
- **/
-void find_osk_driver(void);
-
-void init_osk(void);
-
-void uninit_osk(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/retroarch.c b/retroarch.c
index 40143e1df8..f8bcfc9147 100644
--- a/retroarch.c
+++ b/retroarch.c
@@ -2669,6 +2669,7 @@ bool rarch_main_command(unsigned cmd)
if (driver.overlay)
input_overlay_free(driver.overlay);
driver.overlay = NULL;
+
memset(&driver.overlay_state, 0, sizeof(driver.overlay_state));
#endif
break;
@@ -2678,14 +2679,52 @@ bool rarch_main_command(unsigned cmd)
if (!*g_settings.input.overlay)
break;
- driver.overlay = input_overlay_new(g_settings.input.overlay, g_settings.input.overlay_enable);
+ driver.overlay = input_overlay_new(g_settings.input.overlay, g_settings.input.overlay_enable,
+ g_settings.input.overlay_opacity, g_settings.input.overlay_scale);
if (!driver.overlay)
RARCH_ERR("Failed to load overlay.\n");
+#endif
+ break;
+ case RARCH_CMD_OSK_OVERLAY_STOP:
+#ifdef HAVE_OVERLAY
+ driver.osk_active = false;
+ g_settings.osk.opacity = 0;
+ input_overlay_set_alpha_mod(driver.osk_overlay,
+ g_settings.osk.opacity);
+#endif
+ break;
+ case RARCH_CMD_OSK_OVERLAY_START:
+#ifdef HAVE_OVERLAY
+ driver.osk_active = true;
+ g_settings.osk.opacity = 100;
+ input_overlay_set_alpha_mod(driver.osk_overlay,
+ g_settings.osk.opacity);
+#endif
+ break;
+ case RARCH_CMD_OSK_OVERLAY_DEINIT:
+#ifdef HAVE_OVERLAY
+ if (driver.osk_active)
+ return false;
+ if (driver.osk_overlay)
+ input_overlay_free(driver.osk_overlay);
+ driver.osk_overlay = NULL;
+#endif
+ break;
+ case RARCH_CMD_OSK_OVERLAY_INIT:
+#ifdef HAVE_OVERLAY
+ if (driver.osk_active)
+ return false;
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
+
+ driver.osk_overlay = input_overlay_new(g_settings.osk.overlay, g_settings.osk.enable,
+ g_settings.osk.opacity, g_settings.osk.scale);
+ if (!driver.osk_overlay)
+ RARCH_ERR("Failed to load OSK overlay.\n");
#endif
break;
case RARCH_CMD_OVERLAY_NEXT:
#ifdef HAVE_OVERLAY
- input_overlay_next(driver.overlay);
+ input_overlay_next(driver.overlay, g_settings.input.overlay_opacity);
#endif
break;
case RARCH_CMD_DSP_FILTER_DEINIT:
diff --git a/retroarch.cfg b/retroarch.cfg
index d6aed9e2a2..63e9f14626 100644
--- a/retroarch.cfg
+++ b/retroarch.cfg
@@ -297,8 +297,6 @@
# Enable or disable the current overlay.
# input_overlay_enable = true
-# If enabled, overrides the input binds with the remapped binds set for the current core.
-# input_remap_binds_enable = true
# Path to input overlay
# input_overlay =
@@ -309,6 +307,23 @@
# Overlay scale
# input_overlay_scale = 1.0
+#### OSK (Onscreen Keyboard) Overlay
+
+# Defines a directory where overlays are kept for easy access.
+# osk_overlay_directory =
+
+# Enable OSK overlay.
+# input_osk_overlay_enable = true
+
+# Path to OSK overlay
+# input_osk_overlay =
+
+# OSK Overlay opacity
+# input_osk_overlay_opacity = 1.0
+
+# OSK Overlay scale
+# input_osk_overlay_scale = 1.0
+
#### Input
# Input driver. Depending on video driver, it might force a different input driver.
@@ -320,6 +335,9 @@
# Path to input remapping file.
# input_remapping_path =
+# If enabled, overrides the input binds with the remapped binds set for the current core.
+# input_remap_binds_enable = true
+
# Maximum amount of users supported by RetroArch.
# input_max_users = 16
diff --git a/retroarch.h b/retroarch.h
index eaf82cca1e..9ddd3c5b39 100644
--- a/retroarch.h
+++ b/retroarch.h
@@ -70,7 +70,15 @@ enum basic_event
RARCH_CMD_OVERLAY_SET_ALPHA_MOD,
/* Cycle to next overlay. */
RARCH_CMD_OVERLAY_NEXT,
+ /* Start OSK overlay. */
+ RARCH_CMD_OSK_OVERLAY_START,
+ /* Stops OSK overlay. */
+ RARCH_CMD_OSK_OVERLAY_STOP,
/* Initializes graphics filter. */
+ RARCH_CMD_OSK_OVERLAY_INIT,
+ /* Initializes overlay. */
+ RARCH_CMD_OSK_OVERLAY_DEINIT,
+ /* Deinitializes overlay. */
RARCH_CMD_DSP_FILTER_INIT,
/* Deinitializes graphics filter. */
RARCH_CMD_DSP_FILTER_DEINIT,
diff --git a/settings.c b/settings.c
index d4529898ad..f8e318d244 100644
--- a/settings.c
+++ b/settings.c
@@ -290,26 +290,6 @@ const char *config_get_default_menu(void)
}
#endif
-/**
- * config_get_default_osk:
- *
- * Gets default OSK driver.
- *
- * Returns: Default OSK driver.
- **/
-const char *config_get_default_osk(void)
-{
- switch (OSK_DEFAULT_DRIVER)
- {
- case OSK_PS3:
- return "ps3";
- default:
- break;
- }
-
- return "null";
-}
-
/**
* config_get_default_camera:
*
@@ -376,7 +356,6 @@ static void config_set_defaults(void)
#endif
const char *def_camera = config_get_default_camera();
const char *def_location = config_get_default_location();
- const char *def_osk = config_get_default_osk();
if (def_camera)
strlcpy(g_settings.camera.driver,
@@ -384,9 +363,6 @@ static void config_set_defaults(void)
if (def_location)
strlcpy(g_settings.location.driver,
def_location, sizeof(g_settings.location.driver));
- if (def_osk)
- strlcpy(g_settings.osk.driver,
- def_osk, sizeof(g_settings.osk.driver));
if (def_video)
strlcpy(g_settings.video.driver,
def_video, sizeof(g_settings.video.driver));
@@ -677,6 +653,19 @@ static void config_set_defaults(void)
g_extern.overlay_dir,
"gamepads/retropad/retropad.cfg",
sizeof(g_settings.input.overlay));
+#endif
+ }
+
+ if (*g_defaults.osk_overlay_dir)
+ {
+ fill_pathname_expand_special(g_extern.osk_overlay_dir,
+ g_defaults.osk_overlay_dir, sizeof(g_extern.osk_overlay_dir));
+#ifdef RARCH_MOBILE
+ if (!*g_settings.input.overlay)
+ fill_pathname_join(g_settings.osk.overlay,
+ g_extern.osk_overlay_dir,
+ "overlays/keyboards/US-101/US-101.cfg",
+ sizeof(g_settings.osk.overlay));
#endif
}
#endif
@@ -1362,6 +1351,15 @@ static bool config_load_file(const char *path, bool set_defaults)
CONFIG_GET_BOOL(input.overlay_enable, "input_overlay_enable");
CONFIG_GET_FLOAT(input.overlay_opacity, "input_overlay_opacity");
CONFIG_GET_FLOAT(input.overlay_scale, "input_overlay_scale");
+
+ CONFIG_GET_PATH_EXTERN(osk_overlay_dir, "osk_overlay_directory");
+ if (!strcmp(g_extern.osk_overlay_dir, "default"))
+ *g_extern.osk_overlay_dir = '\0';
+
+ CONFIG_GET_PATH(osk.overlay, "input_osk_overlay");
+ CONFIG_GET_BOOL(osk.enable, "input_osk_overlay_enable");
+ CONFIG_GET_FLOAT(osk.opacity, "input_osk_overlay_opacity");
+ CONFIG_GET_FLOAT(osk.scale, "input_osk_overlay_scale");
#endif
CONFIG_GET_BOOL(rewind_enable, "rewind_enable");
@@ -1985,6 +1983,15 @@ bool config_save_file(const char *path)
g_settings.input.overlay_opacity);
config_set_float(conf, "input_overlay_scale",
g_settings.input.overlay_scale);
+
+ config_set_path(conf, "osk_overlay_directory",
+ *g_extern.osk_overlay_dir ? g_extern.osk_overlay_dir : "default");
+ config_set_path(conf, "input_osk_overlay", g_settings.input.overlay);
+ config_set_bool(conf, "input_osk_overlay_enable", g_settings.osk.enable);
+ config_set_float(conf, "input_osk_overlay_opacity",
+ g_settings.osk.opacity);
+ config_set_float(conf, "input_osk_overlay_scale",
+ g_settings.osk.scale);
#endif
config_set_path(conf, "video_font_path", g_settings.video.font_path);
diff --git a/settings_data.c b/settings_data.c
index 0583cd373e..6e671715a0 100644
--- a/settings_data.c
+++ b/settings_data.c
@@ -3311,6 +3311,19 @@ static void load_content_change_handler(void *data)
rarch_main_command(RARCH_CMD_LOAD_CONTENT);
}
+static void osk_overlay_enable_toggle_change_handler(void *data)
+{
+ rarch_setting_t *setting = (rarch_setting_t *)data;
+
+ if (!setting)
+ return;
+
+ if (setting->value.boolean)
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_INIT);
+ else
+ rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
+}
+
static void overlay_enable_toggle_change_handler(void *data)
{
rarch_setting_t *setting = (rarch_setting_t *)data;
@@ -5117,26 +5130,6 @@ static bool setting_data_append_list_input_options(
}
END_SUB_GROUP(list, list_info);
}
- START_SUB_GROUP(
- list,
- list_info,
- "Onscreen Keyboard",
- group_info.name,
- subgroup_info);
-
- CONFIG_BOOL(
- g_settings.osk.enable,
- "osk_enable",
- "Onscreen Keyboard Enable",
- false,
- "OFF",
- "ON",
- group_info.name,
- subgroup_info.name,
- general_write_handler,
- general_read_handler);
-
- END_SUB_GROUP(list, list_info);
START_SUB_GROUP(
list,
@@ -5234,6 +5227,50 @@ static bool setting_data_append_list_overlay_options(
return true;
}
+static bool setting_data_append_list_osk_overlay_options(
+ rarch_setting_t **list,
+ rarch_setting_info_t *list_info)
+{
+#ifdef HAVE_OVERLAY
+ rarch_setting_group_info_t group_info;
+ rarch_setting_group_info_t subgroup_info;
+
+ START_GROUP(group_info, "Onscreen Keyboard Overlay Options");
+ START_SUB_GROUP(list, list_info, "State", group_info.name, subgroup_info);
+
+ CONFIG_BOOL(
+ g_settings.osk.enable,
+ "input_osk_overlay_enable",
+ "OSK Overlay Enable",
+ true,
+ "OFF",
+ "ON",
+ group_info.name,
+ subgroup_info.name,
+ general_write_handler,
+ general_read_handler);
+ (*list)[list_info->index - 1].change_handler = osk_overlay_enable_toggle_change_handler;
+
+ CONFIG_PATH(
+ g_settings.osk.overlay,
+ "input_osk_overlay",
+ "OSK Overlay Preset",
+ g_extern.osk_overlay_dir,
+ group_info.name,
+ subgroup_info.name,
+ general_write_handler,
+ general_read_handler);
+ settings_list_current_add_values(list, list_info, "cfg");
+ settings_list_current_add_cmd(list, list_info, RARCH_CMD_OSK_OVERLAY_INIT);
+ settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_EMPTY);
+
+ END_SUB_GROUP(list, list_info);
+ END_GROUP(list, list_info);
+#endif
+
+ return true;
+}
+
static bool setting_data_append_list_menu_options(
rarch_setting_t **list,
rarch_setting_info_t *list_info)
@@ -5981,6 +6018,21 @@ static bool setting_data_append_list_path_options(
list,
list_info,
SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION);
+
+ CONFIG_DIR(
+ g_extern.osk_overlay_dir,
+ "osk_overlay_directory",
+ "OSK Overlay Directory",
+ g_defaults.osk_overlay_dir,
+ "",
+ group_info.name,
+ subgroup_info.name,
+ general_write_handler,
+ general_read_handler);
+ settings_data_list_current_add_flags(
+ list,
+ list_info,
+ SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION);
#endif
CONFIG_DIR(
@@ -6239,6 +6291,12 @@ rarch_setting_t *setting_data_new(unsigned mask)
if (!setting_data_append_list_overlay_options(&list, list_info))
goto error;
}
+
+ if (mask & SL_FLAG_OSK_OVERLAY_OPTIONS)
+ {
+ if (!setting_data_append_list_osk_overlay_options(&list, list_info))
+ goto error;
+ }
if (mask & SL_FLAG_MENU_OPTIONS)
{
diff --git a/settings_list.h b/settings_list.h
index ce62ea47b0..09a5fb542b 100644
--- a/settings_list.h
+++ b/settings_list.h
@@ -70,17 +70,18 @@ enum setting_list_flags
SL_FLAG_AUDIO_OPTIONS = (1 << 6),
SL_FLAG_INPUT_OPTIONS = (1 << 7),
SL_FLAG_OVERLAY_OPTIONS = (1 << 8),
- SL_FLAG_MENU_OPTIONS = (1 << 9),
- SL_FLAG_UI_OPTIONS = (1 << 10),
- SL_FLAG_CORE_MANAGER_OPTIONS = (1 << 11),
- SL_FLAG_NETPLAY_OPTIONS = (1 << 12),
- SL_FLAG_USER_OPTIONS = (1 << 13),
- SL_FLAG_PATH_OPTIONS = (1 << 14),
- SL_FLAG_PRIVACY_OPTIONS = (1 << 15),
- SL_FLAG_PLAYLIST_OPTIONS = (1 << 16),
- SL_FLAG_ARCHIVE_OPTIONS = (1 << 17),
- SL_FLAG_PATCH_OPTIONS = (1 << 18),
- SL_FLAG_ALL = (1 << 19),
+ SL_FLAG_OSK_OVERLAY_OPTIONS = (1 << 9),
+ SL_FLAG_MENU_OPTIONS = (1 << 10),
+ SL_FLAG_UI_OPTIONS = (1 << 11),
+ SL_FLAG_CORE_MANAGER_OPTIONS = (1 << 12),
+ SL_FLAG_NETPLAY_OPTIONS = (1 << 13),
+ SL_FLAG_USER_OPTIONS = (1 << 14),
+ SL_FLAG_PATH_OPTIONS = (1 << 15),
+ SL_FLAG_PRIVACY_OPTIONS = (1 << 16),
+ SL_FLAG_PLAYLIST_OPTIONS = (1 << 17),
+ SL_FLAG_ARCHIVE_OPTIONS = (1 << 18),
+ SL_FLAG_PATCH_OPTIONS = (1 << 19),
+ SL_FLAG_ALL = (1 << 20),
};
#define SL_FLAG_ALL_SETTINGS (SL_FLAG_ALL - SL_FLAG_MAIN_MENU)