diff options
Diffstat (limited to 'src/trg-state-selector.c')
-rw-r--r-- | src/trg-state-selector.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c index cee0c56..4110f7b 100644 --- a/src/trg-state-selector.c +++ b/src/trg-state-selector.c @@ -17,6 +17,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <glib-object.h> #include <json-glib/json-glib.h> #include <glib/gi18n.h> @@ -49,6 +53,7 @@ struct _TrgStateSelectorPrivate { guint flag; gboolean showDirs; gboolean showTrackers; + gboolean dirsFirst; TrgClient *client; TrgPrefs *prefs; GHashTable *trackers; @@ -163,7 +168,7 @@ trg_state_selector_update_dynamic_filter(GtkTreeModel * model, GtkTreeIter iter; GtkTreePath *path = gtk_tree_row_reference_get_path(rr); gint64 oldSerial; - GValue gvalue = { 0 }; + GValue gvalue = G_VALUE_INIT; gint oldCount; gtk_tree_model_get_iter(model, &iter, path); @@ -356,10 +361,13 @@ void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged) updateSerial); g_free(announceHost); } else { - trg_state_selector_insert(s, priv->n_categories, - g_hash_table_size - (priv->trackers), - announceHost, &iter); + if (priv->dirsFirst){ + trg_state_selector_insert(s, priv->n_categories + + g_hash_table_size(priv->directories), -1, announceHost, &iter); + } else { + trg_state_selector_insert(s, priv->n_categories, + g_hash_table_size(priv->trackers), announceHost, &iter); + } gtk_list_store_set(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_ICON, GTK_STOCK_NETWORK, @@ -390,11 +398,13 @@ void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged) *) result, updateSerial); } else { - trg_state_selector_insert(s, - priv->n_categories + - g_hash_table_size - (priv->trackers), -1, dir, - &iter); + if (priv->dirsFirst){ + trg_state_selector_insert(s, priv->n_categories, + g_hash_table_size(priv->directories), dir, &iter); + } else { + trg_state_selector_insert(s, priv->n_categories + + g_hash_table_size(priv->trackers), -1, dir, &iter); + } gtk_list_store_set(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_ICON, GTK_STOCK_DIRECTORY, @@ -466,6 +476,15 @@ trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show) trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE); } +void +trg_state_selector_set_directories_first(TrgStateSelector * s, gboolean _dirsFirst){ + TrgStateSelectorPrivate *priv = TRG_STATE_SELECTOR_GET_PRIVATE(s); + priv->dirsFirst = _dirsFirst; + g_hash_table_remove_all(priv->directories); + g_hash_table_remove_all(priv->trackers); + trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE); +} + static void trg_state_selector_add_state(TrgStateSelector * selector, GtkTreeIter * iter, gint pos, @@ -511,7 +530,7 @@ static void trg_state_selector_update_stat(GtkTreeRowReference * rr, gint count) { if (rr) { - GValue gvalue = { 0 }; + GValue gvalue = G_VALUE_INIT; GtkTreeIter iter; GtkTreePath *path = gtk_tree_row_reference_get_path(rr); GtkTreeModel *model = gtk_tree_row_reference_get_model(rr); @@ -715,6 +734,9 @@ static GObject *trg_state_selector_constructor(GType type, priv->showTrackers = trg_prefs_get_bool(priv->prefs, TRG_PREFS_KEY_FILTER_TRACKERS, TRG_PREFS_GLOBAL); + priv->dirsFirst = + trg_prefs_get_bool(priv->prefs, TRG_PREFS_KEY_DIRECTORIES_FIRST, + TRG_PREFS_GLOBAL); return object; } |