static const GValue* preset_dict_get_value(GValue *dict, const gchar *key);
static void store_plist(GValue *plist, const gchar *name);
static void store_presets(void);
+static void store_prefs(void);
// This only handle limited depth
GtkTreePath*
ghb_dict_insert(pref_dict, g_strdup(key), ghb_value_dup(value));
}
}
- store_plist(prefsPlist, "preferences");
+ store_prefs();
prefs_modified = FALSE;
}
if (ghb_value_cmp(value, value2) != 0)
{
ghb_dict_insert(dict, g_strdup(key), ghb_value_dup(value));
- store_plist(prefsPlist, "preferences");
+ store_prefs();
prefs_modified = TRUE;
}
}
if (ghb_value_cmp(value, value2) != 0)
{
ghb_dict_insert(dict, g_strdup(key), ghb_value_dup(value));
- store_plist(prefsPlist, "preferences");
+ store_prefs();
prefs_modified = FALSE;
}
}
{
if (prefs_modified)
{
- store_plist(prefsPlist, "preferences");
+ store_prefs();
prefs_modified = FALSE;
}
}
}
ghb_dict_insert(dict,
g_strdup("destination_dir"), ghb_value_dup(ghb_string_value(dir)));
- store_plist(prefsPlist, "preferences");
+ store_prefs();
}
// Read legacy default_preset preference and update accordingly
path = ghb_dict_lookup(dict, "default_preset");
g_free(indices);
}
ghb_dict_remove(dict, "default_preset");
- store_plist(prefsPlist, "preferences");
+ store_prefs();
}
}
}
}
+static guint prefs_timeout_id = 0;
+
+static gboolean
+delayed_store_prefs(gpointer data)
+{
+ store_plist(prefsPlist, "preferences");
+ prefs_timeout_id = 0;
+ return FALSE;
+}
+
static void
store_presets()
{
ghb_value_free(export);
}
+static void
+store_prefs(void)
+{
+ if (prefs_timeout_id != 0)
+ {
+ GMainContext *mc;
+ GSource *source;
+
+ mc = g_main_context_default();
+ source = g_main_context_find_source_by_id(mc, prefs_timeout_id);
+ if (source != NULL)
+ g_source_destroy(source);
+ }
+ prefs_timeout_id = g_timeout_add_seconds(1, (GSourceFunc)delayed_store_prefs, NULL);
+}
+
void
ghb_presets_reload(signal_user_data_t *ud)
{