diff blastem.c @ 1595:360d5bab199f

Update controller config when changed in UI without restart
author Michael Pavone <pavone@retrodev.com>
date Fri, 06 Jul 2018 17:39:59 -0700
parents 24508cb54f87
children b7ecd0d6a77b 9b8fe6729877
line wrap: on
line diff
--- a/blastem.c	Fri Jun 29 09:33:23 2018 -0700
+++ b/blastem.c	Fri Jul 06 17:39:59 2018 -0700
@@ -248,9 +248,10 @@
 	return save_dir;
 }
 
-void setup_saves(system_media *media, rom_info *info, system_header *context)
+void setup_saves(system_media *media, system_header *context)
 {
 	static uint8_t persist_save_registered;
+	rom_info *info = &context->info;
 	char *save_dir = get_save_dir(info->is_save_lock_on ? media->chain : media);
 	char const *parts[] = {save_dir, PATH_SEP, info->save_type == SAVE_I2C ? "save.eeprom" : info->save_type == SAVE_NOR ? "save.nor" : "save.sram"};
 	free(save_filename);
@@ -281,6 +282,9 @@
 void apply_updated_config(void)
 {
 	render_config_updated();
+	if (current_system && current_system->config_updated) {
+		current_system->config_updated(current_system);
+	}
 }
 
 static void on_drag_drop(const char *filename)
@@ -377,9 +381,8 @@
 	if (stype == SYSTEM_UNKNOWN) {
 		fatal_error("Failed to detect system type for %s\n", path);
 	}
-	rom_info info;
 	//allocate new system context
-	game_system = alloc_config_system(stype, &cart, opts, force_region, &info);
+	game_system = alloc_config_system(stype, &cart, opts, force_region);
 	if (!game_system) {
 		fatal_error("Failed to configure emulated machine for %s\n", path);
 	}
@@ -387,9 +390,8 @@
 		menu_system->next_context = game_system;
 	}
 	game_system->next_context = menu_system;
-	setup_saves(&cart, &info, game_system);
-	update_title(info.name);
-	free(info.name);
+	setup_saves(&cart, game_system);
+	update_title(game_system->info.name);
 }
 
 int main(int argc, char ** argv)
@@ -613,15 +615,13 @@
 		if (stype == SYSTEM_UNKNOWN) {
 			fatal_error("Failed to detect system type for %s\n", romfname);
 		}
-		rom_info info;
-		current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region, &info);
+		current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region);
 		if (!current_system) {
 			fatal_error("Failed to configure emulated machine for %s\n", romfname);
 		}
 	
-		setup_saves(&cart, &info, current_system);
-		update_title(info.name);
-		free(info.name);
+		setup_saves(&cart, current_system);
+		update_title(current_system->info.name);
 		if (menu) {
 			menu_system = current_system;
 		} else {