summaryrefslogtreecommitdiff
path: root/src/trg-state-selector.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/trg-state-selector.c')
-rw-r--r--src/trg-state-selector.c44
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;
}