From 3562f3e4990f5ba8ccdb343227832f657821a4cf Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Sun, 12 Oct 2014 01:39:13 +0200
Subject: [PATCH] (menu_entries_cbs.c) - Cleanups

---
 frontend/menu/backend/menu_common_backend.c |  8 +---
 frontend/menu/menu_entries_cbs.c            | 47 +++++++++++++++------
 2 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c
index dcef9f929e..7844883233 100644
--- a/frontend/menu/backend/menu_common_backend.c
+++ b/frontend/menu/backend/menu_common_backend.c
@@ -185,7 +185,8 @@ static int menu_setting_ok_toggle(unsigned type,
       const char *dir, const char *label,
       unsigned action)
 {
-   menu_file_list_cbs_t *cbs = file_list_get_actiondata_at_offset(driver.menu->selection_buf,
+   menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
+      file_list_get_actiondata_at_offset(driver.menu->selection_buf,
          driver.menu->selection_ptr);
 
    if (cbs && cbs->action_ok)
@@ -218,11 +219,6 @@ static int menu_setting_ok_toggle(unsigned type,
       }
       return 0;
    }
-#ifdef HAVE_SHADER_MANAGER
-   else if (!strcmp(label, "video_shader_preset_save_as"))
-      menu_key_start_line(driver.menu, "Preset Filename",
-            label, st_string_callback);
-#endif
    else if (type == MENU_SETTINGS_CUSTOM_BIND_DEFAULT_ALL)
    {
       unsigned i;
diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c
index 79954b973d..54234d31f2 100644
--- a/frontend/menu/menu_entries_cbs.c
+++ b/frontend/menu/menu_entries_cbs.c
@@ -14,17 +14,16 @@
  */
 
 #include "menu_common.h"
+#include "menu_input_line_cb.h"
 #include "menu_entries.h"
 #include "menu_shader.h"
 #include "backend/menu_backend.h"
 
-/* TODO - return with error values. */
-
 static int action_ok_push_content_list(const char *path,
       const char *label, unsigned type, size_t index)
 {
    if (!driver.menu)
-      return 0;
+      return -1;
 
    menu_entries_push(driver.menu->menu_stack,
          g_settings.menu_content_directory, label, MENU_FILE_DIRECTORY,
@@ -36,7 +35,7 @@ static int action_ok_push_history_or_path_list(const char *path,
       const char *label, unsigned type, size_t index)
 {
    if (!driver.menu)
-      return 0;
+      return -1;
 
    menu_entries_push(driver.menu->menu_stack,
          "", label, type, driver.menu->selection_ptr);
@@ -50,18 +49,22 @@ static int action_ok_shader_apply_changes(const char *path,
    return 0;
 }
 
-void menu_entries_cbs_init(void *data,
-      const char *path, const char *label,
-      unsigned type, size_t index)
+static int action_ok_shader_preset_save_as(const char *path,
+      const char *label, unsigned type, size_t index)
 {
-   menu_file_list_cbs_t *cbs = NULL;
-   file_list_t *list = (file_list_t*)data;
+   if (!driver.menu)
+      return -1;
 
-   if (!list)
-      return;
+   menu_key_start_line(driver.menu, "Preset Filename",
+         label, st_string_callback);
+   return 0;
+}
 
-   cbs = (menu_file_list_cbs_t*)list->list[index].actiondata;
+/* Bind the OK callback function */
 
+static void menu_entries_cbs_init_bind_ok(menu_file_list_cbs_t *cbs,
+      const char *path, const char *label, unsigned type, size_t index)
+{
    if (!cbs)
       return;
 
@@ -78,4 +81,24 @@ void menu_entries_cbs_init(void *data,
       cbs->action_ok = action_ok_push_history_or_path_list;
    else if (!strcmp(label, "shader_apply_changes"))
       cbs->action_ok = action_ok_shader_apply_changes;
+   else if (!strcmp(label, "video_shader_preset_save_as"))
+      cbs->action_ok = action_ok_shader_preset_save_as;
+}
+
+void menu_entries_cbs_init(void *data,
+      const char *path, const char *label,
+      unsigned type, size_t index)
+{
+   menu_file_list_cbs_t *cbs = NULL;
+   file_list_t *list = (file_list_t*)data;
+
+   if (!list)
+      return;
+
+   cbs = (menu_file_list_cbs_t*)list->list[index].actiondata;
+
+   if (cbs)
+   {
+      menu_entries_cbs_init_bind_ok(cbs, path, label, type, index);
+   }
 }