391
391
updateBlocklistText( GtkWidget * w, TrCore * core )
393
395
const int n = tr_blocklistGetRuleCount( tr_core_session( core ) );
395
g_snprintf( buf, sizeof( buf ),
396
gtr_ngettext( "Enable _blocklist (contains %'d rule)",
397
"Enable _blocklist (contains %'d rules)", n ), n );
398
gtk_button_set_label( GTK_BUTTON( w ), buf );
396
g_snprintf( buf1, sizeof( buf1 ),
397
gtr_ngettext( "Blocklist contains %'d rule",
398
"Blocklist contains %'d rules", n ), n );
399
g_snprintf( buf2, sizeof( buf2 ), "<i>%s</i>", buf1 );
400
gtk_label_set_markup( GTK_LABEL( w ), buf2 );
401
403
/* prefs dialog is being destroyed, so stop listening to blocklist updates */
424
426
onBlocklistUpdated( TrCore * core, int n, gpointer gdata )
426
const char * s = gtr_ngettext( "Blocklist now has %'d rule.", "Blocklist now has %'d rules.", n );
428
const tr_bool success = n >= 0;
429
const int count = n >=0 ? n : tr_blocklistGetRuleCount( tr_core_session( core ) );
430
const char * s = gtr_ngettext( "Blocklist has %'d rule.", "Blocklist has %'d rules.", count );
427
431
struct blocklist_data * data = gdata;
428
432
GtkMessageDialog * d = GTK_MESSAGE_DIALOG( data->updateBlocklistDialog );
429
433
gtk_widget_set_sensitive( data->updateBlocklistButton, TRUE );
430
gtk_message_dialog_set_markup( d, _( "<b>Update succeeded!</b>" ) );
431
gtk_message_dialog_format_secondary_text( d, s, n );
432
updateBlocklistText( data->check, core );
434
gtk_message_dialog_set_markup( d, success ? _( "<b>Update succeeded!</b>" ) : _( "<b>Unable to update.</b>" ) );
435
gtk_message_dialog_format_secondary_text( d, s, count );
436
updateBlocklistText( data->label, core );
435
439
/* user pushed a button to update the blocklist */
490
495
t = hig_workarea_create( );
491
496
hig_workarea_add_section_title( t, &row, _( "Blocklist" ) );
493
w = new_check_button( "", TR_PREFS_KEY_BLOCKLIST_ENABLED, core );
498
b = new_check_button( _( "Enable _blocklist:" ), TR_PREFS_KEY_BLOCKLIST_ENABLED, core );
499
e = new_entry( TR_PREFS_KEY_BLOCKLIST_URL, core );
500
gtk_widget_set_size_request( e, 300, -1 );
501
hig_workarea_add_row_w( t, &row, b, e, NULL );
503
g_signal_connect( b, "toggled", G_CALLBACK( target_cb ), e );
506
w = gtk_label_new( "" );
507
gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.5f );
494
508
updateBlocklistText( w, TR_CORE( core ) );
495
510
h = gtk_hbox_new( FALSE, GUI_PAD_BIG );
496
511
gtk_box_pack_start( GTK_BOX( h ), w, TRUE, TRUE, 0 );
497
512
b = data->updateBlocklistButton = gtk_button_new_with_mnemonic( _( "_Update" ) );
499
g_object_set_data( G_OBJECT( b ), "session",
500
tr_core_session( TR_CORE( core ) ) );
513
g_object_set_data( G_OBJECT( b ), "session", tr_core_session( TR_CORE( core ) ) );
501
514
g_signal_connect( b, "clicked", G_CALLBACK( onBlocklistUpdate ), data );
515
g_signal_connect( data->check, "toggled", G_CALLBACK( target_cb ), b ); target_cb( data->check, b );
502
516
gtk_box_pack_start( GTK_BOX( h ), b, FALSE, FALSE, 0 );
503
g_signal_connect( w, "toggled", G_CALLBACK( target_cb ), b );
517
g_signal_connect( data->check, "toggled", G_CALLBACK( target_cb ), w ); target_cb( data->check, w );
505
518
hig_workarea_add_wide_control( t, &row, h );
507
520
s = _( "Enable _automatic updates" );
508
521
w = new_check_button( s, PREF_KEY_BLOCKLIST_UPDATES_ENABLED, core );
509
522
hig_workarea_add_wide_control( t, &row, w );
510
g_signal_connect( data->check, "toggled", G_CALLBACK( target_cb ), w );
511
target_cb( data->check, w );
523
g_signal_connect( data->check, "toggled", G_CALLBACK( target_cb ), w ); target_cb( data->check, w );
513
525
hig_workarea_add_section_divider( t, &row );
514
526
hig_workarea_add_section_title ( t, &row, _( "Privacy" ) );
880
GSList * proxy_widgets;
881
GSList * proxy_auth_widgets;
885
refreshProxySensitivity( struct ProxyPage * p )
888
const gboolean proxy_enabled = pref_flag_get( TR_PREFS_KEY_PROXY_ENABLED );
889
const gboolean proxy_auth_enabled = pref_flag_get( TR_PREFS_KEY_PROXY_AUTH_ENABLED );
891
for( l = p->proxy_widgets; l != NULL; l = l->next )
892
gtk_widget_set_sensitive( GTK_WIDGET( l->data ), proxy_enabled );
894
for( l = p->proxy_auth_widgets; l != NULL; l = l->next )
895
gtk_widget_set_sensitive( GTK_WIDGET( l->data ),
896
proxy_enabled && proxy_auth_enabled );
900
onProxyToggled( GtkToggleButton * tb UNUSED,
903
refreshProxySensitivity( user_data );
907
proxyPageFree( gpointer gpage )
909
struct ProxyPage * page = gpage;
911
g_slist_free( page->proxy_widgets );
912
g_slist_free( page->proxy_auth_widgets );
917
proxy_combo_box_new( GObject * core, const char * key )
919
GtkWidget * w = gtr_combo_box_new_enum( "HTTP", TR_PROXY_HTTP,
920
"SOCKS4", TR_PROXY_SOCKS4,
921
"SOCKS5", TR_PROXY_SOCKS5,
923
gtr_combo_box_set_active_enum( GTK_COMBO_BOX( w ), pref_int_get( key ) );
924
g_object_set_data_full( G_OBJECT( w ), PREF_KEY, tr_strdup( key ), g_free );
925
g_signal_connect( w, "changed", G_CALLBACK( onIntComboChanged ), core );
930
trackerPage( GObject * core )
936
struct ProxyPage * page = tr_new0( struct ProxyPage, 1 );
938
t = hig_workarea_create( );
939
hig_workarea_add_section_title ( t, &row, _( "Tracker" ) );
941
s = _( "Connect to tracker via a pro_xy" );
942
w = new_check_button( s, TR_PREFS_KEY_PROXY_ENABLED, core );
943
g_signal_connect( w, "toggled", G_CALLBACK( onProxyToggled ), page );
944
hig_workarea_add_wide_control( t, &row, w );
946
s = _( "Proxy _server:" );
947
w = new_entry( TR_PREFS_KEY_PROXY, core );
948
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
949
w = hig_workarea_add_row( t, &row, s, w, NULL );
950
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
952
w = new_spin_button( TR_PREFS_KEY_PROXY_PORT, core, 0, USHRT_MAX, 1 );
953
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
954
w = hig_workarea_add_row( t, &row, _( "Proxy _port:" ), w, NULL );
955
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
957
s = _( "Proxy _type:" );
958
w = proxy_combo_box_new( core, TR_PREFS_KEY_PROXY_TYPE );
959
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
960
w = hig_workarea_add_row( t, &row, s, w, NULL );
961
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
963
s = _( "Use _authentication" );
964
w = new_check_button( s, TR_PREFS_KEY_PROXY_AUTH_ENABLED, core );
965
g_signal_connect( w, "toggled", G_CALLBACK( onProxyToggled ), page );
966
hig_workarea_add_wide_control( t, &row, w );
967
page->proxy_widgets = g_slist_append( page->proxy_widgets, w );
969
s = _( "_Username:" );
970
w = new_entry( TR_PREFS_KEY_PROXY_USERNAME, core );
971
page->proxy_auth_widgets = g_slist_append( page->proxy_auth_widgets, w );
972
w = hig_workarea_add_row( t, &row, s, w, NULL );
973
page->proxy_auth_widgets = g_slist_append( page->proxy_auth_widgets, w );
975
s = _( "Pass_word:" );
976
w = new_entry( TR_PREFS_KEY_PROXY_PASSWORD, core );
977
gtk_entry_set_visibility( GTK_ENTRY( w ), FALSE );
978
page->proxy_auth_widgets = g_slist_append( page->proxy_auth_widgets, w );
979
w = hig_workarea_add_row( t, &row, s, w, NULL );
980
page->proxy_auth_widgets = g_slist_append( page->proxy_auth_widgets, w );
982
hig_workarea_finish( t, &row );
983
g_object_set_data_full( G_OBJECT( t ), "page", page, proxyPageFree );
985
refreshProxySensitivity( page );
990
887
***** Bandwidth Tab