mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-17 19:20:20 +00:00
refactor: setup OK acts transactional now; apply staged theme before save, roll back on fail
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user