summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/trg-preferences-dialog.c28
-rw-r--r--src/trg-prefs.c59
-rw-r--r--src/trg-prefs.h7
3 files changed, 64 insertions, 30 deletions
diff --git a/src/trg-preferences-dialog.c b/src/trg-preferences-dialog.c
index 7b421c9..3e8c307 100644
--- a/src/trg-preferences-dialog.c
+++ b/src/trg-preferences-dialog.c
@@ -96,7 +96,7 @@ static void trg_pref_widget_save(TrgPreferencesDialog *dlg,
static void trg_pref_widget_save_all(TrgPreferencesDialog *dlg) {
TrgPreferencesDialogPrivate *priv = TRG_PREFERENCES_DIALOG_GET_PRIVATE(dlg);
- if (trg_prefs_get_profile_id(priv->prefs) < 0)
+ if (trg_prefs_get_profile(priv->prefs) == NULL)
return;
GList *li;
@@ -377,14 +377,14 @@ static void profile_changed_cb(GtkWidget *w, gpointer data) {
TRG_PREFERENCES_DIALOG_GET_PRIVATE(data);
GtkTreeIter iter;
- gint profile_id;
+ JsonObject *profile;
trg_pref_widget_save_all(TRG_PREFERENCES_DIALOG(data));
gint n_children = gtk_tree_model_iter_n_children(model, NULL);
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(w), &iter)) {
- gtk_tree_model_get(model, &iter, 0, &profile_id, -1);
- trg_prefs_set_profile(priv->prefs, profile_id);
+ gtk_tree_model_get(model, &iter, 0, &profile, -1);
+ trg_prefs_set_profile(priv->prefs, profile);
trg_pref_widget_refresh_all(TRG_PREFERENCES_DIALOG(data));
gtk_widget_set_sensitive(priv->profileDelButton, n_children > 1);
} else {
@@ -415,10 +415,12 @@ static void trg_prefs_profile_combo_populate(TrgPreferencesDialog *dialog,
name_value = _(TRG_PROFILE_NAME_DEFAULT);
}
GtkTreeIter iter;
- gtk_list_store_insert_with_values(store, &iter, INT_MAX, 0, i, 1,
+ gtk_list_store_insert_with_values(store, &iter, INT_MAX, 0, profile, 1,
name_value, -1);
- if (i++ == profile_id)
+ if (i == profile_id)
gtk_combo_box_set_active_iter(combo, &iter);
+
+ i++;
}
gtk_widget_set_sensitive(priv->profileDelButton, g_list_length(profiles) > 1);
@@ -429,7 +431,7 @@ static void trg_prefs_profile_combo_populate(TrgPreferencesDialog *dialog,
static GtkWidget *trg_prefs_profile_combo_new(TrgClient *tc) {
GtkWidget *w;
GtkCellRenderer *r;
- GtkListStore *store = gtk_list_store_new(2, G_TYPE_INT, G_TYPE_STRING);
+ GtkListStore *store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING);
w = gtk_combo_box_new_with_model(GTK_TREE_MODEL(store));
r = gtk_cell_renderer_text_new();
@@ -462,12 +464,12 @@ static void del_profile_cb(GtkWidget *w, gpointer data) {
GtkComboBox *combo = GTK_COMBO_BOX(data);
GtkTreeModel *profileModel = gtk_combo_box_get_model(combo);
GtkTreeIter iter;
- gint profile_id;
+ JsonObject *profile;
if (gtk_combo_box_get_active_iter(combo, &iter)) {
- gtk_tree_model_get(profileModel, &iter, 0, &profile_id, -1);
- trg_prefs_del_profile(prefs, (guint)profile_id);
- trg_prefs_set_profile(prefs, -1);
+ gtk_tree_model_get(profileModel, &iter, 0, &profile, -1);
+ trg_prefs_del_profile(prefs, profile);
+ trg_prefs_set_profile(prefs, NULL);
gtk_list_store_remove(GTK_LIST_STORE(profileModel), &iter);
gtk_combo_box_set_active(combo, 0);
}
@@ -480,9 +482,9 @@ static void add_profile_cb(GtkWidget *w, gpointer data) {
GtkTreeModel *profileModel = gtk_combo_box_get_model(combo);
GtkTreeIter iter;
- gint new_id = trg_prefs_new_profile(priv->prefs);
+ JsonObject *profile = trg_prefs_new_profile(priv->prefs);
gtk_list_store_insert_with_values(GTK_LIST_STORE(profileModel), &iter,
- INT_MAX, 0, new_id, 1, _(TRG_PROFILE_NAME_DEFAULT), -1);
+ INT_MAX, 0, profile, 1, _(TRG_PROFILE_NAME_DEFAULT), -1);
gtk_combo_box_set_active_iter(combo, &iter);
}
diff --git a/src/trg-prefs.c b/src/trg-prefs.c
index 5ef7ff9..7c11879 100644
--- a/src/trg-prefs.c
+++ b/src/trg-prefs.c
@@ -38,6 +38,7 @@ struct _TrgPrefsPrivate {
JsonObject *defaultsObj;
JsonNode *user;
JsonObject *userObj;
+ JsonObject *profile;
gchar *file;
};
@@ -146,16 +147,11 @@ gint trg_prefs_get_profile_id(TrgPrefs *p) {
return (gint)json_object_get_int_member(priv->userObj, TRG_PREFS_KEY_PROFILE_ID);
}
-JsonObject *trg_prefs_get_current_profile(TrgPrefs *p) {
- JsonArray *profiles = trg_prefs_get_profiles(p);
- return json_array_get_object_element(profiles, trg_prefs_get_profile_id(p));
-}
-
JsonNode *trg_prefs_get_value(TrgPrefs *p, gchar *key, int flags) {
TrgPrefsPrivate *priv = GET_PRIVATE(p);
if ((flags & TRG_PREFS_PROFILE)) {
- JsonObject *profile = trg_prefs_get_current_profile(p);
+ JsonObject *profile = trg_prefs_get_profile(p);
if (json_object_has_member(profile, key)) {
return json_object_get_member(profile, key);
} else if ((flags & TRG_PREFS_NEWNODE)) {
@@ -224,20 +220,52 @@ void trg_prefs_set_string(TrgPrefs *p, gchar *key, const gchar *value,
json_node_set_string(node, value);
}
-void trg_prefs_set_profile(TrgPrefs *p, int index) {
- trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, index, TRG_PREFS_GLOBAL);
+void trg_prefs_set_profile(TrgPrefs *p, JsonObject *profile) {
+ TrgPrefsPrivate *priv = GET_PRIVATE(p);
+ JsonArray *profiles = trg_prefs_get_profiles(p);
+ priv->profile = profile;
+
+ GList *li;
+ gint i = 0;
+
+ for (li = json_array_get_elements(profiles); li; li = g_list_next(li))
+ {
+ if (json_node_get_object((JsonNode*)li->data) == profile) {
+ trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, i, TRG_PREFS_GLOBAL);
+ break;
+ }
+ i++;
+ }
}
-gint trg_prefs_new_profile(TrgPrefs *p) {
+JsonObject *trg_prefs_new_profile(TrgPrefs *p) {
JsonArray *profiles = trg_prefs_get_profiles(p);
JsonObject *newp = trg_prefs_new_profile_object();
json_array_add_object_element(profiles, newp);
- return json_array_get_length(profiles) - 1;
+ return newp;
}
-void trg_prefs_del_profile(TrgPrefs *p, guint index) {
+void trg_prefs_del_profile(TrgPrefs *p, JsonObject *profile) {
JsonArray *profiles = trg_prefs_get_profiles(p);
- json_array_remove_element(profiles, index);
+
+ GList *li;
+ JsonNode *node;
+ int i = 0;
+ for (li = json_array_get_elements(profiles); li; li = g_list_next(li))
+ {
+ node = (JsonNode*)li->data;
+ if (profile == (gpointer)json_node_get_object(node)) {
+ json_array_remove_element(profiles, i);
+ break;
+ }
+ i++;
+ }
+
+}
+
+JsonObject* trg_prefs_get_profile(TrgPrefs *p) {
+ TrgPrefsPrivate *priv = GET_PRIVATE(p);
+ return priv->profile;
}
JsonArray* trg_prefs_get_profiles(TrgPrefs *p) {
@@ -344,12 +372,15 @@ void trg_prefs_load(TrgPrefs *p) {
n_profiles = json_array_get_length(profiles);
if (n_profiles < 1) {
- json_array_add_object_element(profiles, trg_prefs_new_profile_object());
+ priv->profile = trg_prefs_new_profile_object();
+ json_array_add_object_element(profiles, priv->profile);
trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, 0, TRG_PREFS_GLOBAL);
} else {
gint profile_id = trg_prefs_get_int(p, TRG_PREFS_KEY_PROFILE_ID,
TRG_PREFS_GLOBAL);
if (profile_id >= n_profiles)
- trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, 0, TRG_PREFS_GLOBAL);
+ trg_prefs_set_int(p, TRG_PREFS_KEY_PROFILE_ID, profile_id=0, TRG_PREFS_GLOBAL);
+
+ priv->profile = json_array_get_object_element(profiles, profile_id);
}
}
diff --git a/src/trg-prefs.h b/src/trg-prefs.h
index 0bbdd74..b655d74 100644
--- a/src/trg-prefs.h
+++ b/src/trg-prefs.h
@@ -106,11 +106,12 @@ gchar *trg_prefs_get_string(TrgPrefs *p, gchar *key, int flags);
int trg_prefs_get_int(TrgPrefs *p, gchar *key, int flags);
gdouble trg_prefs_get_double(TrgPrefs *p, gchar *key, int flags);
gboolean trg_prefs_get_bool(TrgPrefs *p, gchar *key, int flags);
+JsonObject* trg_prefs_get_profile(TrgPrefs *p);
JsonArray* trg_prefs_get_profiles(TrgPrefs *p);
gint trg_prefs_get_profile_id(TrgPrefs *p);
-void trg_prefs_del_profile(TrgPrefs *p, guint index);
-void trg_prefs_set_profile(TrgPrefs *p, int index);
-gint trg_prefs_new_profile(TrgPrefs *p);
+void trg_prefs_del_profile(TrgPrefs *p, JsonObject *profile);
+void trg_prefs_set_profile(TrgPrefs *p, JsonObject *profile);
+JsonObject *trg_prefs_new_profile(TrgPrefs *p);
JsonObject *trg_get_current_profile(TrgPrefs *p);
JsonObject *trg_prefs_get_root(TrgPrefs *p);