added using global and personal game controller mapping files
authorHolger Schemel <info@artsoft.org>
Mon, 3 Jul 2017 18:52:19 +0000 (20:52 +0200)
committerHolger Schemel <info@artsoft.org>
Mon, 3 Jul 2017 18:52:19 +0000 (20:52 +0200)
src/libgame/sdl.c
src/libgame/system.h

index d6cf2b1..ee43dc0 100644 (file)
@@ -2833,7 +2833,10 @@ void SDLInitJoysticks()
   static boolean sdl_joystick_subsystem_initialized = FALSE;
   boolean print_warning = !sdl_joystick_subsystem_initialized;
 #if defined(TARGET_SDL2)
-  char *mappings_file = "gamecontrollerdb.txt";
+  char *mappings_file_base = getPath2(options.ro_base_directory,
+                                     GAMECONTROLLER_BASENAME);
+  char *mappings_file_user = getPath2(getUserGameDataDir(),
+                                     GAMECONTROLLER_BASENAME);
   int num_mappings;
 #endif
   int i;
@@ -2855,15 +2858,25 @@ void SDLInitJoysticks()
     }
 
 #if defined(TARGET_SDL2)
-    num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file);
+    num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_base);
 
     if (num_mappings != -1)
-      Error(ERR_INFO, "%d game controller mapping(s) added", num_mappings);
+      Error(ERR_INFO, "%d game controller base mapping(s) added", num_mappings);
     else
-      Error(ERR_WARN, "no game controller mappings found");
+      Error(ERR_WARN, "no game controller base mappings found");
+
+    num_mappings = SDL_GameControllerAddMappingsFromFile(mappings_file_user);
+
+    if (num_mappings != -1)
+      Error(ERR_INFO, "%d game controller user mapping(s) added", num_mappings);
+    else
+      Error(ERR_WARN, "no game controller user mappings found");
 
     Error(ERR_INFO, "%d joystick(s) found:", SDL_NumJoysticks());
 
+    checked_free(mappings_file_base);
+    checked_free(mappings_file_user);
+
     for (i = 0; i < SDL_NumJoysticks(); i++)
     {
       const char *name, *type;
index 3fc4eb6..72a0754 100644 (file)
 #define TAPEFILE_EXTENSION     "tape"
 #define SCOREFILE_EXTENSION    "score"
 
+#define GAMECONTROLLER_BASENAME        "gamecontrollerdb.txt"
+
 #define LOG_OUT_BASENAME       "stdout.txt"
 #define LOG_ERR_BASENAME       "stderr.txt"