Ticket #3446: t3446_catch_SDL_QUIT_v1.patch

File t3446_catch_SDL_QUIT_v1.patch, 2.1 KB (added by elexis, 9 years ago)
  • binaries/data/mods/public/gui/replaymenu/replay_menu.js

    function init()  
    4141
    4242    // By default, sort replays by date in descending order
    4343    Engine.GetGUIObjectByName("replaySelection").selected_column_order = -1;
    4444
    4545    loadReplays();
     46
     47    if (!g_Replays)
     48    {
     49        Engine.SwitchGuiPage("page_pregame.xml");
     50        return;
     51    }
     52
    4653    displayReplayList();
    4754}
    4855
    4956/**
    5057 * Store the list of replays loaded in C++ in g_Replays.
    function init()  
    5259 */
    5360function loadReplays()
    5461{
    5562    g_Replays = Engine.GetReplays();
    5663
     64    if (!g_Replays)
     65        return;
     66
    5767    g_Playernames = [];
    5868    for (let replay of g_Replays)
    5969    {
    6070        // Use time saved in file, otherwise file mod date
    6171        replay.timestamp = replay.attribs.timestamp ? +replay.attribs.timestamp : +replay.filemod_timestamp;
  • source/ps/VisualReplay.cpp

     
    1919
    2020#include "VisualReplay.h"
    2121#include "graphics/GameView.h"
    2222#include "gui/GUIManager.h"
    2323#include "lib/allocators/shared_ptr.h"
     24#include "lib/external_libraries/libsdl.h"
    2425#include "lib/utf8.h"
    2526#include "ps/CLogger.h"
    2627#include "ps/Filesystem.h"
    2728#include "ps/Game.h"
    2829#include "ps/Pyrogenesis.h"
    JS::Value VisualReplay::GetReplays(Scrip  
    5051    JSContext* cx = scriptInterface.GetContext();
    5152    JSAutoRequest rq(cx);
    5253
    5354    u32 i = 0;
    5455    DirectoryNames directories;
     56
     57    SDL_Event event;
    5558    JS::RootedObject replays(cx, JS_NewArrayObject(cx, 0));
     59
    5660    if (GetDirectoryEntries(GetDirectoryName(), NULL, &directories) == INFO::OK)
    5761        for (OsPath& directory : directories)
    5862        {
     63            if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
     64                return JSVAL_NULL;
     65
    5966            JS::RootedValue replayData(cx, LoadReplayData(scriptInterface, directory));
    6067            if (!replayData.isNull())
    6168                JS_SetElement(cx, replays, i++, replayData);
    6269        }
    6370    return JS::ObjectValue(*replays);