summaryrefslogtreecommitdiff
path: root/src/trg-destination-combo.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-08-27 17:15:31 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-08-27 17:15:31 +0000
commitbd758ee4fc423b9ca152a01f897609daa656c938 (patch)
tree0378306b5b007f38f0c4f6c0d868215f70fd70d6 /src/trg-destination-combo.c
parentb8a1599a2ab9eafd496ba23179dda97d6e83e917 (diff)
Profile support! Please test and report bugs, as the config system is totally rewritten and may not be perfect. No more GConf (trying to implement profiles with this was UGLY), settings now (for most) live in JSON at $HOME/.config/transmission-remote-gtk/config.json. Hopefully windows support will be easier without GConf.
Diffstat (limited to 'src/trg-destination-combo.c')
-rw-r--r--src/trg-destination-combo.c41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/trg-destination-combo.c b/src/trg-destination-combo.c
index 9dc4b87..7c7dedd 100644
--- a/src/trg-destination-combo.c
+++ b/src/trg-destination-combo.c
@@ -32,7 +32,7 @@ G_DEFINE_TYPE(TrgDestinationCombo, trg_destination_combo,
typedef struct _TrgDestinationComboPrivate TrgDestinationComboPrivate;
struct _TrgDestinationComboPrivate {
- trg_client *client;
+ TrgClient *client;
};
enum {
@@ -71,6 +71,21 @@ trg_destination_combo_set_property(GObject * object, guint property_id,
}
}
+static gboolean g_slist_str_set_add(GSList ** list, const gchar * string, gint pos)
+{
+ GSList *li;
+ for (li = *list; li; li = g_slist_next(li))
+ if (!g_strcmp0((gchar *) li->data, string))
+ return FALSE;
+
+ if (pos < 0)
+ *list = g_slist_insert_sorted(*list, (gpointer)string, (GCompareFunc)g_strcmp0);
+ else
+ *list = g_slist_insert(*list, (gpointer)string, pos);
+
+ return TRUE;
+}
+
static GObject *trg_destination_combo_constructor(GType type,
guint
n_construct_properties,
@@ -84,10 +99,10 @@ static GObject *trg_destination_combo_constructor(GType type,
TrgDestinationComboPrivate *priv =
TRG_DESTINATION_COMBO_GET_PRIVATE(object);
- trg_client *client = priv->client;
+ TrgClient *client = priv->client;
const gchar *defaultDownDir =
- json_object_get_string_member(client->session, SGET_DOWNLOAD_DIR);
+ json_object_get_string_member(trg_client_get_session(client), SGET_DOWNLOAD_DIR);
GtkListStore *comboModel = gtk_list_store_new(1, G_TYPE_STRING);
@@ -101,10 +116,8 @@ static GObject *trg_destination_combo_constructor(GType type,
GtkTreePath *path;
JsonObject *t;
- g_slist_str_set_add(&dirs, defaultDownDir);
-
- g_mutex_lock(client->updateMutex);
- torrentItemRefs = g_hash_table_get_values(client->torrentTable);
+ trg_client_updatelock(client);
+ torrentItemRefs = g_hash_table_get_values(trg_client_get_torrent_table(client));
for (li = torrentItemRefs; li; li = g_list_next(li)) {
rr = (GtkTreeRowReference *) li->data;
model = gtk_tree_row_reference_get_model(rr);
@@ -117,29 +130,28 @@ static GObject *trg_destination_combo_constructor(GType type,
gtk_tree_model_get(model, &iter, TORRENT_COLUMN_JSON, &t,
-1);
dd = torrent_get_download_dir(t);
- if (dd)
- g_slist_str_set_add(&dirs, dd);
-
+ if (dd && g_strcmp0(dd, defaultDownDir))
+ g_slist_str_set_add(&dirs, dd, -1);
}
gtk_tree_path_free(path);
}
}
g_list_free(torrentItemRefs);
- g_mutex_unlock(client->updateMutex);
+ g_slist_str_set_add(&dirs, defaultDownDir, 0);
for (sli = dirs; sli != NULL; sli = g_slist_next(sli))
gtk_list_store_insert_with_values(comboModel, NULL, INT_MAX, 0,
(gchar *) sli->data, -1);
- g_str_slist_free(dirs);
+ trg_client_updateunlock(client);
+ g_slist_free(dirs);
gtk_combo_box_set_model(GTK_COMBO_BOX(object),
GTK_TREE_MODEL(comboModel));
gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(object), 0);
- /* cleanup */
g_object_unref(comboModel);
return object;
@@ -166,14 +178,13 @@ trg_destination_combo_class_init(TrgDestinationComboClass * klass)
G_PARAM_STATIC_NAME |
G_PARAM_STATIC_NICK |
G_PARAM_STATIC_BLURB));
-
}
static void trg_destination_combo_init(TrgDestinationCombo * self)
{
}
-GtkWidget *trg_destination_combo_new(trg_client * client)
+GtkWidget *trg_destination_combo_new(TrgClient * client)
{
return GTK_WIDGET(g_object_new(TRG_TYPE_DESTINATION_COMBO,
"trg-client", client, NULL));