mirror of
https://github.com/transmission/transmission
synced 2025-03-03 10:15:45 +00:00
(gtk) rough draft of the preferences dialog's "Remote Access" tab: enable/disable RPC, port, ACL, password, and password toggle
This commit is contained in:
parent
15beea0630
commit
44fdf34678
3 changed files with 91 additions and 8 deletions
|
@ -98,7 +98,7 @@ refresh_cb ( gpointer user_data )
|
|||
switch( ui->builder->result )
|
||||
{
|
||||
case TR_MAKEMETA_OK:
|
||||
txt = g_strdup( _( "Torrent created" ) );
|
||||
txt = g_strdup( _( "Torrent created!" ) );
|
||||
break;
|
||||
|
||||
case TR_MAKEMETA_URL:
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
void
|
||||
tr_prefs_init_global( void )
|
||||
{
|
||||
int i;
|
||||
char pw[12];
|
||||
const char * str;
|
||||
|
||||
cf_check_older_configs( );
|
||||
|
@ -96,6 +98,13 @@ tr_prefs_init_global( void )
|
|||
pref_int_set_default ( PREF_KEY_RPC_PORT, TR_DEFAULT_RPC_PORT );
|
||||
pref_string_set_default ( PREF_KEY_RPC_ACL, TR_DEFAULT_RPC_ACL );
|
||||
|
||||
for( i=0; i<8; ++i )
|
||||
pw[i] = 'a' + tr_rand(26);
|
||||
pw[8] = '\0';
|
||||
pref_string_set_default( PREF_KEY_RPC_PASSWORD, pw );
|
||||
pref_flag_set_default ( PREF_KEY_RPC_PASSWORD_ENABLED, FALSE );
|
||||
|
||||
|
||||
pref_save( NULL );
|
||||
}
|
||||
|
||||
|
@ -157,6 +166,26 @@ new_spin_button( const char * key, gpointer core, int low, int high, int step )
|
|||
return w;
|
||||
}
|
||||
|
||||
static void
|
||||
entry_changed_cb( GtkEntry * w, gpointer core )
|
||||
{
|
||||
const char * key = g_object_get_data( G_OBJECT( w ), PREF_KEY );
|
||||
const char * value = gtk_entry_get_text( w );
|
||||
tr_core_set_pref( TR_CORE( core ), key, value );
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
new_entry( const char * key, gpointer core )
|
||||
{
|
||||
GtkWidget * w = gtk_entry_new( );
|
||||
char * value = pref_string_get( key );
|
||||
gtk_entry_set_text( GTK_ENTRY( w ), value );
|
||||
g_object_set_data_full( G_OBJECT(w), PREF_KEY, g_strdup(key), g_free );
|
||||
g_signal_connect( w, "changed", G_CALLBACK(entry_changed_cb), core );
|
||||
g_free( value );
|
||||
return w;
|
||||
}
|
||||
|
||||
static void
|
||||
chosen_cb( GtkFileChooser * w, gpointer core )
|
||||
{
|
||||
|
@ -186,6 +215,13 @@ target_cb( GtkWidget * tb, gpointer target )
|
|||
gtk_widget_set_sensitive( GTK_WIDGET(target), b );
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_sets_sensitivity( GtkWidget * t, GtkWidget * w)
|
||||
{
|
||||
target_cb( t, w );
|
||||
g_signal_connect( t, "toggled", G_CALLBACK( target_cb ), w );
|
||||
}
|
||||
|
||||
struct test_port_data
|
||||
{
|
||||
GtkWidget * label;
|
||||
|
@ -529,6 +565,55 @@ desktopPage( GObject * core )
|
|||
return t;
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
remotePage( GObject * core )
|
||||
{
|
||||
const char * s;
|
||||
int row = 0;
|
||||
GtkWidget * t;
|
||||
GtkWidget * w;
|
||||
GtkWidget * w2;
|
||||
GtkWidget * enabled_toggle;
|
||||
const gboolean rpc_enabled = pref_flag_get( PREF_KEY_RPC_ENABLED );
|
||||
const gboolean pw_enabled = pref_flag_get( PREF_KEY_RPC_PASSWORD_ENABLED );
|
||||
|
||||
t = hig_workarea_create( );
|
||||
|
||||
hig_workarea_add_section_title( t, &row, _( "Remote Access" ) );
|
||||
|
||||
/* "enabled" checkbutton */
|
||||
s = _( "_Allow requests from transmission-remote, Clutch, etc." );
|
||||
w = new_check_button( s, PREF_KEY_RPC_ENABLED, core );
|
||||
hig_workarea_add_wide_control( t, &row, w );
|
||||
enabled_toggle = w;
|
||||
|
||||
/* port */
|
||||
w = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
|
||||
toggle_sets_sensitivity( enabled_toggle, w );
|
||||
w = hig_workarea_add_row( t, &row, _( "Listen for requests on _port:" ), w, NULL );
|
||||
toggle_sets_sensitivity( enabled_toggle, w );
|
||||
|
||||
/* password protection */
|
||||
s = _( "Require _password:" );
|
||||
w = new_check_button( s, PREF_KEY_RPC_PASSWORD_ENABLED, core );
|
||||
toggle_sets_sensitivity( enabled_toggle, w );
|
||||
w2 = new_entry( PREF_KEY_RPC_PASSWORD, core );
|
||||
gtk_widget_set_sensitive( GTK_WIDGET( w2 ), rpc_enabled && pw_enabled );
|
||||
g_signal_connect( w, "toggled", G_CALLBACK( target_cb ), w2 );
|
||||
g_signal_connect( enabled_toggle, "toggled", G_CALLBACK( target_cb ), w );
|
||||
hig_workarea_add_row_w( t, &row, w, w2, NULL );
|
||||
|
||||
/* access control list */
|
||||
s = _( "Access control list:" );
|
||||
w = new_entry( PREF_KEY_RPC_ACL, core );
|
||||
toggle_sets_sensitivity( enabled_toggle, w );
|
||||
w = hig_workarea_add_row( t, &row, s, w, NULL );
|
||||
toggle_sets_sensitivity( enabled_toggle, w );
|
||||
|
||||
hig_workarea_finish( t, &row );
|
||||
return t;
|
||||
}
|
||||
|
||||
static GtkWidget*
|
||||
networkPage( GObject * core, gpointer alive )
|
||||
{
|
||||
|
@ -572,13 +657,6 @@ networkPage( GObject * core, gpointer alive )
|
|||
g_object_set_data( G_OBJECT(l), "handle", tr_core_handle( TR_CORE( core ) ) );
|
||||
testing_port_cb( NULL, l );
|
||||
|
||||
s = _( "Listen for _RPC requests on port:" );
|
||||
w = new_check_button( s, PREF_KEY_RPC_ENABLED, core );
|
||||
w2 = new_spin_button( PREF_KEY_RPC_PORT, core, 0, 65535, 1 );
|
||||
gtk_widget_set_sensitive( GTK_WIDGET(w2), pref_flag_get( PREF_KEY_RPC_ENABLED ) );
|
||||
g_signal_connect( w, "toggled", G_CALLBACK(target_cb), w2 );
|
||||
hig_workarea_add_row_w( t, &row, w, w2, NULL );
|
||||
|
||||
s = _("Use port _forwarding from my router" );
|
||||
w = new_check_button( s, PREF_KEY_NAT, core );
|
||||
hig_workarea_add_wide_control( t, &row, w );
|
||||
|
@ -625,6 +703,9 @@ tr_prefs_dialog_new( GObject * core, GtkWindow * parent )
|
|||
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||
desktopPage( core ),
|
||||
gtk_label_new (_("Desktop")) );
|
||||
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||
remotePage( core ),
|
||||
gtk_label_new (_("Remote")) );
|
||||
|
||||
g_signal_connect( d, "response", G_CALLBACK(response_cb), core );
|
||||
gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(d)->vbox), n );
|
||||
|
|
|
@ -57,6 +57,8 @@ GtkWidget * tr_prefs_dialog_new( GObject * core, GtkWindow * parent );
|
|||
#define PREF_KEY_RPC_PORT "rpc-port"
|
||||
#define PREF_KEY_RPC_ENABLED "rpc-enabled"
|
||||
#define PREF_KEY_RPC_ACL "rpc-access-control-list"
|
||||
#define PREF_KEY_RPC_PASSWORD_ENABLED "rpc-password-required"
|
||||
#define PREF_KEY_RPC_PASSWORD "rpc-password"
|
||||
|
||||
|
||||
void tr_prefs_init_global( void );
|
||||
|
|
Loading…
Reference in a new issue