@@ -642,11 +642,7 @@ struct ozone_handle
642642 char icons_path [PATH_MAX_LENGTH ];
643643 char icons_path_default [PATH_MAX_LENGTH ];
644644 char tab_path [PATH_MAX_LENGTH ];
645-
646- /* These have to be huge, because runloop_st->name.savestate
647- * has a hard-coded size of (PATH_MAX_LENGTH * 2)... */
648- char savestate_thumbnail_file_path [(PATH_MAX_LENGTH * 2 )];
649- char prev_savestate_thumbnail_file_path [(PATH_MAX_LENGTH * 2 )];
645+ char savestate_thumbnail_file_path [PATH_MAX_LENGTH ];
650646
651647 char thumbnails_left_status_prev ;
652648 char thumbnails_right_status_prev ;
@@ -3855,18 +3851,12 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
38553851{
38563852 settings_t * settings = config_get_ptr ();
38573853 ozone_handle_t * ozone = (ozone_handle_t * )data ;
3858- int state_slot = settings -> ints .state_slot ;
38593854 bool savestate_thumbnail = settings -> bools .savestate_thumbnail_enable ;
3855+ const char * current_path = strdup (ozone -> savestate_thumbnail_file_path );
38603856
38613857 if (!ozone )
38623858 return ;
38633859
3864- /* Cache previous savestate thumbnail path */
3865- strlcpy (
3866- ozone -> prev_savestate_thumbnail_file_path ,
3867- ozone -> savestate_thumbnail_file_path ,
3868- sizeof (ozone -> prev_savestate_thumbnail_file_path ));
3869-
38703860 if (ozone -> flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER_REAL )
38713861 ozone -> flags2 |= OZONE_FLAG2_SELECTION_CORE_IS_VIEWER ;
38723862 else
@@ -3901,9 +3891,9 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
39013891 || string_is_equal (entry .label , msg_hash_to_str (MENU_ENUM_LABEL_LOAD_STATE ))
39023892 || string_is_equal (entry .label , msg_hash_to_str (MENU_ENUM_LABEL_SAVE_STATE )))
39033893 {
3904- size_t _len ;
3905- char path [PATH_MAX_LENGTH * 2 ];
3894+ char path [PATH_MAX_LENGTH ];
39063895 runloop_state_t * runloop_st = runloop_state_get_ptr ();
3896+ int state_slot = settings -> ints .state_slot ;
39073897
39083898 /* State slot dropdown */
39093899 if (string_to_unsigned (entry .label ) == MENU_ENUM_LABEL_STATE_SLOT )
@@ -3912,25 +3902,15 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
39123902 ozone -> flags |= OZONE_FLAG_IS_STATE_SLOT ;
39133903 }
39143904
3915- if (state_slot < 0 )
3916- {
3917- path [0 ] = '\0' ;
3918- _len = fill_pathname_join_delim (path ,
3919- runloop_st -> name .savestate , "auto" , '.' , sizeof (path ));
3920- }
3921- else
3922- {
3923- _len = strlcpy (path , runloop_st -> name .savestate , sizeof (path ));
3924- if (state_slot > 0 )
3925- _len += snprintf (path + _len , sizeof (path ) - _len , "%d" , state_slot );
3926- }
3927-
3928- strlcpy (path + _len , FILE_PATH_PNG_EXTENSION , sizeof (path ) - _len );
3905+ gfx_savestate_thumbnail_get_path (path , sizeof (path ),
3906+ runloop_st -> name .savestate , state_slot );
39293907
3930- strlcpy (
3931- ozone -> savestate_thumbnail_file_path , path ,
3908+ strlcpy (ozone -> savestate_thumbnail_file_path , path ,
39323909 sizeof (ozone -> savestate_thumbnail_file_path ));
39333910
3911+ if (!string_is_equal (current_path , ozone -> savestate_thumbnail_file_path ))
3912+ gfx_thumbnail_reset (& ozone -> thumbnails .savestate );
3913+
39343914 ozone -> flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR
39353915 | OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE ;
39363916
@@ -3960,21 +3940,11 @@ static void ozone_update_savestate_thumbnail_image(void *data)
39603940 /* If path is empty, just reset thumbnail */
39613941 if (string_is_empty (ozone -> savestate_thumbnail_file_path ))
39623942 gfx_thumbnail_reset (& ozone -> thumbnails .savestate );
3963- else
3964- {
3965- /* Only request thumbnail if:
3966- * > Thumbnail has never been loaded *OR*
3967- * > Thumbnail path has changed */
3968- if ( (ozone -> thumbnails .savestate .status == GFX_THUMBNAIL_STATUS_UNKNOWN )
3969- || !string_is_equal (ozone -> savestate_thumbnail_file_path ,
3970- ozone -> prev_savestate_thumbnail_file_path ))
3971- {
3972- gfx_thumbnail_request_file (
3973- ozone -> savestate_thumbnail_file_path ,
3974- & ozone -> thumbnails .savestate ,
3975- thumbnail_upscale_threshold );
3976- }
3977- }
3943+ else if (ozone -> thumbnails .savestate .status == GFX_THUMBNAIL_STATUS_UNKNOWN )
3944+ gfx_thumbnail_request_file (
3945+ ozone -> savestate_thumbnail_file_path ,
3946+ & ozone -> thumbnails .savestate ,
3947+ thumbnail_upscale_threshold );
39783948
39793949 ozone -> thumbnails .savestate .flags |= GFX_THUMB_FLAG_CORE_ASPECT ;
39803950}
@@ -9231,6 +9201,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
92319201
92329202 ozone -> flags |= OZONE_FLAG_FIRST_FRAME ;
92339203
9204+ ozone -> animations .left_thumbnail_alpha = 1.0f ;
92349205 ozone -> animations .sidebar_text_alpha = 1.0f ;
92359206 ozone -> animations .thumbnail_bar_position = 0.0f ;
92369207 ozone -> dimensions_sidebar_width = 0.0f ;
@@ -9243,14 +9214,10 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
92439214 if (!(ozone -> screensaver = menu_screensaver_init ()))
92449215 goto error ;
92459216
9246- ozone -> savestate_thumbnail_file_path [0 ] = '\0' ;
9247- ozone -> prev_savestate_thumbnail_file_path [0 ] = '\0' ;
9248-
92499217 ozone -> animations .fullscreen_thumbnail_alpha = 0.0f ;
92509218 ozone -> fullscreen_thumbnail_selection = 0 ;
92519219 ozone -> fullscreen_thumbnail_label [0 ] = '\0' ;
9252-
9253- ozone -> animations .left_thumbnail_alpha = 1.0f ;
9220+ ozone -> savestate_thumbnail_file_path [0 ] = '\0' ;
92549221
92559222 ozone -> thumbnails .pending = OZONE_PENDING_THUMBNAIL_NONE ;
92569223 ozone -> thumbnails .stream_delay = OZONE_THUMBNAIL_STREAM_DELAY ;
0 commit comments