mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-18 03:30:18 +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)
|
setup_ok_cb (GtkWidget *but, GtkWidget *win)
|
||||||
{
|
{
|
||||||
PreferencesPersistenceResult save_result;
|
PreferencesPersistenceResult save_result;
|
||||||
|
struct zoitechatprefs old_prefs;
|
||||||
char buffer[192];
|
char buffer[192];
|
||||||
|
|
||||||
theme_preferences_stage_commit ();
|
memcpy (&old_prefs, &prefs, sizeof (prefs));
|
||||||
|
theme_preferences_stage_apply ();
|
||||||
setup_apply (&setup_prefs);
|
setup_apply (&setup_prefs);
|
||||||
save_result = preferences_persistence_save_all ();
|
save_result = preferences_persistence_save_all ();
|
||||||
gtk_widget_destroy (win);
|
|
||||||
if (save_result.success)
|
if (save_result.success)
|
||||||
|
{
|
||||||
|
theme_preferences_stage_commit ();
|
||||||
|
gtk_widget_destroy (win);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy (&prefs, &old_prefs, sizeof (prefs));
|
||||||
|
theme_preferences_stage_discard ();
|
||||||
|
|
||||||
if (save_result.partial_failure)
|
if (save_result.partial_failure)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -188,12 +188,21 @@ theme_preferences_stage_begin (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
theme_preferences_stage_commit (void)
|
theme_preferences_stage_apply (void)
|
||||||
{
|
{
|
||||||
if (!theme_preferences_stage.active)
|
if (!theme_preferences_stage.active)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
theme_preferences_stage_sync_runtime_to_staged ();
|
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));
|
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);
|
gboolean *color_change_flag);
|
||||||
void theme_preferences_apply_to_session (session_gui *gui, InputStyle *input_style);
|
void theme_preferences_apply_to_session (session_gui *gui, InputStyle *input_style);
|
||||||
void theme_preferences_stage_begin (void);
|
void theme_preferences_stage_begin (void);
|
||||||
|
void theme_preferences_stage_apply (void);
|
||||||
void theme_preferences_stage_commit (void);
|
void theme_preferences_stage_commit (void);
|
||||||
void theme_preferences_stage_discard (void);
|
void theme_preferences_stage_discard (void);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user