summaryrefslogtreecommitdiff
path: root/src/trg-state-selector.c
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2012-01-02 00:04:22 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2012-01-02 00:04:22 +0000
commit94e9936deac2818db70d77a70d809fe16234e05e (patch)
treec0156aa9e87fb62a08f702d5121bbbaca3e97f58 /src/trg-state-selector.c
parent6b84bc3968c7b09a7eb180a5c73d4cf3f646d759 (diff)
contributed patch to change two Kbps to the correct KB/s. also have another go at the more efficient filter refreshes.
Diffstat (limited to 'src/trg-state-selector.c')
-rw-r--r--src/trg-state-selector.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c
index 5bad1cc..cbfacdd 100644
--- a/src/trg-state-selector.c
+++ b/src/trg-state-selector.c
@@ -161,26 +161,27 @@ static void trg_state_selector_update_dynamic_filter(GtkTreeModel * model,
if (oldSerial != serial) {
g_value_init(&gvalue, G_TYPE_INT);
g_value_set_int(&gvalue, 1);
- gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_COUNT,
- &gvalue);
+ gtk_list_store_set_value(GTK_LIST_STORE(model), &iter,
+ STATE_SELECTOR_COUNT, &gvalue);
memset(&gvalue, 0, sizeof(GValue));
g_value_init(&gvalue, G_TYPE_INT64);
g_value_set_int64(&gvalue, serial);
- gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_SERIAL,
- &gvalue);
+ gtk_list_store_set_value(GTK_LIST_STORE(model), &iter,
+ STATE_SELECTOR_SERIAL, &gvalue);
} else {
g_value_init(&gvalue, G_TYPE_INT);
g_value_set_int(&gvalue, ++oldCount);
- gtk_list_store_set_value(GTK_LIST_STORE(model), &iter, STATE_SELECTOR_COUNT,
- &gvalue);
+ gtk_list_store_set_value(GTK_LIST_STORE(model), &iter,
+ STATE_SELECTOR_COUNT, &gvalue);
}
gtk_tree_path_free(path);
}
static void refresh_statelist_cb(GtkWidget * w, gpointer data) {
- trg_state_selector_update(TRG_STATE_SELECTOR(data));
+ trg_state_selector_update(TRG_STATE_SELECTOR(data),
+ TORRENT_UPDATE_ADDREMOVE);
}
static void view_popup_menu(GtkWidget * treeview, GdkEventButton * event,
@@ -263,7 +264,7 @@ static void trg_state_selector_insert(TrgStateSelector * s, int offset,
gtk_list_store_insert(GTK_LIST_STORE(model), iter, args.pos);
}
-void trg_state_selector_update(TrgStateSelector * s) {
+void trg_state_selector_update(TrgStateSelector * s, guint whatsChanged) {
TrgStateSelectorPrivate *priv = TRG_STATE_SELECTOR_GET_PRIVATE(s);
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(s));
TrgClient *client = priv->client;
@@ -300,7 +301,7 @@ void trg_state_selector_update(TrgStateSelector * s) {
if (!t)
continue;
- if (priv->showTrackers) {
+ if (priv->showTrackers && (whatsChanged & TORRENT_UPDATE_ADDREMOVE)) {
trackersList = json_array_get_elements(
torrent_get_tracker_stats(t));
for (trackerItem = trackersList; trackerItem;
@@ -328,9 +329,8 @@ void trg_state_selector_update(TrgStateSelector * s) {
STATE_SELECTOR_ICON, GTK_STOCK_NETWORK,
STATE_SELECTOR_NAME, announceHost,
STATE_SELECTOR_SERIAL, updateSerial,
- STATE_SELECTOR_COUNT, 1,
- STATE_SELECTOR_BIT, FILTER_FLAG_TRACKER,
- STATE_SELECTOR_INDEX, 0, -1);
+ STATE_SELECTOR_COUNT, 1, STATE_SELECTOR_BIT,
+ FILTER_FLAG_TRACKER, STATE_SELECTOR_INDEX, 0, -1);
g_hash_table_insert(priv->trackers, announceHost,
quick_tree_ref_new(model, &iter));
}
@@ -338,7 +338,9 @@ void trg_state_selector_update(TrgStateSelector * s) {
g_list_free(trackersList);
}
- if (priv->showDirs) {
+ if (priv->showDirs
+ && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE)
+ || (whatsChanged & TORRENT_UPDATE_PATH_CHANGE))) {
gchar *dir;
gtk_tree_model_get(torrentModel, &torrentIter,
TORRENT_COLUMN_DOWNLOADDIR_SHORT, &dir, -1);
@@ -355,8 +357,7 @@ void trg_state_selector_update(TrgStateSelector * s) {
STATE_SELECTOR_ICON, GTK_STOCK_DIRECTORY,
STATE_SELECTOR_NAME, dir, STATE_SELECTOR_SERIAL,
updateSerial, STATE_SELECTOR_BIT, FILTER_FLAG_DIR,
- STATE_SELECTOR_COUNT, 1,
- STATE_SELECTOR_INDEX, 0, -1);
+ STATE_SELECTOR_COUNT, 1, STATE_SELECTOR_INDEX, 0, -1);
g_hash_table_insert(priv->directories, g_strdup(dir),
quick_tree_ref_new(model, &iter));
}
@@ -369,13 +370,15 @@ void trg_state_selector_update(TrgStateSelector * s) {
cruft.serial = trg_client_get_serial(client);
- if (priv->showTrackers) {
+ if (priv->showTrackers && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE))) {
cruft.table = priv->trackers;
g_hash_table_foreach_remove(priv->trackers,
trg_state_selector_remove_cruft, &cruft);
}
- if (priv->showDirs) {
+ if (priv->showDirs
+ && ((whatsChanged & TORRENT_UPDATE_ADDREMOVE)
+ || (whatsChanged & TORRENT_UPDATE_PATH_CHANGE))) {
cruft.table = priv->directories;
g_hash_table_foreach_remove(priv->directories,
trg_state_selector_remove_cruft, &cruft);
@@ -388,15 +391,18 @@ void trg_state_selector_set_show_dirs(TrgStateSelector * s, gboolean show) {
if (!show)
g_hash_table_remove_all(priv->directories);
else
- trg_state_selector_update(s);
+ trg_state_selector_update(s, TORRENT_UPDATE_PATH_CHANGE);
}
static void on_torrents_state_change(TrgTorrentModel * model,
guint whatsChanged, gpointer data) {
TrgStateSelector *selector = TRG_STATE_SELECTOR(data);
- trg_state_selector_update(selector);
- trg_state_selector_stats_update(selector,
- trg_torrent_model_get_stats(model));
+ trg_state_selector_update(selector, whatsChanged);
+
+ if ((whatsChanged & TORRENT_UPDATE_ADDREMOVE)
+ || (whatsChanged & TORRENT_UPDATE_STATE_CHANGE))
+ trg_state_selector_stats_update(selector,
+ trg_torrent_model_get_stats(model));
}
void trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show) {
@@ -405,7 +411,7 @@ void trg_state_selector_set_show_trackers(TrgStateSelector * s, gboolean show) {
if (!show)
g_hash_table_remove_all(priv->trackers);
else
- trg_state_selector_update(s);
+ trg_state_selector_update(s, TORRENT_UPDATE_ADDREMOVE);
}
static void trg_state_selector_add_state(TrgStateSelector * selector,