Ticket #868: atlas-xdg-2012-03-04.patch

File atlas-xdg-2012-03-04.patch, 3.2 KB (added by leper, 12 years ago)
  • 0ad/source/tools/atlas/AtlasUI/Misc/DLLInterface.cpp

     
    1 /* Copyright (C) 2009 Wildfire Games.
     1/* Copyright (C) 2012 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
    44 * 0 A.D. is free software: you can redistribute it and/or modify
     
    112112    g_HasSetDataDirectory = true;
    113113}
    114114
     115wxString g_ConfigDir;
     116ATLASDLLIMPEXP void Atlas_SetConfigDirectory(const wchar_t* path)
     117{
     118    wxFileName config (path);
     119    g_ConfigDir = config.GetPath(wxPATH_GET_SEPARATOR);
     120}
     121
    115122ATLASDLLIMPEXP void Atlas_StartWindow(const wchar_t* type)
    116123{
    117124    // Initialise libxml2
     
    188195            wxHandleFatalExceptions();
    189196#endif
    190197
     198#ifndef __WXMSW__ // On Windows we use the registry so don't attempt to set the path.
     199        // When launching a standalone executable g_ConfigDir may not be
     200        // set. In this case we default to the XDG base dir spec and use
     201        // 0ad/config/ as the config directory.
     202        wxString configPath;
     203        if (!g_ConfigDir.IsEmpty())
     204            configPath = g_ConfigDir;
     205        else
     206            configPath = (wxGetEnv(_T("XDG_CONFIG_HOME"), NULL)?wxGetenv(_T("XDG_CONFIG_HOME")):wxFileName::GetHomeDir() + _T("/.config")) + _T("/0ad/config/");
     207#endif
     208
    191209        // Initialise the global config file
    192         wxConfigBase::Set(new wxConfig(_T("Atlas Editor"), _T("Wildfire Games")));
     210        wxConfigBase::Set(new wxConfig(_T("Atlas Editor"), _T("Wildfire Games")
     211#ifndef __WXMSW__ // On Windows we use wxRegConfig and setting this changes the Registry key
     212            , configPath + _T("atlas.ini")
     213#endif
     214            ));
    193215
    194216        if (! g_HasSetDataDirectory)
    195217        {
  • 0ad/source/tools/atlas/GameInterface/GameLoop.cpp

     
    5252// Loaded from DLL:
    5353void (*Atlas_StartWindow)(const wchar_t* type);
    5454void (*Atlas_SetDataDirectory)(const wchar_t* path);
     55void (*Atlas_SetConfigDirectory)(const wchar_t* path);
    5556void (*Atlas_SetMessagePasser)(MessagePasser*);
    5657void (*Atlas_GLSetCurrent)(void* cavas);
    5758void (*Atlas_GLSwapBuffers)(void* canvas);
     
    277278        dll.LoadSymbol("Atlas_StartWindow", Atlas_StartWindow);
    278279        dll.LoadSymbol("Atlas_SetMessagePasser", Atlas_SetMessagePasser);
    279280        dll.LoadSymbol("Atlas_SetDataDirectory", Atlas_SetDataDirectory);
     281        dll.LoadSymbol("Atlas_SetConfigDirectory", Atlas_SetConfigDirectory);
    280282        dll.LoadSymbol("Atlas_GLSetCurrent", Atlas_GLSetCurrent);
    281283        dll.LoadSymbol("Atlas_GLSwapBuffers", Atlas_GLSwapBuffers);
    282284        dll.LoadSymbol("Atlas_NotifyEndOfFrame", Atlas_NotifyEndOfFrame);
     
    303305    const Paths paths(args);
    304306    Atlas_SetDataDirectory(paths.RData().string().c_str());
    305307
     308    // Tell Atlas the location of the user config directory
     309    Atlas_SetConfigDirectory(paths.Config().string().c_str());
     310
    306311    // Run the engine loop in a new thread
    307312    pthread_t engineThread;
    308313    pthread_create(&engineThread, NULL, RunEngine, reinterpret_cast<void*>(const_cast<CmdLineArgs*>(&args)));