refactor: setup OK acts transactional now; apply staged theme before save, roll back on fail

This commit is contained in:
2026-03-17 11:01:40 -06:00
parent 0cfb63f301
commit b7e4548d2a
3 changed files with 21 additions and 3 deletions

View File

@@ -2193,14 +2193,22 @@ static void
setup_ok_cb (GtkWidget *but, GtkWidget *win)
{
PreferencesPersistenceResult save_result;
struct zoitechatprefs old_prefs;
char buffer[192];
theme_preferences_stage_commit ();
memcpy (&old_prefs, &prefs, sizeof (prefs));
theme_preferences_stage_apply ();
setup_apply (&setup_prefs);
save_result = preferences_persistence_save_all ();
gtk_widget_destroy (win);
if (save_result.success)
{
theme_preferences_stage_commit ();
gtk_widget_destroy (win);
return;
}
memcpy (&prefs, &old_prefs, sizeof (prefs));
theme_preferences_stage_discard ();
if (save_result.partial_failure)
{

View File

@@ -188,12 +188,21 @@ theme_preferences_stage_begin (void)
}
void
theme_preferences_stage_commit (void)
theme_preferences_stage_apply (void)
{
if (!theme_preferences_stage.active)
return;
theme_preferences_stage_sync_runtime_to_staged ();
}
void
theme_preferences_stage_commit (void)
{
if (!theme_preferences_stage.active)
return;
theme_preferences_stage_apply ();
memset (&theme_preferences_stage, 0, sizeof (theme_preferences_stage));
}

View File

@@ -14,6 +14,7 @@ GtkWidget *theme_preferences_create_color_page (GtkWindow *parent,
gboolean *color_change_flag);
void theme_preferences_apply_to_session (session_gui *gui, InputStyle *input_style);
void theme_preferences_stage_begin (void);
void theme_preferences_stage_apply (void);
void theme_preferences_stage_commit (void);
void theme_preferences_stage_discard (void);