From ead88eebfe193aa128b8a413c81ab2dd98ccea84 Mon Sep 17 00:00:00 2001
From: libretroadmin <reallibretroretroarch@gmail.com>
Date: Sat, 6 May 2023 07:39:20 +0200
Subject: [PATCH] (Menu) Get rid of a bunch of useless wrpaper function calls

---
 menu/cbs/menu_cbs_right.c    |  19 +++--
 menu/cbs/menu_cbs_sublabel.c |   6 +-
 menu/drivers/ozone.c         | 156 ++++++++++++++++++++---------------
 menu/drivers/xmb.c           | 102 ++++++++++++++---------
 menu/menu_driver.c           |   7 +-
 menu/menu_entries.h          |   2 +-
 6 files changed, 174 insertions(+), 118 deletions(-)

diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c
index d049400f04..57952a6c2c 100644
--- a/menu/cbs/menu_cbs_right.c
+++ b/menu/cbs/menu_cbs_right.c
@@ -238,24 +238,27 @@ static int action_right_scroll(unsigned type, const char *label,
 
    if (menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, &scroll_accel))
    {
-      size_t selection           = menu_navigation_get_selection();
+      struct menu_state *menu_st = menu_state_get_ptr();
+      menu_list_t *menu_list     = menu_st->entries.list;
+      size_t selection           = menu_st->selection_ptr;
       unsigned scroll_speed      = (unsigned)((MAX(scroll_accel, 2) - 2) / 4 + 1);
       unsigned fast_scroll_speed = 10 * scroll_speed;
+      size_t entries_end         = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
 
-      if (selection + fast_scroll_speed < (menu_entries_get_size()))
+      if (selection + fast_scroll_speed < entries_end)
       {
-         size_t idx  = selection + fast_scroll_speed;
-
-         menu_navigation_set_selection(idx);
-         menu_driver_navigation_set(true);
+         size_t idx             = selection + fast_scroll_speed;
+         menu_st->selection_ptr = idx;
+         if (menu_st->driver_ctx->navigation_set)
+            menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
       }
       else
       {
-         if ((menu_entries_get_size() > 0))
+         if (entries_end > 0)
             menu_driver_ctl(MENU_NAVIGATION_CTL_SET_LAST, NULL);
       }
 #ifdef HAVE_AUDIOMIXER
-      if (selection != menu_navigation_get_selection()) 
+      if (selection != menu_st->selection_ptr) 
          audio_driver_mixer_play_scroll_sound(false);
 #endif
    }
diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c
index 0703ac8c68..18c4427957 100644
--- a/menu/cbs/menu_cbs_sublabel.c
+++ b/menu/cbs/menu_cbs_sublabel.c
@@ -1763,12 +1763,14 @@ static int action_bind_sublabel_playlist_entry(
       char *s, size_t len)
 {
    size_t _len;
-   size_t list_size                          = menu_entries_get_size();
+   struct menu_state    *menu_st             = menu_state_get_ptr();
+   menu_list_t *menu_list                    = menu_st->entries.list;
+   size_t list_size                          = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
    playlist_t *playlist                      = NULL;
    const struct playlist_entry *entry        = NULL;
    size_t playlist_index                     = i;
 #ifdef HAVE_OZONE
-   const char *menu_ident                    = menu_driver_ident();
+   const char *menu_ident                    = (menu_st->driver_ctx && menu_st->driver_ctx->ident) ? menu_st->driver_ctx->ident : NULL;
 #endif
    settings_t *settings                      = config_get_ptr();
    bool playlist_show_sublabels              = settings->bools.playlist_show_sublabels;
diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c
index 2ee6896322..af99524861 100644
--- a/menu/drivers/ozone.c
+++ b/menu/drivers/ozone.c
@@ -4034,7 +4034,9 @@ static void linebreak_after_colon(char (*str)[255])
 static void ozone_update_content_metadata(ozone_handle_t *ozone)
 {
    const char *core_name             = NULL;
-   size_t selection                  = menu_navigation_get_selection();
+   struct menu_state *menu_st        = menu_state_get_ptr();
+   menu_list_t *menu_list            = menu_st->entries.list;
+   size_t selection                  = menu_st->selection_ptr;
    playlist_t *playlist              = playlist_get_cached();
    settings_t *settings              = config_get_ptr();
    bool scroll_content_metadata      = settings->bools.ozone_scroll_content_metadata;
@@ -4081,8 +4083,8 @@ static void ozone_update_content_metadata(ozone_handle_t *ozone)
       const char *core_label             = NULL;
       const struct playlist_entry *entry = NULL;
       ssize_t playlist_index             = selection;
-      size_t list_size                   = menu_entries_get_size();
-      file_list_t *list                  = menu_entries_get_selection_buf_ptr(0);
+      size_t list_size                   = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+      file_list_t *list                  = MENU_LIST_GET_SELECTION(menu_list, 0);
       bool content_runtime_log           = settings->bools.content_runtime_log;
       bool content_runtime_log_aggr      = settings->bools.content_runtime_log_aggregate;
 
@@ -4263,7 +4265,8 @@ static void ozone_tab_set_selection(void *data)
       size_t tab_selection = ozone->tab_selection[ozone->categories_selection_ptr];
       if (tab_selection)
       {
-         menu_navigation_set_selection(tab_selection);
+         struct menu_state *menu_st = menu_state_get_ptr();
+         menu_st->selection_ptr     = tab_selection;
          ozone_selection_changed(ozone, false);
       }
    }
@@ -4422,6 +4425,8 @@ static void ozone_list_cache(
    float scale_factor;
    unsigned first             = 0;
    unsigned last              = 0;
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
    file_list_t *selection_buf = NULL;
    ozone_handle_t *ozone      = (ozone_handle_t*)data;
 
@@ -4440,8 +4445,8 @@ static void ozone_list_cache(
    /* Deep copy visible elements */
    video_driver_get_size(NULL, &video_info_height);
    y                          = ozone->dimensions.header_height + ozone->dimensions.entry_padding_vertical;
-   entries_end                = menu_entries_get_size();
-   selection_buf              = menu_entries_get_selection_buf_ptr(0);
+   entries_end                = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+   selection_buf              = MENU_LIST_GET_SELECTION(menu_list, 0);
    bottom_boundary            = video_info_height - ozone->dimensions.header_height - ozone->dimensions.footer_height;
 
    for (i = 0; i < entries_end; i++)
@@ -4479,8 +4484,10 @@ static void ozone_change_tab(
       enum msg_hash_enums tab,
       enum menu_settings_type type)
 {
-   file_list_t *menu_stack    = menu_entries_get_menu_stack_ptr(0);
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
+   file_list_t *menu_stack    = MENU_LIST_GET(menu_list, 0);
+   file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
    size_t stack_size          = menu_stack->size;
 
    if (menu_stack->list[stack_size - 1].label)
@@ -5258,8 +5265,10 @@ static void ozone_update_scroll(
    gfx_animation_ctx_entry_t entry;
    float new_scroll = 0, entries_middle;
    float bottom_boundary, current_selection_middle_onscreen;
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
-   uintptr_t tag              = (uintptr_t) selection_buf;
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
+   file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
+   uintptr_t tag              = (uintptr_t)selection_buf;
 
    video_driver_get_size(NULL, &video_info_height);
 
@@ -5332,10 +5341,12 @@ static void ozone_compute_entries_position(
       bool menu_show_sublabels,
       size_t entries_end)
 {
+   size_t i;
    /* Compute entries height and adjust scrolling if needed */
    unsigned video_info_height;
    unsigned video_info_width;
-   size_t i;
+   struct menu_state *menu_st    = menu_state_get_ptr();
+   menu_list_t *menu_list        = menu_st->entries.list;
    file_list_t *selection_buf    = NULL;
    int entry_padding             = ozone_get_entries_padding(ozone);
    float scale_factor            = ozone->last_scale_factor;
@@ -5354,7 +5365,7 @@ static void ozone_compute_entries_position(
 
    menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &i);
 
-   selection_buf                 = menu_entries_get_selection_buf_ptr(0);
+   selection_buf                 = MENU_LIST_GET_SELECTION(menu_list, 0);
 
    video_driver_get_size(&video_info_width, &video_info_height);
 
@@ -7023,7 +7034,9 @@ static void ozone_hide_fullscreen_thumbnails(ozone_handle_t *ozone, bool animate
 static void ozone_show_fullscreen_thumbnails(ozone_handle_t *ozone)
 {
    gfx_animation_ctx_entry_t animation_entry;
-   file_list_t *selection_buf         = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st         = menu_state_get_ptr();
+   menu_list_t *menu_list             = menu_st->entries.list;
+   file_list_t *selection_buf         = MENU_LIST_GET_SELECTION(menu_list, 0);
    uintptr_t alpha_tag                = (uintptr_t)&ozone->animations.fullscreen_thumbnail_alpha;
    uintptr_t scroll_tag               = (uintptr_t)selection_buf;
 
@@ -7462,6 +7475,8 @@ error:
 static void ozone_set_thumbnail_content(void *data, const char *s)
 {
    ozone_handle_t *ozone      = (ozone_handle_t*)data;
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
 
    if (!ozone)
       return;
@@ -7471,9 +7486,9 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
       /* Playlist content */
       if (string_is_empty(s))
       {
-         size_t selection      = menu_navigation_get_selection();
-         size_t list_size      = menu_entries_get_size();
-         file_list_t *list     = menu_entries_get_selection_buf_ptr(0);
+         size_t selection      = menu_st->selection_ptr;
+         size_t list_size      = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+         file_list_t *list     = MENU_LIST_GET_SELECTION(menu_list, 0);
 
          /* Get playlist index corresponding
           * to the selected entry */
@@ -7513,7 +7528,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
 
          MENU_ENTRY_INITIALIZE(entry);
          entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
-         menu_entry_get(&entry, 0, menu_navigation_get_selection(), NULL, true);
+         menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true);
 
          if (!string_is_empty(entry.path))
             gfx_thumbnail_set_content(ozone->thumbnail_path_data, entry.path);
@@ -7530,7 +7545,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
 
          MENU_ENTRY_INITIALIZE(entry);
          entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
-         menu_entry_get(&entry, 0, menu_navigation_get_selection(), NULL, true);
+         menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true);
 
          if (menu_explore_set_playlist_thumbnail(entry.type, ozone->thumbnail_path_data) >= 0)
             ozone->flags |=  OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
@@ -7547,8 +7562,8 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
    else if (string_is_equal(s, "imageviewer"))
    {
       /* Filebrowser image updates */
-      size_t selection           = menu_navigation_get_selection();
-      file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
+      size_t selection           = menu_st->selection_ptr;
+      file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
       ozone_node_t *node         = (ozone_node_t*)selection_buf->list[selection].userdata;
 
       if (node)
@@ -7583,8 +7598,8 @@ static bool INLINE ozone_category_onscreen(
       ozone_handle_t *ozone,
       size_t idx)
 {
-   return (idx >= ozone->first_onscreen_category) &&
-          (idx <= ozone->last_onscreen_category);
+   return    (idx >= ozone->first_onscreen_category)
+          && (idx <= ozone->last_onscreen_category);
 }
 
 /* If current category is on screen, returns its
@@ -7609,25 +7624,21 @@ static void ozone_auto_select_onscreen_entry(
       ozone_handle_t *ozone,
       enum ozone_onscreen_entry_position_type target_entry)
 {
-   size_t selection = 0;
-
+   struct menu_state *menu_st = menu_state_get_ptr();
    /* Update selection index */
    switch (target_entry)
    {
       case OZONE_ONSCREEN_ENTRY_FIRST:
-         selection = ozone->first_onscreen_entry;
+         menu_st->selection_ptr = ozone->first_onscreen_entry;
          break;
       case OZONE_ONSCREEN_ENTRY_LAST:
-         selection = ozone->last_onscreen_entry;
+         menu_st->selection_ptr = ozone->last_onscreen_entry;
          break;
       case OZONE_ONSCREEN_ENTRY_CENTRE:
       default:
-         selection = (ozone->first_onscreen_entry >> 1) + (ozone->last_onscreen_entry >> 1);
+         menu_st->selection_ptr = (ozone->first_onscreen_entry >> 1) + (ozone->last_onscreen_entry >> 1);
          break;
    }
-
-   /* Apply new selection */
-   menu_navigation_set_selection(selection);
 }
 
 static bool INLINE ozone_metadata_override_available(ozone_handle_t *ozone, settings_t *settings)
@@ -7643,8 +7654,8 @@ static bool INLINE ozone_metadata_override_available(ozone_handle_t *ozone, sett
     * only OZONE_FLAG_IS_PLAYLIST will be evaluated,
     * so this isn't too much of a performance hog... */
    return (
-            (ozone->flags   & OZONE_FLAG_IS_PLAYLIST) ||
-            (ozone->flags   & OZONE_FLAG_IS_EXPLORE_LIST)
+               (ozone->flags   & OZONE_FLAG_IS_PLAYLIST)
+            || (ozone->flags   & OZONE_FLAG_IS_EXPLORE_LIST)
          )
          && (ozone->show_thumbnail_bar)
          && (settings->uints.menu_left_thumbnails)
@@ -7930,22 +7941,24 @@ static enum menu_action ozone_parse_menu_entry_action(
       bool ozone_collapse_sidebar,
       enum menu_action action)
 {
-   settings_t *settings          = config_get_ptr();
    uintptr_t tag;
    int new_selection;
-   enum menu_action new_action   = action;
-   file_list_t *selection_buf    = NULL;
-   unsigned horizontal_list_size = 0;
-   bool is_current_entry_settings;
    size_t selection;
    size_t selection_total;
+   bool is_current_entry_settings = false;
+   struct menu_state *menu_st     = menu_state_get_ptr();
+   menu_list_t *menu_list         = menu_st->entries.list;
+   settings_t *settings           = config_get_ptr();
+   enum menu_action new_action    = action;
+   file_list_t *selection_buf     = NULL;
+   unsigned horizontal_list_size  = 0;
 
    /* We have to override the thumbnail stream
     * delay when opening the thumbnail sidebar;
     * ensure that the proper value is restored
     * whenever the user performs regular navigation */
-   if ((action != MENU_ACTION_NOOP) &&
-       (ozone->thumbnails.stream_delay != OZONE_THUMBNAIL_STREAM_DELAY))
+   if (   (action != MENU_ACTION_NOOP)
+       && (ozone->thumbnails.stream_delay != OZONE_THUMBNAIL_STREAM_DELAY))
    {
       ozone->thumbnails.stream_delay = OZONE_THUMBNAIL_STREAM_DELAY;
       gfx_thumbnail_set_stream_delay(ozone->thumbnails.stream_delay);
@@ -7957,10 +7970,10 @@ static enum menu_action ozone_parse_menu_entry_action(
       ozone->flags           |=  OZONE_FLAG_MSGBOX_STATE;
    else
       ozone->flags           &= ~OZONE_FLAG_MSGBOX_STATE;
-   selection_buf              = menu_entries_get_selection_buf_ptr(0);
+   selection_buf              = MENU_LIST_GET_SELECTION(menu_list, 0);
    tag                        = (uintptr_t)selection_buf;
-   selection                  = menu_navigation_get_selection();
-   selection_total            = menu_entries_get_size();
+   selection                  = menu_st->selection_ptr;
+   selection_total            = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
 
    /* Don't wiggle left or right if the current entry is a setting. This is
       partially wrong because some settings don't use left and right to change their value, such as
@@ -8016,7 +8029,7 @@ static enum menu_action ozone_parse_menu_entry_action(
             if (!(ozone->flags & OZONE_FLAG_EMPTY_PLAYLIST))
                ozone_leave_sidebar(ozone, ozone_collapse_sidebar, tag);
 
-            menu_navigation_set_selection(0);
+            menu_st->selection_ptr = 0;
             ozone_selection_changed(ozone, false);
             break;
          }
@@ -8149,7 +8162,8 @@ static enum menu_action ozone_parse_menu_entry_action(
           * is off screen, auto select *centre* item */
          if (ozone->flags & OZONE_FLAG_CURSOR_MODE)
             if (!OZONE_ENTRY_ONSCREEN(ozone, selection))
-               ozone_auto_select_onscreen_entry(ozone, OZONE_ONSCREEN_ENTRY_CENTRE);
+               ozone_auto_select_onscreen_entry(ozone,
+                     OZONE_ONSCREEN_ENTRY_CENTRE);
          ozone->flags &= ~OZONE_FLAG_CURSOR_MODE;
          break;
       case MENU_ACTION_LEFT:
@@ -8202,9 +8216,9 @@ static enum menu_action ozone_parse_menu_entry_action(
                   && !is_current_entry_settings)
                ozone_start_cursor_wiggle(ozone, MENU_ACTION_DOWN);
 
-            if (     (ozone->flags2 & OZONE_FLAG2_SHOW_FULLSCREEN_THUMBNAILS)
-                  && (  (ozone->flags & OZONE_FLAG_IS_PLAYLIST) ||
-                        (ozone->is_quick_menu && !menu_is_running_quick_menu())))
+            if (         (ozone->flags2 & OZONE_FLAG2_SHOW_FULLSCREEN_THUMBNAILS)
+                  && (   (ozone->flags  & OZONE_FLAG_IS_PLAYLIST)
+                      || (ozone->is_quick_menu && !menu_is_running_quick_menu())))
                return MENU_ACTION_NOOP;
 
             break;
@@ -8284,7 +8298,7 @@ static enum menu_action ozone_parse_menu_entry_action(
             {
                /* Jump to first item on Main Menu */
                ozone->tab_selection[ozone->categories_selection_ptr] = 0;
-               menu_navigation_set_selection(0);
+               menu_st->selection_ptr = 0;
             }
 
             new_action = MENU_ACTION_ACCESSIBILITY_SPEAK_TITLE;
@@ -8373,7 +8387,8 @@ static enum menu_action ozone_parse_menu_entry_action(
           * is off screen, auto select *last* item */
          if (ozone->flags & OZONE_FLAG_CURSOR_MODE)
             if (!OZONE_ENTRY_ONSCREEN(ozone, selection))
-               ozone_auto_select_onscreen_entry(ozone, OZONE_ONSCREEN_ENTRY_LAST);
+               ozone_auto_select_onscreen_entry(ozone,
+                     OZONE_ONSCREEN_ENTRY_LAST);
          ozone->flags &= ~OZONE_FLAG_CURSOR_MODE;
          break;
       case MENU_ACTION_SCROLL_DOWN:
@@ -8435,7 +8450,8 @@ static enum menu_action ozone_parse_menu_entry_action(
           * is off screen, auto select *first* item */
          if (ozone->flags & OZONE_FLAG_CURSOR_MODE)
             if (!OZONE_ENTRY_ONSCREEN(ozone, selection))
-               ozone_auto_select_onscreen_entry(ozone, OZONE_ONSCREEN_ENTRY_FIRST);
+               ozone_auto_select_onscreen_entry(ozone,
+                     OZONE_ONSCREEN_ENTRY_FIRST);
          ozone->flags &= ~OZONE_FLAG_CURSOR_MODE;
          break;
 
@@ -9673,7 +9689,9 @@ static void ozone_render(void *data,
     * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323#c87) */
    volatile float scale_factor;
    volatile float thumbnail_scale_factor;
-   unsigned entries_end               = (unsigned)menu_entries_get_size();
+   struct menu_state *menu_st         = menu_state_get_ptr();
+   menu_list_t *menu_list             = menu_st->entries.list;
+   unsigned entries_end               = (unsigned)MENU_LIST_GET_SELECTION(menu_list, 0)->size;
    bool pointer_enabled               = false;
    unsigned language                  = *msg_hash_get_uint(MSG_HASH_USER_LANGUAGE);
    ozone_handle_t *ozone              = (ozone_handle_t*)data;
@@ -9791,7 +9809,7 @@ static void ozone_render(void *data,
    if (pointer_enabled)
    {
       bool pointer_in_sidebar, last_pointer_in_sidebar;
-      file_list_t *selection_buf    = menu_entries_get_selection_buf_ptr(0);
+      file_list_t *selection_buf    = MENU_LIST_GET_SELECTION(menu_list, 0);
       uintptr_t     animation_tag   = (uintptr_t)selection_buf;
 
       int entry_padding             = (ozone->depth == 1)
@@ -9995,7 +10013,7 @@ static void ozone_render(void *data,
                         && (ozone->pointer.y_accel < ozone->last_scale_factor)
                         && (ozone->pointer.y_accel > -ozone->last_scale_factor))
                   {
-                     menu_navigation_set_selection(i);
+                     menu_st->selection_ptr = i;
 
                      /* If this is a playlist, must update thumbnails */
                      if (    ((ozone->flags & OZONE_FLAG_IS_PLAYLIST) && (ozone->depth == 1 || ozone->depth == 4))
@@ -10024,7 +10042,7 @@ static void ozone_render(void *data,
                      && (ozone->pointer.press_duration >= MENU_INPUT_PRESS_TIME_SHORT)
                      && (i != ozone->selection))
                {
-                  menu_navigation_set_selection(i);
+                  menu_st->selection_ptr = i;
 
                   /* If we are currently in the sidebar, leave it */
                   if (ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR)
@@ -11114,8 +11132,10 @@ static void ozone_get_thumbnail_system(void *data, char *s, size_t len)
 
 static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
 {
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
-   size_t new_selection       = menu_navigation_get_selection();
+	struct menu_state *menu_st = menu_state_get_ptr();
+	menu_list_t *menu_list     = menu_st->entries.list;
+   file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
+   size_t new_selection       = menu_st->selection_ptr;
    ozone_node_t *node         = (ozone_node_t*)selection_buf->list[new_selection].userdata;
 
    if (!node)
@@ -11126,7 +11146,7 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
       menu_entry_t entry;
       unsigned entry_type;
       uintptr_t tag                = (uintptr_t)selection_buf;
-      size_t selection             = menu_navigation_get_selection();
+      size_t selection             = new_selection;
 
       MENU_ENTRY_INITIALIZE(entry);
       menu_entry_get(&entry, 0, selection, NULL, true);
@@ -11769,6 +11789,8 @@ static void ozone_populate_entries(
    bool want_thumbnail_bar              = false;
    bool fullscreen_thumbnails_available = false;
    bool animate                         = false;
+   struct menu_state *menu_st           = menu_state_get_ptr();
+   menu_list_t *menu_list               = menu_st->entries.list;
    settings_t *settings                 = NULL;
    ozone_handle_t *ozone                = (ozone_handle_t*) data;
 
@@ -11811,7 +11833,7 @@ static void ozone_populate_entries(
              * playlist, return to the sidebar */
             if (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR))
             {
-               file_list_t *list       = menu_entries_get_selection_buf_ptr(0);
+               file_list_t *list       = MENU_LIST_GET_SELECTION(menu_list, 0);
                uintptr_t animation_tag = (uintptr_t)&ozone->animations.cursor_alpha;
                bool goto_sidebar       = false;
 
@@ -12079,8 +12101,10 @@ static bool ozone_menu_init_list(void *data)
    menu_displaylist_info_t info;
 
    settings_t *settings         = config_get_ptr();
-   file_list_t *menu_stack      = menu_entries_get_menu_stack_ptr(0);
-   file_list_t *selection_buf   = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st   = menu_state_get_ptr();
+   menu_list_t *menu_list       = menu_st->entries.list;
+   file_list_t *menu_stack      = MENU_LIST_GET(menu_list, 0);
+   file_list_t *selection_buf   = MENU_LIST_GET_SELECTION(menu_list, 0);
 
    menu_displaylist_info_init(&info);
 
@@ -12251,10 +12275,12 @@ static int ozone_pointer_up(void *userdata,
 {
    unsigned width, height;
    ozone_handle_t *ozone             = (ozone_handle_t*)userdata;
-   file_list_t *selection_buf        = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st        = menu_state_get_ptr();
+   menu_list_t *menu_list            = menu_st->entries.list;
+   file_list_t *selection_buf        = MENU_LIST_GET_SELECTION(menu_list, 0);
    uintptr_t sidebar_tag             = (uintptr_t)selection_buf;
-   size_t selection                  = menu_navigation_get_selection();
-   size_t entries_end                = menu_entries_get_size();
+   size_t selection                  = menu_st->selection_ptr;
+   size_t entries_end                = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
    settings_t *settings              = config_get_ptr();
    bool ozone_collapse_sidebar       = settings->bools.ozone_collapse_sidebar;
 
@@ -12298,7 +12324,7 @@ static int ozone_pointer_up(void *userdata,
                /* If current 'pointer' item is not active,
                 * activate it immediately */
                if (ptr != selection)
-                  menu_navigation_set_selection(ptr);
+                  menu_st->selection_ptr = ptr;
 
                /* If we are not currently in the sidebar,
                 * perform a MENU_ACTION_SELECT on currently
@@ -12326,7 +12352,7 @@ static int ozone_pointer_up(void *userdata,
                menu_input_set_pointer_y_accel(0.0f);
 
                if (ptr != selection)
-                  menu_navigation_set_selection(ptr);
+                  menu_st->selection_ptr = ptr;
 
                /* If we are currently in the sidebar, leave it */
                if (ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR)
diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c
index 3bbafae0bb..d9dbf6e096 100644
--- a/menu/drivers/xmb.c
+++ b/menu/drivers/xmb.c
@@ -847,8 +847,10 @@ static void *xmb_list_get_entry(void *data,
    {
       case MENU_LIST_PLAIN:
          {
-            file_list_t *menu_stack = menu_entries_get_menu_stack_ptr(0);
-            list_size  = menu_entries_get_stack_size(0);
+            struct menu_state *menu_st = menu_state_get_ptr();
+            menu_list_t *menu_list     = menu_st->entries.list;
+            file_list_t *menu_stack    = MENU_LIST_GET_SELECTION(menu_list,  0);
+            list_size                  = MENU_LIST_GET_STACK_SIZE(menu_list, 0);
             if (i < list_size)
                return (void*)&menu_stack->list[i];
          }
@@ -1381,11 +1383,13 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
       /* Playlist content */
       if (string_is_empty(s))
       {
-         size_t selection      = menu_navigation_get_selection();
-         size_t list_size      = menu_entries_get_size();
-         file_list_t *list     = menu_entries_get_selection_buf_ptr(0);
-         bool playlist_valid   = false;
-         size_t playlist_index = selection;
+         size_t selection             = menu_navigation_get_selection();
+         struct menu_state *menu_st   = menu_state_get_ptr();
+         menu_list_t *menu_list       = menu_st->entries.list;
+         size_t list_size             = (unsigned)MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+         file_list_t *list            = MENU_LIST_GET_SELECTION(menu_list, 0);
+         bool playlist_valid          = false;
+         size_t playlist_index        = selection;
 
          /* Get playlist index corresponding
           * to the selected entry */
@@ -1442,8 +1446,10 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
    {
       /* Filebrowser image updates */
       menu_entry_t entry;
+      struct menu_state *menu_st = menu_state_get_ptr();
+      menu_list_t *menu_list     = menu_st->entries.list;
       size_t selection           = menu_navigation_get_selection();
-      file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
+      file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
       xmb_node_t *node           = (xmb_node_t*)selection_buf->list[selection].userdata;
 
       if (node)
@@ -1514,14 +1520,16 @@ static void xmb_selection_pointer_changed(
    uintptr_t tag;
    size_t num                 = 0;
    int threshold              = 0;
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
-   size_t selection           = menu_navigation_get_selection();
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
+   file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
+   size_t selection           = menu_st->selection_ptr;
 
    if (!xmb)
       return;
 
-   end       = (unsigned)menu_entries_get_size();
-   threshold = xmb->icon_size * 10;
+   end                        = (unsigned)MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+   threshold                  = xmb->icon_size * 10;
 
    video_driver_get_size(NULL, &height);
 
@@ -2150,8 +2158,10 @@ static void xmb_tab_set_selection(void *data)
 static void xmb_list_switch(xmb_handle_t *xmb)
 {
    gfx_animation_ctx_entry_t anim_entry;
+   struct menu_state *menu_st       = menu_state_get_ptr();
+   menu_list_t *menu_list           = menu_st->entries.list;
    int dir                          = -1;
-   file_list_t *selection_buf       = menu_entries_get_selection_buf_ptr(0);
+   file_list_t *selection_buf       = MENU_LIST_GET_SELECTION(menu_list, 0);
    size_t selection                 = 0;
    settings_t       *settings       = config_get_ptr();
    bool xmb_main_tab_selected       = false;
@@ -2175,7 +2185,7 @@ static void xmb_list_switch(xmb_handle_t *xmb)
       xmb_tab_set_selection(xmb);
 
    /* Selection needs to be taken after tab restore */
-   selection               = menu_navigation_get_selection();
+   selection               = menu_st->selection_ptr;
 
    xmb_list_switch_horizontal_list(xmb);
 
@@ -2610,7 +2620,9 @@ static void xmb_list_open(xmb_handle_t *xmb)
       menu_xmb_animation_opening_main_menu =
       settings->uints.menu_xmb_animation_opening_main_menu;
    int                    dir = 0;
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list     = menu_st->entries.list;
+   file_list_t *selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
    size_t selection           = menu_navigation_get_selection();
 
    xmb->depth                 = (int)
@@ -2679,13 +2691,15 @@ static void xmb_populate_entries(void *data,
       const char *label, unsigned k)
 {
    unsigned xmb_system_tab, xmb_horizontal_type;
-   xmb_handle_t *xmb    = (xmb_handle_t*)data;
-   settings_t *settings = config_get_ptr();
+   xmb_handle_t *xmb                  = (xmb_handle_t*)data;
+   settings_t *settings               = config_get_ptr();
+   struct menu_state   *menu_st       = menu_state_get_ptr();
+   menu_list_t *menu_list             = menu_st->entries.list;
    bool menu_dynamic_wallpaper_enable =
       settings ? settings->bools.menu_dynamic_wallpaper_enable : false;
-   bool show_entry_idx  = settings ? settings->bools.playlist_show_entry_idx : false;
-   bool was_db_manager_list    = false;
-   unsigned    depth    = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN);
+   bool show_entry_idx                = settings ? settings->bools.playlist_show_entry_idx : false;
+   bool was_db_manager_list           = false;
+   unsigned    depth                  = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN);
    if (!xmb)
       return;
    xmb_system_tab       = xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr);
@@ -2792,7 +2806,7 @@ static void xmb_populate_entries(void *data,
          (xmb->is_playlist || xmb->is_explore_list)))
    {
       size_t entry_idx_selection = menu_navigation_get_selection() + 1;
-      size_t list_size           = menu_entries_get_size();
+      size_t list_size           = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
       unsigned entry_idx_offset  = 0;
 
       if (xmb->is_explore_list)
@@ -4738,11 +4752,13 @@ static void xmb_render(void *data,
     * disables optimisations and removes excess precision
     * (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323#c87) */
    volatile float scale_factor;
-   xmb_handle_t *xmb          = (xmb_handle_t*)data;
-   settings_t *settings       = config_get_ptr();
-   size_t      end            = menu_entries_get_size();
-   gfx_display_t *p_disp      = disp_get_ptr();
-   gfx_animation_t *p_anim    = anim_get_ptr();
+   xmb_handle_t *xmb              = (xmb_handle_t*)data;
+   settings_t *settings           = config_get_ptr();
+   struct menu_state   *menu_st   = menu_state_get_ptr();
+   menu_list_t *menu_list         = menu_st->entries.list;
+   size_t      end                = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
+   gfx_display_t *p_disp          = disp_get_ptr();
+   gfx_animation_t *p_anim        = anim_get_ptr();
 
    if (!xmb)
       return;
@@ -5675,6 +5691,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
    gfx_display_t            *p_disp        = (gfx_display_t*)video_info->disp_userdata;
    gfx_animation_t          *p_anim        = anim_get_ptr();
    gfx_display_ctx_driver_t *dispctx       = p_disp->dispctx;
+   struct menu_state   *menu_st            = menu_state_get_ptr();
+   menu_list_t *menu_list                  = menu_st->entries.list;
    bool input_dialog_display_kb            = menu_input_dialog_get_display_kb();
 
    if (!xmb)
@@ -6297,7 +6315,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
          video_height,
          &mymat);
 
-   selection_buf = menu_entries_get_selection_buf_ptr(0);
+   selection_buf = MENU_LIST_GET_SELECTION(menu_list, 0);
 
    /* List icons */
    xmb_draw_items(
@@ -6527,10 +6545,12 @@ static void xmb_init_scale_mod(void)
 static void xmb_layout(xmb_handle_t *xmb)
 {
    unsigned width, height, i;
-   file_list_t *selection_buf = menu_entries_get_selection_buf_ptr(0);
-   size_t selection           = menu_navigation_get_selection();
-   unsigned current           = (unsigned)selection;
-   unsigned end               = (unsigned)menu_entries_get_size();
+   struct menu_state   *menu_st = menu_state_get_ptr();
+   menu_list_t *menu_list       = menu_st->entries.list;
+   file_list_t *selection_buf   = MENU_LIST_GET_SELECTION(menu_list, 0);
+   size_t selection             = menu_st->selection_ptr;
+   unsigned current             = (unsigned)selection;
+   unsigned end                 = (unsigned)MENU_LIST_GET_SELECTION(menu_list, 0)->size;
 
    video_driver_get_size(&width, &height);
    xmb_init_scale_mod();
@@ -7544,8 +7564,10 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
 {
    size_t stack_size, list_size;
    xmb_handle_t      *xmb         = (xmb_handle_t*)data;
-   file_list_t *menu_stack        = menu_entries_get_menu_stack_ptr(0);
-   file_list_t *selection_buf     = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st     = menu_state_get_ptr();
+   menu_list_t *menu_list         = menu_st->entries.list;
+   file_list_t *menu_stack        = MENU_LIST_GET(menu_list, 0);
+   file_list_t *selection_buf     = MENU_LIST_GET_SELECTION(menu_list, 0);
    size_t selection               = menu_navigation_get_selection();
    settings_t *settings           = config_get_ptr();
    bool menu_horizontal_animation = settings->bools.menu_horizontal_animation;
@@ -8129,8 +8151,10 @@ static bool xmb_menu_init_list(void *data)
    menu_displaylist_info_t info;
 
    settings_t *settings         = config_get_ptr();
-   file_list_t *menu_stack      = menu_entries_get_menu_stack_ptr(0);
-   file_list_t *selection_buf   = menu_entries_get_selection_buf_ptr(0);
+   struct menu_state *menu_st   = menu_state_get_ptr();
+   menu_list_t *menu_list       = menu_st->entries.list;
+   file_list_t *menu_stack      = MENU_LIST_GET(menu_list, 0);
+   file_list_t *selection_buf   = MENU_LIST_GET_SELECTION(menu_list, 0);
 
    menu_displaylist_info_init(&info);
 
@@ -8174,9 +8198,11 @@ static int xmb_pointer_up(void *userdata,
    int16_t margin_top;
    int16_t margin_left;
    int16_t margin_right;
-   xmb_handle_t *xmb      = (xmb_handle_t*)userdata;
-   size_t selection       = menu_navigation_get_selection();
-   unsigned end           = (unsigned)menu_entries_get_size();
+   xmb_handle_t *xmb            = (xmb_handle_t*)userdata;
+   size_t selection             = menu_navigation_get_selection();
+   struct menu_state *menu_st   = menu_state_get_ptr();
+   menu_list_t *menu_list       = menu_st->entries.list;
+   unsigned end                 = (unsigned)MENU_LIST_GET_SELECTION(menu_list, 0)->size;
 
    if (!xmb)
       return -1;
diff --git a/menu/menu_driver.c b/menu/menu_driver.c
index 210543c495..ceb620b1ec 100644
--- a/menu/menu_driver.c
+++ b/menu/menu_driver.c
@@ -5039,7 +5039,7 @@ static const char * msvc_vercode_to_str(const unsigned vercode)
 
 /* Sets 's' to the name of the current core
  * (shown at the top of the UI). */
-int menu_entries_get_core_title(char *s, size_t len)
+void menu_entries_get_core_title(char *s, size_t len)
 {
    struct retro_system_info *system  = &runloop_state_get_ptr()->system.info;
    const char *core_name             = 
@@ -5059,8 +5059,6 @@ int menu_entries_get_core_title(char *s, size_t len)
       snprintf(s + _len, len - _len, " - %s (%s)", core_name, core_version);
    else
       snprintf(s + _len, len - _len, " - %s", core_name);
-
-   return 0;
 }
 
 static bool menu_driver_init_internal(
@@ -8371,13 +8369,14 @@ size_t menu_update_fullscreen_thumbnail_label(
 {
    char tmpstr[64];
    menu_entry_t selected_entry;
+   struct menu_state *menu_st      = &menu_driver_state;
    const char *thumbnail_label     = NULL;
 
    /* > Get menu entry */
    MENU_ENTRY_INITIALIZE(selected_entry);
    selected_entry.flags |= MENU_ENTRY_FLAG_LABEL_ENABLED
                          | MENU_ENTRY_FLAG_RICH_LABEL_ENABLED;
-   menu_entry_get(&selected_entry, 0, menu_navigation_get_selection(), NULL, true);
+   menu_entry_get(&selected_entry, 0, menu_st->selection_ptr, NULL, true);
 
    /* > Get entry label */
    if (!string_is_empty(selected_entry.rich_label))
diff --git a/menu/menu_entries.h b/menu/menu_entries.h
index 2abc9f3ce7..ccad30a0e8 100644
--- a/menu/menu_entries.h
+++ b/menu/menu_entries.h
@@ -166,7 +166,7 @@ typedef struct menu_entry
 
 int menu_entries_get_title(char *title, size_t title_len);
 
-int menu_entries_get_core_title(char *title_msg, size_t title_msg_len);
+void menu_entries_get_core_title(char *title_msg, size_t title_msg_len);
 
 file_list_t *menu_entries_get_selection_buf_ptr(size_t idx);