diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index bf2b47dc..3f6eb9e7 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -1320,7 +1320,15 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) char*& fname = recent_movie[wParam - MOVIE_FIRST_RECENT_FILE]; if(fname) { - FCEUI_LoadMovie(fname, 1, false, false); + if (!FCEUI_LoadMovie(fname, 1, false, false)) + { + int result = MessageBox(hWnd,"Remove from list?", "Could Not Open Recent File", MB_YESNO); + if (result == IDYES) + { + RemoveRecentItem((wParam - MOVIE_FIRST_RECENT_FILE), recent_movie, MAX_NUMBER_OF_MOVIE_RECENT_FILES); + UpdateRMenu(recentmoviemenu, recent_movie, MENU_MOVIE_RECENT, MOVIE_FIRST_RECENT_FILE); + } + } } } @@ -1752,7 +1760,17 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) case FCEUX_CONTEXT_LOADLASTMOVIE: if(recent_movie[0]) - FCEUI_LoadMovie(recent_movie[0], 1, false, false); + { + if (!FCEUI_LoadMovie(recent_movie[0], 1, false, false)) + { + int result = MessageBox(hWnd,"Remove from list?", "Could Not Open Recent File", MB_YESNO); + if (result == IDYES) + { + RemoveRecentItem(0, recent_movie, MAX_NUMBER_OF_MOVIE_RECENT_FILES); + UpdateRMenu(recentmoviemenu, recent_movie, MENU_MOVIE_RECENT, MOVIE_FIRST_RECENT_FILE); + } + } + } break; //View comments and subtitles diff --git a/src/movie.cpp b/src/movie.cpp index 73b03863..1e129586 100644 --- a/src/movie.cpp +++ b/src/movie.cpp @@ -726,10 +726,10 @@ void MovieData::dumpSavestateTo(std::vector* buf, int compressionLevel) } //begin playing an existing movie -void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe) +bool FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe) { if(!tasedit && !FCEU_IsValidUI(FCEUI_PLAYMOVIE)) - return; + return true; //adelikat: file did not fail to load, so let's return true here, just do nothing assert(fname); @@ -744,10 +744,10 @@ void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _paus strcpy(curMovieFilename, fname); FCEUFILE *fp = FCEU_fopen(fname,0,"rb",0); - if (!fp) return; + if (!fp) return false; if(fp->isArchive() && !_read_only) { FCEU_PrintError("Cannot open a movie in read+write from an archive."); - return; + return true; //adelikat: file did not fail to load, so return true (false is only for file not exist/unable to open errors } #ifdef WIN32 @@ -768,7 +768,7 @@ void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _paus if(currMovieData.savestate.size() != 0) { bool success = MovieData::loadSavestateFrom(&currMovieData.savestate); - if(!success) return; + if(!success) return true; //adelikat: I guess return true here? False is only for a bad movie filename, if it got this far the file was god? } //if there is no savestate, we won't have this crucial piece of information at the start of the movie. @@ -810,6 +810,8 @@ void FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _paus LoggingEnabled = 2; } #endif + + return true; } static void openRecordingMovie(const char* fname) diff --git a/src/movie.h b/src/movie.h index 8cddc411..be919b39 100644 --- a/src/movie.h +++ b/src/movie.h @@ -243,7 +243,7 @@ extern bool autoMovieBackup; bool CheckFileExists(const char* filename); //Receives a filename (fullpath) and checks to see if that file exists void FCEUI_MakeBackupMovie(bool dispMessage); void FCEUI_SaveMovie(const char *fname, EMOVIE_FLAG flags, std::wstring author); -void FCEUI_LoadMovie(const char *fname, bool read_only, bool tasedit, int _stopframe); +bool FCEUI_LoadMovie(const char *fname, bool read_only, bool tasedit, int _stopframe); void FCEUI_MoviePlayFromBeginning(void); void FCEUI_StopMovie(void); bool FCEUI_MovieGetInfo(FCEUFILE* fp, MOVIE_INFO& info, bool skipFrameCount = false);