comparison 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
comparison
equal deleted inserted replaced
1594:137dbd05ceab 1595:360d5bab199f
246 warning("Failed to create save directory %s\n", save_dir); 246 warning("Failed to create save directory %s\n", save_dir);
247 } 247 }
248 return save_dir; 248 return save_dir;
249 } 249 }
250 250
251 void setup_saves(system_media *media, rom_info *info, system_header *context) 251 void setup_saves(system_media *media, system_header *context)
252 { 252 {
253 static uint8_t persist_save_registered; 253 static uint8_t persist_save_registered;
254 rom_info *info = &context->info;
254 char *save_dir = get_save_dir(info->is_save_lock_on ? media->chain : media); 255 char *save_dir = get_save_dir(info->is_save_lock_on ? media->chain : media);
255 char const *parts[] = {save_dir, PATH_SEP, info->save_type == SAVE_I2C ? "save.eeprom" : info->save_type == SAVE_NOR ? "save.nor" : "save.sram"}; 256 char const *parts[] = {save_dir, PATH_SEP, info->save_type == SAVE_I2C ? "save.eeprom" : info->save_type == SAVE_NOR ? "save.nor" : "save.sram"};
256 free(save_filename); 257 free(save_filename);
257 save_filename = alloc_concat_m(3, parts); 258 save_filename = alloc_concat_m(3, parts);
258 if (info->is_save_lock_on) { 259 if (info->is_save_lock_on) {
279 } 280 }
280 281
281 void apply_updated_config(void) 282 void apply_updated_config(void)
282 { 283 {
283 render_config_updated(); 284 render_config_updated();
285 if (current_system && current_system->config_updated) {
286 current_system->config_updated(current_system);
287 }
284 } 288 }
285 289
286 static void on_drag_drop(const char *filename) 290 static void on_drag_drop(const char *filename)
287 { 291 {
288 if (current_system) { 292 if (current_system) {
375 stype = detect_system_type(&cart); 379 stype = detect_system_type(&cart);
376 } 380 }
377 if (stype == SYSTEM_UNKNOWN) { 381 if (stype == SYSTEM_UNKNOWN) {
378 fatal_error("Failed to detect system type for %s\n", path); 382 fatal_error("Failed to detect system type for %s\n", path);
379 } 383 }
380 rom_info info;
381 //allocate new system context 384 //allocate new system context
382 game_system = alloc_config_system(stype, &cart, opts, force_region, &info); 385 game_system = alloc_config_system(stype, &cart, opts, force_region);
383 if (!game_system) { 386 if (!game_system) {
384 fatal_error("Failed to configure emulated machine for %s\n", path); 387 fatal_error("Failed to configure emulated machine for %s\n", path);
385 } 388 }
386 if (menu_system) { 389 if (menu_system) {
387 menu_system->next_context = game_system; 390 menu_system->next_context = game_system;
388 } 391 }
389 game_system->next_context = menu_system; 392 game_system->next_context = menu_system;
390 setup_saves(&cart, &info, game_system); 393 setup_saves(&cart, game_system);
391 update_title(info.name); 394 update_title(game_system->info.name);
392 free(info.name);
393 } 395 }
394 396
395 int main(int argc, char ** argv) 397 int main(int argc, char ** argv)
396 { 398 {
397 set_exe_str(argv[0]); 399 set_exe_str(argv[0]);
611 stype = detect_system_type(&cart); 613 stype = detect_system_type(&cart);
612 } 614 }
613 if (stype == SYSTEM_UNKNOWN) { 615 if (stype == SYSTEM_UNKNOWN) {
614 fatal_error("Failed to detect system type for %s\n", romfname); 616 fatal_error("Failed to detect system type for %s\n", romfname);
615 } 617 }
616 rom_info info; 618 current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region);
617 current_system = alloc_config_system(stype, &cart, menu ? 0 : opts, force_region, &info);
618 if (!current_system) { 619 if (!current_system) {
619 fatal_error("Failed to configure emulated machine for %s\n", romfname); 620 fatal_error("Failed to configure emulated machine for %s\n", romfname);
620 } 621 }
621 622
622 setup_saves(&cart, &info, current_system); 623 setup_saves(&cart, current_system);
623 update_title(info.name); 624 update_title(current_system->info.name);
624 free(info.name);
625 if (menu) { 625 if (menu) {
626 menu_system = current_system; 626 menu_system = current_system;
627 } else { 627 } else {
628 game_system = current_system; 628 game_system = current_system;
629 } 629 }