]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/environment.cpp
fix Gtk warnings about nonzero page_size in spin buttons
[xonotic/netradiant.git] / radiant / environment.cpp
index 16aba7f7098089e52ee18c0d64928fae96d7523a..220a884f8d0a7e74c079bbbfbaaaebc2bc5a2021 100644 (file)
@@ -138,6 +138,10 @@ void gamedetect()
          if(gamedetect_check_game("q2w.game", "default/quake2world.version", NULL, buf, p - buf))
            return;
 
+         // try to detect Warsow installs
+         if(gamedetect_check_game("warsow.game", "basewsw/dedicated_autoexec.cfg", NULL, buf, p - buf))
+           return;
+
          // we found nothing
          // go backwards
          --p;
@@ -163,6 +167,17 @@ const char* environment_get_app_path()
   return app_path.c_str();
 }
 
+bool portable_app_setup()
+{
+       StringOutputStream confdir(256);
+       confdir << app_path.c_str() << "settings/";
+       if(file_exists(confdir.c_str()))
+       {
+               home_path = confdir.c_str();
+               return true;
+       }
+       return false;
+}
 
 #if defined(POSIX)
 
@@ -226,17 +241,19 @@ void environment_init(int argc, char* argv[])
 
   args_init(argc, argv);
 
+  {
+    char real[PATH_MAX];
+    app_path = getexename(real);
+    ASSERT_MESSAGE(!string_empty(app_path.c_str()), "failed to deduce app path");
+  }
+
+  if(!portable_app_setup())
   {
     StringOutputStream home(256);
     home << DirectoryCleaned(g_get_home_dir()) << ".netradiant/";
     Q_mkdir(home.c_str());
     home_path = home.c_str();
   }
-  {
-    char real[PATH_MAX];
-    app_path = getexename(real);
-    ASSERT_MESSAGE(!string_empty(app_path.c_str()), "failed to deduce app path");
-  }
   gamedetect();
 }
 
@@ -248,24 +265,6 @@ void environment_init(int argc, char* argv[])
 {
   args_init(argc, argv);
 
-  {
-    char *appdata = getenv("APPDATA");
-
-    StringOutputStream home(256);
-    if(!appdata || string_empty(appdata))
-    {
-      ERROR_MESSAGE("Application Data folder not available.\n"
-        "Radiant will use C:\\ for user preferences.\n");
-      home << "C:";
-    }
-    else
-    {
-      home << PathCleaned(appdata);
-    }
-    home << "/NetRadiantSettings/";
-    Q_mkdir(home.c_str());
-    home_path = home.c_str();
-  }
   {
     // get path to the editor
     char filename[MAX_PATH+1];
@@ -283,6 +282,25 @@ void environment_init(int argc, char* argv[])
     app << PathCleaned(filename);
     app_path = app.c_str();
   }
+
+  if(!portable_app_setup())
+  {
+    char *appdata = getenv("APPDATA");
+    StringOutputStream home(256);
+    if(!appdata || string_empty(appdata))
+    {
+      ERROR_MESSAGE("Application Data folder not available.\n"
+        "Radiant will use C:\\ for user preferences.\n");
+      home << "C:";
+    }
+    else
+    {
+      home << PathCleaned(appdata);
+    }
+    home << "/NetRadiantSettings/";
+    Q_mkdir(home.c_str());
+    home_path = home.c_str();
+  }
   gamedetect();
 }