(trunk gtk) fix the editing of tracker URLs in the GTK+ client
This commit is contained in:
parent
d6ad9238be
commit
6a1e524aac
|
@ -86,6 +86,7 @@ struct DetailsImpl
|
|||
|
||||
GtkListStore * trackers;
|
||||
GtkTreeModel * trackers_filtered;
|
||||
GtkWidget * edit_trackers_button;
|
||||
GtkWidget * tracker_view;
|
||||
GtkWidget * scrape_check;
|
||||
GtkWidget * all_check;
|
||||
|
@ -1704,7 +1705,8 @@ trackerVisibleFunc( GtkTreeModel * model, GtkTreeIter * iter, gpointer data )
|
|||
return active;
|
||||
}
|
||||
|
||||
//ccc
|
||||
#define TORRENT_PTR_KEY "torrent-pointer"
|
||||
|
||||
static void
|
||||
refreshTracker( struct DetailsImpl * di, tr_torrent ** torrents, int n )
|
||||
{
|
||||
|
@ -1721,6 +1723,11 @@ refreshTracker( struct DetailsImpl * di, tr_torrent ** torrents, int n )
|
|||
for( i=0; i<n; ++i )
|
||||
stats[i] = tr_torrentTrackers( torrents[i], &statCount[i] );
|
||||
|
||||
/* "edit trackers" button */
|
||||
gtk_widget_set_sensitive( di->edit_trackers_button, n==1 );
|
||||
if( n==1 )
|
||||
g_object_set_data( G_OBJECT( di->edit_trackers_button ), TORRENT_PTR_KEY, torrents[0] );
|
||||
|
||||
/* build the store if we don't already have it */
|
||||
if( store == NULL )
|
||||
{
|
||||
|
@ -1750,11 +1757,11 @@ refreshTracker( struct DetailsImpl * di, tr_torrent ** torrents, int n )
|
|||
const tr_info * inf = tr_torrentInfo( torrents[0] );
|
||||
for( i=0; i<inf->trackerCount; ++i ) {
|
||||
const tr_tracker_info * t = &inf->trackers[i];
|
||||
g_string_append_printf( gstr, "%s\n", t->announce );
|
||||
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 );
|
||||
|
@ -1851,6 +1858,7 @@ onEditTrackersResponse( GtkDialog * dialog, int response, gpointer data )
|
|||
char * tracker_text;
|
||||
char ** tracker_strings;
|
||||
tr_tracker_info * trackers;
|
||||
tr_torrent * tor = g_object_get_data( G_OBJECT( dialog ), TORRENT_PTR_KEY );
|
||||
|
||||
/* build the array of trackers */
|
||||
gtk_text_buffer_get_bounds( di->tracker_buffer, &start, &end );
|
||||
|
@ -1871,7 +1879,7 @@ onEditTrackersResponse( GtkDialog * dialog, int response, gpointer data )
|
|||
}
|
||||
|
||||
/* update the torrent */
|
||||
tr_torrentSetAnnounceList( NULL, trackers, n );
|
||||
tr_torrentSetAnnounceList( tor, trackers, n );
|
||||
di->trackers = NULL;
|
||||
di->tracker_buffer = NULL;
|
||||
|
||||
|
@ -1887,7 +1895,8 @@ onEditTrackersResponse( GtkDialog * dialog, int response, gpointer data )
|
|||
static void
|
||||
onEditTrackers( GtkButton * button, gpointer data )
|
||||
{
|
||||
GtkWidget *w, *d, *sw, *fr;
|
||||
int row;
|
||||
GtkWidget *w, *d, *fr, *t, *l, *sw;
|
||||
GtkWindow * win = GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( button ) ) );
|
||||
struct DetailsImpl * di = data;
|
||||
|
||||
|
@ -1896,22 +1905,36 @@ onEditTrackers( GtkButton * button, gpointer data )
|
|||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
|
||||
NULL );
|
||||
g_object_set_data( G_OBJECT( d ), TORRENT_PTR_KEY,
|
||||
g_object_get_data( G_OBJECT( button ), TORRENT_PTR_KEY ) );
|
||||
g_signal_connect( d, "response",
|
||||
G_CALLBACK( onEditTrackersResponse ), data );
|
||||
|
||||
w = gtk_text_view_new_with_buffer( di->tracker_buffer );
|
||||
gtr_widget_set_tooltip_text( w, _( "Transmission supports HTTP and HTTPS (SSL) trackers. Torrents with multiple trackers are also supported -- trackers from the same server (with similar URLs) must be grouped together and those from different servers separated by a blank line." ) );
|
||||
gtk_widget_set_size_request( w, 400, 300 );
|
||||
sw = gtk_scrolled_window_new( NULL, NULL );
|
||||
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( sw ),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC );
|
||||
gtk_container_add( GTK_CONTAINER( sw ), w );
|
||||
fr = gtk_frame_new( NULL );
|
||||
gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_IN );
|
||||
gtk_container_add( GTK_CONTAINER( fr ), sw );
|
||||
row = 0;
|
||||
t = hig_workarea_create( );
|
||||
hig_workarea_add_section_title( t, &row, _( "Tracker Announce URLs" ) );
|
||||
|
||||
gtk_box_pack_start( GTK_BOX( GTK_DIALOG( d )->vbox ), fr, TRUE, TRUE, GUI_PAD_SMALL );
|
||||
l = gtk_label_new( NULL );
|
||||
gtk_label_set_markup( GTK_LABEL( l ), _( "To add a backup URL, add it on the line after the primary URL.\n"
|
||||
"To add another primary URL, add it after a blank line." ) );
|
||||
gtk_label_set_justify( GTK_LABEL( l ), GTK_JUSTIFY_LEFT );
|
||||
gtk_misc_set_alignment( GTK_MISC( l ), 0.0, 0.5 );
|
||||
hig_workarea_add_wide_control( t, &row, l );
|
||||
|
||||
w = gtk_text_view_new_with_buffer( di->tracker_buffer );
|
||||
gtk_widget_set_size_request( w, 500u, 66u );
|
||||
fr = gtk_frame_new( NULL );
|
||||
gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_IN );
|
||||
sw = gtk_scrolled_window_new( NULL, NULL );
|
||||
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( sw ),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC );
|
||||
gtk_container_add( GTK_CONTAINER( sw ), w );
|
||||
gtk_container_add( GTK_CONTAINER( fr ), sw );
|
||||
hig_workarea_add_wide_control( t, &row, fr );
|
||||
|
||||
hig_workarea_finish( t, &row );
|
||||
gtk_box_pack_start( GTK_BOX( GTK_DIALOG( d )->vbox ), t, TRUE, TRUE, GUI_PAD_SMALL );
|
||||
gtk_widget_show_all( d );
|
||||
}
|
||||
|
||||
|
@ -1959,9 +1982,11 @@ tracker_page_new( struct DetailsImpl * di )
|
|||
g_signal_connect( w, "toggled", G_CALLBACK( onScrapeToggled ), di );
|
||||
gtk_box_pack_start( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
|
||||
|
||||
w = gtk_button_new_from_stock( GTK_STOCK_EDIT );
|
||||
w = gtk_button_new_with_mnemonic( _( "_Edit URLs" ) );
|
||||
gtk_button_set_image( GTK_BUTTON( w ), gtk_image_new_from_stock( GTK_STOCK_EDIT, GTK_ICON_SIZE_BUTTON ) );
|
||||
g_signal_connect( w, "clicked", G_CALLBACK( onEditTrackers ), di );
|
||||
gtk_box_pack_end( GTK_BOX( hbox ), w, FALSE, FALSE, 0 );
|
||||
di->edit_trackers_button = w;
|
||||
|
||||
gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
|
||||
|
||||
|
|
|
@ -373,7 +373,7 @@ make_meta_ui( GtkWindow * parent, TrCore * core )
|
|||
{
|
||||
int row = 0;
|
||||
const char * str;
|
||||
GtkWidget * d, *t, *w, *l, *fr, *sw;
|
||||
GtkWidget * d, *t, *w, *l, *fr, *sw, *v;
|
||||
GSList * slist;
|
||||
MakeMetaUI * ui = g_new0 ( MakeMetaUI, 1 );
|
||||
|
||||
|
@ -429,9 +429,9 @@ make_meta_ui( GtkWindow * parent, TrCore * core )
|
|||
hig_workarea_add_section_title ( t, &row, _( "Properties" ) );
|
||||
|
||||
str = _( "_Trackers:" );
|
||||
v = gtk_vbox_new( FALSE, GUI_PAD_SMALL );
|
||||
ui->announce_text_buffer = gtk_text_buffer_new( NULL );
|
||||
w = gtk_text_view_new_with_buffer( ui->announce_text_buffer );
|
||||
gtr_widget_set_tooltip_text( w, _( "Transmission supports HTTP and HTTPS (SSL) trackers. Torrents with multiple trackers are also supported -- trackers from the same server (with similar URLs) must be grouped together and those from different servers separated by a blank line." ) );
|
||||
gtk_widget_set_size_request( w, -1, 80 );
|
||||
sw = gtk_scrolled_window_new( NULL, NULL );
|
||||
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( sw ),
|
||||
|
@ -441,7 +441,14 @@ make_meta_ui( GtkWindow * parent, TrCore * core )
|
|||
fr = gtk_frame_new( NULL );
|
||||
gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_IN );
|
||||
gtk_container_add( GTK_CONTAINER( fr ), sw );
|
||||
hig_workarea_add_tall_row( t, &row, str, fr, NULL );
|
||||
gtk_box_pack_start( GTK_BOX( v ), fr, TRUE, TRUE, 0 );
|
||||
l = gtk_label_new( NULL );
|
||||
gtk_label_set_markup( GTK_LABEL( l ), _( "To add a backup URL, add it on the line after the primary URL.\n"
|
||||
"To add another primary URL, add it after a blank line." ) );
|
||||
gtk_label_set_justify( GTK_LABEL( l ), GTK_JUSTIFY_LEFT );
|
||||
gtk_misc_set_alignment( GTK_MISC( l ), 0.0, 0.5 );
|
||||
gtk_box_pack_start( GTK_BOX( v ), l, FALSE, FALSE, 0 );
|
||||
hig_workarea_add_tall_row( t, &row, str, v, NULL );
|
||||
|
||||
l = gtk_check_button_new_with_mnemonic( _( "Co_mment:" ) );
|
||||
ui->comment_check = l;
|
||||
|
|
Loading…
Reference in New Issue