diff options
Diffstat (limited to 'src/trg-state-selector.c')
-rw-r--r-- | src/trg-state-selector.c | 50 |
1 files changed, 28 insertions, 22 deletions
diff --git a/src/trg-state-selector.c b/src/trg-state-selector.c index 5bad1cc..48d6b01 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,9 @@ void trg_state_selector_update(TrgStateSelector * s) { if (!t) continue; - if (priv->showTrackers) { + if (priv->showTrackers + && ((whatsChanged & TORRENT_UPDATE_PATH_CHANGE) + || (whatsChanged & TORRENT_UPDATE_ADDREMOVE))) { trackersList = json_array_get_elements( torrent_get_tracker_stats(t)); for (trackerItem = trackersList; trackerItem; @@ -328,9 +331,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 +340,7 @@ void trg_state_selector_update(TrgStateSelector * s) { g_list_free(trackersList); } - if (priv->showDirs) { + if (priv->showTrackers && (whatsChanged & TORRENT_UPDATE_ADDREMOVE)) { 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_PATH_CHANGE) + || (whatsChanged & TORRENT_UPDATE_ADDREMOVE))) { 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, |