From 878dc1af925c61d98a9bc612c3950206f6fe4c6c Mon Sep 17 00:00:00 2001
From: mazmazz <mar.marcoz@outlook.com>
Date: Mon, 27 Aug 2018 00:43:25 -0400
Subject: [PATCH] Lazy midi reload support on menu

---
 src/sdl/mixer_sound.c | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/sdl/mixer_sound.c b/src/sdl/mixer_sound.c
index 7b095d4281..a8d936e24c 100644
--- a/src/sdl/mixer_sound.c
+++ b/src/sdl/mixer_sound.c
@@ -77,43 +77,35 @@ static INT32 current_track;
 #endif
 
 #ifdef HAVE_MIXERX
-static void change_midiplayer(void)
+static void Midiplayer_Onchange(void)
 {
+	boolean restart = false;
+
 	if (I_SongType() != MU_MID_EX)
 		return;
 
 	if (Mix_GetMidiPlayer() != cv_midiplayer.value)
 	{
 		Mix_SetMidiPlayer(cv_midiplayer.value);
-		S_Init();
+		restart = true;
 	}
-}
-
-static void change_midisoundfontpath(void)
-{
-	if (I_SongType() != MU_MID_EX)
-		return;
 
 	if (stricmp(Mix_GetSoundFonts(), cv_midisoundfontpath.string))
 	{
 		Mix_SetSoundFonts(cv_midisoundfontpath.string);
-		S_Init();
+		restart = true;
 	}
-}
-
-static void change_miditimiditypath(void)
-{
-	if (I_SongType() != MU_MID_EX)
-		return;
 
 	Mix_Timidity_addToPathList(cv_miditimiditypath.string);
-	S_Init();
+
+	if (restart)
+		S_Start();
 }
 
 static CV_PossibleValue_t midiplayer_cons_t[] = {{MIDI_OPNMIDI, "OPNMIDI"}, {MIDI_Fluidsynth, "Fluidsynth"}, {MIDI_Timidity, "Timidity"}, {MIDI_Native, "Native"}, {0, NULL}};
-consvar_t cv_midiplayer = {"midi_player", "OPNMIDI" /*MIDI_OPNMIDI*/, CV_CALL|CV_SAVE, midiplayer_cons_t, change_midiplayer, 0, NULL, NULL, 0, 0, NULL};
-consvar_t cv_midisoundfontpath = {"midi_soundfont_path", "sf2/soundfont.sf2", CV_CALL|CV_SAVE, NULL, change_midisoundfontpath, 0, NULL, NULL, 0, 0, NULL};
-consvar_t cv_miditimiditypath = {"midi_timidity_path", "./timidity", CV_CALL|CV_SAVE, NULL, change_miditimiditypath, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_midiplayer = {"midi_player", "OPNMIDI" /*MIDI_OPNMIDI*/, CV_CALL|CV_NOINIT|CV_SAVE, midiplayer_cons_t, Midiplayer_Onchange, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_midisoundfontpath = {"midi_soundfont_path", "sf2/soundfont.sf2", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_miditimiditypath = {"midi_timidity_path", "./timidity", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
 #endif
 
 /// ------------------------
-- 
GitLab