@@ -7,7 +7,7 @@ var _config_changed := false
7
7
var _old_config : Dictionary
8
8
9
9
# Games directory
10
- var config_version : int = 1
10
+ var config_version : int = 2
11
11
var is_first_time : bool = true : set = _set_is_first_time
12
12
var games_dir : String = FileUtils .get_home_dir () + "/ROMS" : set = _set_games_dir
13
13
var current_theme : String = "default" : set = _set_current_theme
@@ -203,9 +203,17 @@ func _set_fullscreen(_fullscreen):
203
203
mark_for_saving ()
204
204
fullscreen = _fullscreen
205
205
206
+ if _should_save :
207
+ var mode := DisplayServer .WINDOW_MODE_EXCLUSIVE_FULLSCREEN if fullscreen else DisplayServer .WINDOW_MODE_WINDOWED
208
+ _handle_internal_config ("display" , "window/size/mode" , mode )
209
+
206
210
func _set_vsync (_vsync ):
207
211
mark_for_saving ()
208
212
vsync = _vsync
213
+
214
+ if _should_save :
215
+ var mode := DisplayServer .VSYNC_ENABLED if vsync else DisplayServer .VSYNC_DISABLED
216
+ _handle_internal_config ("display" , "window/vsync/vsync_mode" , mode )
209
217
210
218
func _set_render_resolution (_render_resolution ):
211
219
mark_for_saving ()
@@ -343,6 +351,8 @@ func load_config_from_path(path: String) -> int:
343
351
344
352
_should_save = false
345
353
for key in _keys :
354
+ # Config version should not be loaded
355
+ if key == KEY_CONFIG_VERSION : continue
346
356
if _old_config .has (key ):
347
357
set (key , _old_config [key ])
348
358
else :
@@ -459,15 +469,43 @@ func process_raw_config_changes(config: Dictionary):
459
469
var version := _get_stored_version (config )
460
470
while version < config_version :
461
471
_should_save = true
472
+ _config_changed = true
462
473
_handle_config_update (config , version )
463
474
version += 1
464
475
465
476
func _handle_config_update (config : Dictionary , version : int ):
466
477
match version :
478
+ 1 :
479
+ # Some configs are now stored in Godot format, allowing some
480
+ # properties to be set on launch time (e.g. fullscreen)
481
+ _set_fullscreen (fullscreen )
482
+ _set_vsync (vsync )
483
+ # Manually set these properties one last time, in order to
484
+ # be completely transparent to the user
485
+ DisplayServer .window_set_mode (
486
+ DisplayServer .WINDOW_MODE_EXCLUSIVE_FULLSCREEN if (RetroHubConfig .config .fullscreen )
487
+ else DisplayServer .WINDOW_MODE_WINDOWED
488
+ )
489
+ DisplayServer .window_set_vsync_mode (
490
+ DisplayServer .VSYNC_ENABLED if (RetroHubConfig .config .vsync )
491
+ else DisplayServer .VSYNC_DISABLED )
467
492
0 :
468
493
# First config version; RetroHub port from Godot 3 to Godot 4
469
494
# Input remaps have to be reset
470
495
config [KEY_INPUT_KEY_MAP ] = input_key_map
471
496
config [KEY_CUSTOM_INPUT_REMAP ] = custom_input_remap
472
497
config [KEY_INPUT_CONTROLLER_MAP ] = input_controller_map
473
498
RetroHubUI .call_deferred ("show_warning" , "The following settings had to be reset due to incompatible changes in RetroHub:\n \n - Keyboard/controller remaps\n - Controller custom layout\n \n Please reconfigure these in the Settings menu if desired." )
499
+
500
+ func _handle_internal_config (section : String , key : String , value : Variant ) -> void :
501
+ var internal_config_file : String = ProjectSettings .get ("application/config/project_settings_override" )
502
+ if not internal_config_file or internal_config_file .is_empty ():
503
+ push_error ("Internal config file path not found!" )
504
+ return
505
+ var internal_config := ConfigFile .new ()
506
+ if FileAccess .file_exists (internal_config_file ) and internal_config .load (internal_config_file ):
507
+ push_error ("Failed loading internal config file!" )
508
+ return
509
+ internal_config .set_value (section , key , value )
510
+ if internal_config .save (internal_config_file ):
511
+ push_error ("Failed saving internal config file!" )
0 commit comments