From 2b6b193a43d65a1a81f2bb4b2432ef8fdee2b223 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 10 Mar 2010 19:16:25 +0000 Subject: [PATCH] (trunk gtk) #3011 "'Edit Trackers' dialog not reset after Cancel" -- fixed in trunk for 2.00 --- gtk/details.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/gtk/details.c b/gtk/details.c index 35b08c8df..e5108b70c 100644 --- a/gtk/details.c +++ b/gtk/details.c @@ -1899,6 +1899,27 @@ trackerVisibleFunc( GtkTreeModel * model, GtkTreeIter * iter, gpointer data ) return !isBackup; } +static void +populate_tracker_buffer( GtkTextBuffer * buffer, const tr_torrent * tor ) +{ + int i; + int tier = 0; + GString * gstr = g_string_new( NULL ); + const tr_info * inf = tr_torrentInfo( tor ); + for( i=0; itrackerCount; ++i ) { + const tr_tracker_info * t = &inf->trackers[i]; + if( tier != t->tier ) { + tier = t->tier; + g_string_append_c( gstr, '\n' ); + } + g_string_append_printf( gstr, "%s\n", t->announce ); + } + if( gstr->len > 0 ) + g_string_truncate( gstr, gstr->len-1 ); + gtk_text_buffer_set_text( buffer, gstr->str, -1 ); + g_string_free( gstr, TRUE ); +} + #define TORRENT_PTR_KEY "torrent-pointer" static void @@ -1946,22 +1967,8 @@ refreshTracker( struct DetailsImpl * di, tr_torrent ** torrents, int n ) if( ( di->tracker_buffer == NULL ) && ( n == 1 ) ) { - int tier = 0; - GString * gstr = g_string_new( NULL ); - const tr_info * inf = tr_torrentInfo( torrents[0] ); - for( i=0; itrackerCount; ++i ) { - const tr_tracker_info * t = &inf->trackers[i]; - if( tier != t->tier ) { - tier = t->tier; - g_string_append_c( gstr, '\n' ); - } - g_string_append_printf( gstr, "%s\n", t->announce ); - } - if( gstr->len > 0 ) - g_string_truncate( gstr, gstr->len-1 ); di->tracker_buffer = gtk_text_buffer_new( NULL ); - gtk_text_buffer_set_text( di->tracker_buffer, gstr->str, -1 ); - g_string_free( gstr, TRUE ); + populate_tracker_buffer( di->tracker_buffer, torrents[0] ); } /* add any missing rows (FIXME: doesn't handle edited trackers) */ @@ -2098,6 +2105,12 @@ onEditTrackersResponse( GtkDialog * dialog, int response, gpointer data ) g_free( tracker_text ); } + if( response == GTK_RESPONSE_CANCEL ) + { + tr_torrent * tor = g_object_get_data( G_OBJECT( dialog ), TORRENT_PTR_KEY ); + populate_tracker_buffer( di->tracker_buffer, tor ); + } + if( do_destroy ) gtk_widget_destroy( GTK_WIDGET( dialog ) ); }