code cleanup
This commit is contained in:
parent
215c31f55c
commit
b7c4f59565
14
gtk/hig.c
14
gtk/hig.c
|
@ -17,9 +17,9 @@ GtkWidget*
|
||||||
hig_workarea_create (void)
|
hig_workarea_create (void)
|
||||||
{
|
{
|
||||||
GtkWidget * t = gtk_table_new( 1, 2, FALSE );
|
GtkWidget * t = gtk_table_new( 1, 2, FALSE );
|
||||||
gtk_container_set_border_width( GTK_CONTAINER( t ), 12 );
|
gtk_container_set_border_width( GTK_CONTAINER( t ), GUI_PAD_BIG );
|
||||||
gtk_table_set_col_spacing( GTK_TABLE( t ), 0, 12 );
|
gtk_table_set_col_spacing( GTK_TABLE( t ), 0, GUI_PAD_BIG );
|
||||||
gtk_table_set_row_spacings( GTK_TABLE( t ), 6 );
|
gtk_table_set_row_spacings( GTK_TABLE( t ), GUI_PAD );
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,12 +45,12 @@ hig_workarea_add_section_title( GtkWidget * t,
|
||||||
l = gtk_label_new( buf );
|
l = gtk_label_new( buf );
|
||||||
gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f );
|
gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f );
|
||||||
gtk_label_set_use_markup( GTK_LABEL( l ), TRUE );
|
gtk_label_set_use_markup( GTK_LABEL( l ), TRUE );
|
||||||
gtk_table_attach( GTK_TABLE( t ), l, 0, 2, *row, *row+1, GTK_FILL, 0, 0, 0 );
|
gtk_table_attach( GTK_TABLE( t ), l, 0, 2, *row, *row+1, ~0, 0, 0, 0 );
|
||||||
++*row;
|
++*row;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GtkWidget*
|
static GtkWidget*
|
||||||
control_row_new( GtkWidget * w )
|
rowNew( GtkWidget * w )
|
||||||
{
|
{
|
||||||
GtkWidget * a;
|
GtkWidget * a;
|
||||||
GtkWidget * h = gtk_hbox_new( FALSE, 0 );
|
GtkWidget * h = gtk_hbox_new( FALSE, 0 );
|
||||||
|
@ -75,7 +75,7 @@ hig_workarea_add_wide_control( GtkWidget * t,
|
||||||
int * row,
|
int * row,
|
||||||
GtkWidget * w )
|
GtkWidget * w )
|
||||||
{
|
{
|
||||||
GtkWidget * r = control_row_new( w );
|
GtkWidget * r = rowNew( w );
|
||||||
gtk_table_attach( GTK_TABLE( t ), r, 0, 2, *row, *row+1, GTK_FILL, 0, 0, 0 );
|
gtk_table_attach( GTK_TABLE( t ), r, 0, 2, *row, *row+1, GTK_FILL, 0, 0, 0 );
|
||||||
++*row;
|
++*row;
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ hig_workarea_add_label_w( GtkWidget * t,
|
||||||
int row,
|
int row,
|
||||||
GtkWidget * l )
|
GtkWidget * l )
|
||||||
{
|
{
|
||||||
GtkWidget * w = control_row_new( l );
|
GtkWidget * w = rowNew( l );
|
||||||
gtk_table_attach( GTK_TABLE( t ), w, 0, 1, row, row+1, GTK_FILL, GTK_FILL, 0, 0 );
|
gtk_table_attach( GTK_TABLE( t ), w, 0, 1, row, row+1, GTK_FILL, GTK_FILL, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
46
gtk/hig.h
46
gtk/hig.h
|
@ -16,75 +16,59 @@
|
||||||
#include <gtk/gtkwidget.h>
|
#include <gtk/gtkwidget.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*** utility code to make it slightly less painful to create
|
*** utility code for making dialog layout that follows the Gnome HIG.
|
||||||
*** dialogs compliant with Gnome's Human Interface Guidelines
|
*** see section 8.2.2, Visual Design > Window Layout > Dialogs.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
GtkWidget* hig_workarea_create( void );
|
GtkWidget* hig_workarea_create( void );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_section_divider( GtkWidget * table,
|
||||||
hig_workarea_add_section_divider (GtkWidget * table,
|
|
||||||
int * row );
|
int * row );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_section_title( GtkWidget * table,
|
||||||
hig_workarea_add_section_title (GtkWidget * table,
|
|
||||||
int * row,
|
int * row,
|
||||||
const char * section_title );
|
const char * section_title );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_wide_control( GtkWidget * table,
|
||||||
hig_workarea_add_wide_control (GtkWidget * table,
|
|
||||||
int * row,
|
int * row,
|
||||||
GtkWidget * w );
|
GtkWidget * w );
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget* hig_workarea_add_wide_checkbutton( GtkWidget * table,
|
||||||
hig_workarea_add_wide_checkbutton (GtkWidget * table,
|
|
||||||
int * row,
|
int * row,
|
||||||
const char * mnemonic_string,
|
const char * mnemonic_string,
|
||||||
gboolean is_active );
|
gboolean is_active );
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget* hig_workarea_add_label( GtkWidget * table,
|
||||||
hig_workarea_add_label (GtkWidget * table,
|
|
||||||
int row,
|
int row,
|
||||||
const char * mnemonic_string );
|
const char * mnemonic_string );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_label_w( GtkWidget * table,
|
||||||
hig_workarea_add_label_w (GtkWidget * table,
|
|
||||||
int row,
|
int row,
|
||||||
GtkWidget * label_widget );
|
GtkWidget * label_widget );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_control( GtkWidget * table,
|
||||||
hig_workarea_add_control (GtkWidget * table,
|
|
||||||
int row,
|
int row,
|
||||||
GtkWidget * control );
|
GtkWidget * control );
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget* hig_workarea_add_row (GtkWidget * table,
|
||||||
hig_workarea_add_row (GtkWidget * table,
|
|
||||||
int * row,
|
int * row,
|
||||||
const char * mnemonic_string,
|
const char * mnemonic_string,
|
||||||
GtkWidget * control,
|
GtkWidget * control,
|
||||||
GtkWidget * mnemonic_or_null_if_control_is_mnemonic);
|
GtkWidget * mnemonic_or_null_for_control );
|
||||||
|
|
||||||
void
|
void hig_workarea_add_row_w( GtkWidget * table,
|
||||||
hig_workarea_add_row_w (GtkWidget * table,
|
|
||||||
int * row,
|
int * row,
|
||||||
GtkWidget * label,
|
GtkWidget * label,
|
||||||
GtkWidget * control,
|
GtkWidget * control,
|
||||||
GtkWidget * mnemonic_or_null_if_control_is_mnemonic);
|
GtkWidget * mnemonic_or_null_for_control );
|
||||||
|
|
||||||
void
|
void hig_workarea_finish( GtkWidget * table,
|
||||||
hig_workarea_finish (GtkWidget * table,
|
|
||||||
int * row );
|
int * row );
|
||||||
|
|
||||||
void
|
void hig_message_dialog_set_text( GtkMessageDialog * dialog,
|
||||||
hig_message_dialog_set_text (GtkMessageDialog * dialog,
|
|
||||||
const char * primary,
|
const char * primary,
|
||||||
const char * secondary );
|
const char * secondary );
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
***
|
|
||||||
**/
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
GUI_PAD_SMALL = 3,
|
GUI_PAD_SMALL = 3,
|
||||||
|
|
36
gtk/open.c
36
gtk/open.c
|
@ -11,6 +11,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include "file-list.h"
|
#include "file-list.h"
|
||||||
#include "hig.h"
|
#include "hig.h"
|
||||||
|
@ -20,7 +21,8 @@ struct OpenData
|
||||||
{
|
{
|
||||||
TrCore * core;
|
TrCore * core;
|
||||||
GtkWidget * list;
|
GtkWidget * list;
|
||||||
GtkWidget * run_check;
|
GtkToggleButton * run_check;
|
||||||
|
GtkToggleButton * delete_check;
|
||||||
char * filename;
|
char * filename;
|
||||||
char * destination;
|
char * destination;
|
||||||
TrTorrent * gtor;
|
TrTorrent * gtor;
|
||||||
|
@ -50,9 +52,11 @@ openResponseCB( GtkDialog * dialog, gint response, gpointer gdata )
|
||||||
if( response != GTK_RESPONSE_ACCEPT )
|
if( response != GTK_RESPONSE_ACCEPT )
|
||||||
deleteOldTorrent( data );
|
deleteOldTorrent( data );
|
||||||
else {
|
else {
|
||||||
if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( data->run_check ) ) )
|
if( gtk_toggle_button_get_active( data->run_check ) )
|
||||||
tr_torrentStart( tr_torrent_handle( data->gtor ) );
|
tr_torrentStart( tr_torrent_handle( data->gtor ) );
|
||||||
tr_core_add_torrent( data->core, data->gtor );
|
tr_core_add_torrent( data->core, data->gtor );
|
||||||
|
if( gtk_toggle_button_get_active( data->delete_check ) )
|
||||||
|
g_unlink( data->filename );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,12 +68,12 @@ openResponseCB( GtkDialog * dialog, gint response, gpointer gdata )
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
updateTorrent( struct OpenData * data )
|
updateTorrent( struct OpenData * o )
|
||||||
{
|
{
|
||||||
if( data->gtor )
|
if( o->gtor )
|
||||||
tr_torrentSetFolder( tr_torrent_handle( data->gtor ), data->destination );
|
tr_torrentSetFolder( tr_torrent_handle( o->gtor ), o->destination );
|
||||||
|
|
||||||
file_list_set_torrent( data->list, data->gtor );
|
file_list_set_torrent( o->list, o->gtor );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -79,7 +83,6 @@ sourceChanged( GtkFileChooserButton * b, gpointer gdata )
|
||||||
|
|
||||||
deleteOldTorrent( data );
|
deleteOldTorrent( data );
|
||||||
|
|
||||||
/* update the filename */
|
|
||||||
g_free( data->filename );
|
g_free( data->filename );
|
||||||
data->filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( b ) );
|
data->filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( b ) );
|
||||||
|
|
||||||
|
@ -89,8 +92,9 @@ sourceChanged( GtkFileChooserButton * b, gpointer gdata )
|
||||||
tr_torrent * torrent;
|
tr_torrent * torrent;
|
||||||
tr_handle * handle = tr_core_handle( data->core );
|
tr_handle * handle = tr_core_handle( data->core );
|
||||||
tr_ctorSetMetainfoFromFile( data->ctor, data->filename );
|
tr_ctorSetMetainfoFromFile( data->ctor, data->filename );
|
||||||
tr_ctorSetPaused( data->ctor, TR_FORCE, TRUE );
|
|
||||||
tr_ctorSetDestination( data->ctor, TR_FORCE, data->destination );
|
tr_ctorSetDestination( data->ctor, TR_FORCE, data->destination );
|
||||||
|
tr_ctorSetPaused( data->ctor, TR_FORCE, TRUE );
|
||||||
|
tr_ctorSetDeleteSource( data->ctor, FALSE );
|
||||||
if(( torrent = tr_torrentNew( handle, data->ctor, &err )))
|
if(( torrent = tr_torrentNew( handle, data->ctor, &err )))
|
||||||
data->gtor = tr_torrent_new_preexisting( torrent );
|
data->gtor = tr_torrent_new_preexisting( torrent );
|
||||||
}
|
}
|
||||||
|
@ -110,6 +114,7 @@ static void
|
||||||
destinationChanged( GtkFileChooserButton * b, gpointer gdata )
|
destinationChanged( GtkFileChooserButton * b, gpointer gdata )
|
||||||
{
|
{
|
||||||
struct OpenData * data = gdata;
|
struct OpenData * data = gdata;
|
||||||
|
|
||||||
g_free( data->destination );
|
g_free( data->destination );
|
||||||
data->destination = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( b ) );
|
data->destination = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( b ) );
|
||||||
|
|
||||||
|
@ -138,8 +143,7 @@ makeaddwind( GtkWindow * parent,
|
||||||
uint8_t flag;
|
uint8_t flag;
|
||||||
|
|
||||||
/* make the dialog */
|
/* make the dialog */
|
||||||
d = gtk_dialog_new_with_buttons( _( "Open Torrent" ),
|
d = gtk_dialog_new_with_buttons( _( "Open Torrent" ), parent,
|
||||||
parent,
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_NO_SEPARATOR,
|
GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_NO_SEPARATOR,
|
||||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||||
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
||||||
|
@ -152,7 +156,8 @@ makeaddwind( GtkWindow * parent,
|
||||||
data->ctor = ctor;
|
data->ctor = ctor;
|
||||||
data->filename = g_strdup( tr_ctorGetSourceFile( ctor ) );
|
data->filename = g_strdup( tr_ctorGetSourceFile( ctor ) );
|
||||||
data->destination = g_strdup( str );
|
data->destination = g_strdup( str );
|
||||||
g_signal_connect( G_OBJECT( d ), "response", G_CALLBACK( openResponseCB ), data );
|
g_signal_connect( G_OBJECT( d ), "response",
|
||||||
|
G_CALLBACK( openResponseCB ), data );
|
||||||
|
|
||||||
t = gtk_table_new( 6, 2, FALSE );
|
t = gtk_table_new( 6, 2, FALSE );
|
||||||
gtk_container_set_border_width( GTK_CONTAINER( t ), GUI_PAD_BIG );
|
gtk_container_set_border_width( GTK_CONTAINER( t ), GUI_PAD_BIG );
|
||||||
|
@ -164,7 +169,8 @@ makeaddwind( GtkWindow * parent,
|
||||||
gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f );
|
gtk_misc_set_alignment( GTK_MISC( l ), 0.0f, 0.5f );
|
||||||
gtk_table_attach( GTK_TABLE( t ), l, col, col+1, row, row+1, GTK_FILL, 0, 0, 0 );
|
gtk_table_attach( GTK_TABLE( t ), l, col, col+1, row, row+1, GTK_FILL, 0, 0, 0 );
|
||||||
++col;
|
++col;
|
||||||
w = gtk_file_chooser_button_new( _( "Select Torrent" ), GTK_FILE_CHOOSER_ACTION_OPEN );
|
w = gtk_file_chooser_button_new( _( "Select Torrent" ),
|
||||||
|
GTK_FILE_CHOOSER_ACTION_OPEN );
|
||||||
gtk_table_attach( GTK_TABLE( t ), w, col, col+1, row, row+1, ~0, 0, 0, 0 );
|
gtk_table_attach( GTK_TABLE( t ), w, col, col+1, row, row+1, ~0, 0, 0, 0 );
|
||||||
gtk_label_set_mnemonic_widget( GTK_LABEL( l ), w );
|
gtk_label_set_mnemonic_widget( GTK_LABEL( l ), w );
|
||||||
filter = gtk_file_filter_new( );
|
filter = gtk_file_filter_new( );
|
||||||
|
@ -175,7 +181,8 @@ makeaddwind( GtkWindow * parent,
|
||||||
gtk_file_filter_set_name( filter, _( "All files" ) );
|
gtk_file_filter_set_name( filter, _( "All files" ) );
|
||||||
gtk_file_filter_add_pattern( filter, "*" );
|
gtk_file_filter_add_pattern( filter, "*" );
|
||||||
gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( w ), filter );
|
gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( w ), filter );
|
||||||
g_signal_connect( w, "selection-changed", G_CALLBACK( sourceChanged ), data );
|
g_signal_connect( w, "selection-changed",
|
||||||
|
G_CALLBACK( sourceChanged ), data );
|
||||||
if( data->filename )
|
if( data->filename )
|
||||||
if( !gtk_file_chooser_set_filename( GTK_FILE_CHOOSER( w ), data->filename ) )
|
if( !gtk_file_chooser_set_filename( GTK_FILE_CHOOSER( w ), data->filename ) )
|
||||||
g_warning( "couldn't select '%s'", data->filename );
|
g_warning( "couldn't select '%s'", data->filename );
|
||||||
|
@ -209,6 +216,7 @@ makeaddwind( GtkWindow * parent,
|
||||||
++row;
|
++row;
|
||||||
col = 0;
|
col = 0;
|
||||||
w = gtk_check_button_new_with_mnemonic( _( "_Delete original torrent file" ) );
|
w = gtk_check_button_new_with_mnemonic( _( "_Delete original torrent file" ) );
|
||||||
|
data->delete_check = GTK_TOGGLE_BUTTON( w );
|
||||||
if( tr_ctorGetDeleteSource( ctor, &flag ) )
|
if( tr_ctorGetDeleteSource( ctor, &flag ) )
|
||||||
g_assert_not_reached( );
|
g_assert_not_reached( );
|
||||||
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), flag );
|
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), flag );
|
||||||
|
@ -217,7 +225,7 @@ makeaddwind( GtkWindow * parent,
|
||||||
++row;
|
++row;
|
||||||
col = 0;
|
col = 0;
|
||||||
w = gtk_check_button_new_with_mnemonic( _( "_Start when added" ) );
|
w = gtk_check_button_new_with_mnemonic( _( "_Start when added" ) );
|
||||||
data->run_check = w;
|
data->run_check = GTK_TOGGLE_BUTTON( w );
|
||||||
if( tr_ctorGetPaused( ctor, TR_FORCE, &flag ) )
|
if( tr_ctorGetPaused( ctor, TR_FORCE, &flag ) )
|
||||||
g_assert_not_reached( );
|
g_assert_not_reached( );
|
||||||
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), !flag );
|
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), !flag );
|
||||||
|
|
|
@ -698,6 +698,7 @@ static GtkWidget* info_page_new (tr_torrent * tor)
|
||||||
|
|
||||||
g_snprintf (name, sizeof(name), namefmt, _("Comment"));
|
g_snprintf (name, sizeof(name), namefmt, _("Comment"));
|
||||||
b = gtk_text_buffer_new (NULL);
|
b = gtk_text_buffer_new (NULL);
|
||||||
|
if( info->comment )
|
||||||
gtk_text_buffer_set_text (b, info->comment, -1);
|
gtk_text_buffer_set_text (b, info->comment, -1);
|
||||||
w = gtk_text_view_new_with_buffer (b);
|
w = gtk_text_view_new_with_buffer (b);
|
||||||
gtk_widget_set_size_request (w, 0u, 100u);
|
gtk_widget_set_size_request (w, 0u, 100u);
|
||||||
|
|
105
gtk/tr_core.c
105
gtk/tr_core.c
|
@ -22,15 +22,13 @@
|
||||||
* DEALINGS IN THE SOFTWARE.
|
* DEALINGS IN THE SOFTWARE.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <string.h> /* strcmp, strlen */
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
|
|
||||||
#include <libtransmission/transmission.h>
|
#include <libtransmission/transmission.h>
|
||||||
#include <libtransmission/utils.h>
|
#include <libtransmission/utils.h> /* tr_strcmp */
|
||||||
|
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "tr_core.h"
|
#include "tr_core.h"
|
||||||
|
@ -43,14 +41,13 @@ struct TrCorePrivate
|
||||||
GtkTreeModel * model;
|
GtkTreeModel * model;
|
||||||
tr_handle * handle;
|
tr_handle * handle;
|
||||||
int nextid;
|
int nextid;
|
||||||
gboolean quitting;
|
|
||||||
struct core_stats stats;
|
struct core_stats stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tr_core_marshal_err( GClosure * closure, GValue * ret UNUSED, guint count,
|
tr_core_marshal_err( GClosure * closure, GValue * ret UNUSED,
|
||||||
const GValue * vals, gpointer hint UNUSED,
|
guint count, const GValue * vals,
|
||||||
gpointer marshal )
|
gpointer hint UNUSED, gpointer marshal )
|
||||||
{
|
{
|
||||||
typedef void (*TRMarshalErr)
|
typedef void (*TRMarshalErr)
|
||||||
( gpointer, enum tr_core_err, const char *, gpointer );
|
( gpointer, enum tr_core_err, const char *, gpointer );
|
||||||
|
@ -60,22 +57,21 @@ tr_core_marshal_err( GClosure * closure, GValue * ret UNUSED, guint count,
|
||||||
const char * errstr;
|
const char * errstr;
|
||||||
gpointer inst, gdata;
|
gpointer inst, gdata;
|
||||||
|
|
||||||
g_return_if_fail( 3 == count );
|
g_return_if_fail( count == 3 );
|
||||||
|
|
||||||
inst = g_value_peek_pointer( vals );
|
inst = g_value_peek_pointer( vals );
|
||||||
errcode = g_value_get_int( vals + 1 );
|
errcode = g_value_get_int( vals + 1 );
|
||||||
errstr = g_value_get_string( vals + 2 );
|
errstr = g_value_get_string( vals + 2 );
|
||||||
gdata = closure->data;
|
gdata = closure->data;
|
||||||
|
|
||||||
callback = (TRMarshalErr) ( NULL == marshal ?
|
callback = (TRMarshalErr)( marshal ? marshal : cclosure->callback );
|
||||||
cclosure->callback : marshal );
|
|
||||||
callback( inst, errcode, errstr, gdata );
|
callback( inst, errcode, errstr, gdata );
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tr_core_marshal_prompt( GClosure * closure, GValue * ret UNUSED, guint count,
|
tr_core_marshal_prompt( GClosure * closure, GValue * ret UNUSED,
|
||||||
const GValue * vals, gpointer hint UNUSED,
|
guint count, const GValue * vals,
|
||||||
gpointer marshal )
|
gpointer hint UNUSED, gpointer marshal )
|
||||||
{
|
{
|
||||||
typedef void (*TRMarshalPrompt)( gpointer, GList *, gpointer, gpointer );
|
typedef void (*TRMarshalPrompt)( gpointer, GList *, gpointer, gpointer );
|
||||||
TRMarshalPrompt callback;
|
TRMarshalPrompt callback;
|
||||||
|
@ -84,15 +80,14 @@ tr_core_marshal_prompt( GClosure * closure, GValue * ret UNUSED, guint count,
|
||||||
gpointer ctor;
|
gpointer ctor;
|
||||||
gpointer inst, gdata;
|
gpointer inst, gdata;
|
||||||
|
|
||||||
g_return_if_fail( 3 == count );
|
g_return_if_fail( count == 3 );
|
||||||
|
|
||||||
inst = g_value_peek_pointer( vals );
|
inst = g_value_peek_pointer( vals );
|
||||||
paths = g_value_get_pointer( vals + 1 );
|
paths = g_value_peek_pointer( vals + 1 );
|
||||||
ctor = g_value_get_pointer( vals + 2 );
|
ctor = g_value_peek_pointer( vals + 2 );
|
||||||
gdata = closure->data;
|
gdata = closure->data;
|
||||||
|
|
||||||
callback = (TRMarshalPrompt) ( NULL == marshal ?
|
callback = (TRMarshalPrompt)( marshal ? marshal : cclosure->callback );
|
||||||
cclosure->callback : marshal );
|
|
||||||
callback( inst, paths, ctor, gdata );
|
callback( inst, paths, ctor, gdata );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,18 +101,18 @@ static void
|
||||||
tr_core_dispose( GObject * obj )
|
tr_core_dispose( GObject * obj )
|
||||||
{
|
{
|
||||||
TrCore * core = TR_CORE( obj );
|
TrCore * core = TR_CORE( obj );
|
||||||
GObjectClass * parent;
|
|
||||||
|
|
||||||
if( !isDisposed( core ) )
|
if( !isDisposed( core ) )
|
||||||
{
|
{
|
||||||
|
GObjectClass * parent;
|
||||||
|
|
||||||
pref_save( NULL );
|
pref_save( NULL );
|
||||||
core->priv = NULL;
|
core->priv = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
parent = g_type_class_peek( g_type_parent( TR_CORE_TYPE ) );
|
parent = g_type_class_peek( g_type_parent( TR_CORE_TYPE ) );
|
||||||
parent->dispose( obj );
|
parent->dispose( obj );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tr_core_class_init( gpointer g_class, gpointer g_class_data UNUSED )
|
tr_core_class_init( gpointer g_class, gpointer g_class_data UNUSED )
|
||||||
|
@ -125,12 +120,11 @@ tr_core_class_init( gpointer g_class, gpointer g_class_data UNUSED )
|
||||||
GObjectClass * gobject_class;
|
GObjectClass * gobject_class;
|
||||||
TrCoreClass * core_class;
|
TrCoreClass * core_class;
|
||||||
|
|
||||||
|
g_type_class_add_private( g_class, sizeof(struct TrCorePrivate) );
|
||||||
|
|
||||||
gobject_class = G_OBJECT_CLASS( g_class );
|
gobject_class = G_OBJECT_CLASS( g_class );
|
||||||
gobject_class->dispose = tr_core_dispose;
|
gobject_class->dispose = tr_core_dispose;
|
||||||
|
|
||||||
g_type_class_add_private( g_class,
|
|
||||||
sizeof(struct TrCorePrivate) );
|
|
||||||
|
|
||||||
|
|
||||||
core_class = TR_CORE_CLASS( g_class );
|
core_class = TR_CORE_CLASS( g_class );
|
||||||
core_class->errsig = g_signal_new( "error", G_TYPE_FROM_CLASS( g_class ),
|
core_class->errsig = g_signal_new( "error", G_TYPE_FROM_CLASS( g_class ),
|
||||||
|
@ -153,11 +147,15 @@ tr_core_class_init( gpointer g_class, gpointer g_class_data UNUSED )
|
||||||
G_TYPE_NONE, 1, G_TYPE_STRING );
|
G_TYPE_NONE, 1, G_TYPE_STRING );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
**** SORTING
|
||||||
|
***/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
compareDouble( double a, double b )
|
compareDouble( double a, double b )
|
||||||
{
|
{
|
||||||
if( a < b ) return -1;
|
if( a < b ) return -1;
|
||||||
if( b < a ) return 1;
|
if( a > b ) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,15 +185,6 @@ compareByActivity( GtkTreeModel * model,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
compareByDateAdded( GtkTreeModel * model UNUSED,
|
|
||||||
GtkTreeIter * a UNUSED,
|
|
||||||
GtkTreeIter * b UNUSED,
|
|
||||||
gpointer user_data UNUSED )
|
|
||||||
{
|
|
||||||
return 0; /* FIXME */
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
compareByName( GtkTreeModel * model,
|
compareByName( GtkTreeModel * model,
|
||||||
GtkTreeIter * a,
|
GtkTreeIter * a,
|
||||||
|
@ -264,11 +253,6 @@ compareByTracker( GtkTreeModel * model,
|
||||||
tr_torrentInfo(tb)->primaryAddress );
|
tr_torrentInfo(tb)->primaryAddress );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***
|
|
||||||
****
|
|
||||||
***/
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setSort( TrCore * core, const char * mode, gboolean isReversed )
|
setSort( TrCore * core, const char * mode, gboolean isReversed )
|
||||||
{
|
{
|
||||||
|
@ -279,8 +263,6 @@ setSort( TrCore * core, const char * mode, gboolean isReversed )
|
||||||
|
|
||||||
if( !strcmp( mode, "sort-by-activity" ) )
|
if( !strcmp( mode, "sort-by-activity" ) )
|
||||||
gtk_tree_sortable_set_sort_func( sortable, col, compareByActivity, NULL, NULL );
|
gtk_tree_sortable_set_sort_func( sortable, col, compareByActivity, NULL, NULL );
|
||||||
else if( !strcmp( mode, "sort-by-date-added" ) )
|
|
||||||
gtk_tree_sortable_set_sort_func( sortable, col, compareByDateAdded, NULL, NULL );
|
|
||||||
else if( !strcmp( mode, "sort-by-progress" ) )
|
else if( !strcmp( mode, "sort-by-progress" ) )
|
||||||
gtk_tree_sortable_set_sort_func( sortable, col, compareByProgress, NULL, NULL );
|
gtk_tree_sortable_set_sort_func( sortable, col, compareByProgress, NULL, NULL );
|
||||||
else if( !strcmp( mode, "sort-by-state" ) )
|
else if( !strcmp( mode, "sort-by-state" ) )
|
||||||
|
@ -298,7 +280,8 @@ setSort( TrCore * core, const char * mode, gboolean isReversed )
|
||||||
static void
|
static void
|
||||||
prefsChanged( TrCore * core, const char * key, gpointer data UNUSED )
|
prefsChanged( TrCore * core, const char * key, gpointer data UNUSED )
|
||||||
{
|
{
|
||||||
if( !strcmp( key, PREF_KEY_SORT_MODE ) || !strcmp( key, PREF_KEY_SORT_REVERSED ) )
|
if( !strcmp( key, PREF_KEY_SORT_MODE ) ||
|
||||||
|
!strcmp( key, PREF_KEY_SORT_REVERSED ) )
|
||||||
{
|
{
|
||||||
char * mode = pref_string_get( PREF_KEY_SORT_MODE );
|
char * mode = pref_string_get( PREF_KEY_SORT_MODE );
|
||||||
gboolean isReversed = pref_flag_get( PREF_KEY_SORT_REVERSED );
|
gboolean isReversed = pref_flag_get( PREF_KEY_SORT_REVERSED );
|
||||||
|
@ -350,7 +333,7 @@ tr_core_init( GTypeInstance * instance, gpointer g_class UNUSED )
|
||||||
pref_int_get( PREF_KEY_DL_LIMIT ),
|
pref_int_get( PREF_KEY_DL_LIMIT ),
|
||||||
pref_int_get( PREF_KEY_MAX_PEERS_GLOBAL ),
|
pref_int_get( PREF_KEY_MAX_PEERS_GLOBAL ),
|
||||||
pref_int_get( PREF_KEY_MSGLEVEL ),
|
pref_int_get( PREF_KEY_MSGLEVEL ),
|
||||||
TRUE );
|
TRUE /* message queueing */ );
|
||||||
|
|
||||||
/* create the model used to store torrent data */
|
/* create the model used to store torrent data */
|
||||||
g_assert( ALEN( types ) == MC_ROW_COUNT );
|
g_assert( ALEN( types ) == MC_ROW_COUNT );
|
||||||
|
@ -359,7 +342,6 @@ tr_core_init( GTypeInstance * instance, gpointer g_class UNUSED )
|
||||||
p->model = GTK_TREE_MODEL( store );
|
p->model = GTK_TREE_MODEL( store );
|
||||||
p->handle = h;
|
p->handle = h;
|
||||||
p->nextid = 1;
|
p->nextid = 1;
|
||||||
p->quitting = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GType
|
GType
|
||||||
|
@ -446,6 +428,7 @@ doCollate( const char * in )
|
||||||
casefold = g_utf8_casefold( in, end-in );
|
casefold = g_utf8_casefold( in, end-in );
|
||||||
ret = g_utf8_collate_key( casefold, -1 );
|
ret = g_utf8_collate_key( casefold, -1 );
|
||||||
g_free( casefold );
|
g_free( casefold );
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,15 +466,14 @@ tr_core_load( TrCore * self, gboolean forcePaused )
|
||||||
char * path;
|
char * path;
|
||||||
tr_ctor * ctor;
|
tr_ctor * ctor;
|
||||||
|
|
||||||
TR_IS_CORE( self );
|
|
||||||
|
|
||||||
path = getdownloaddir( );
|
path = getdownloaddir( );
|
||||||
|
|
||||||
ctor = tr_ctorNew( tr_core_handle( self ) );
|
ctor = tr_ctorNew( tr_core_handle( self ) );
|
||||||
if( forcePaused )
|
if( forcePaused )
|
||||||
tr_ctorSetPaused( ctor, TR_FORCE, TRUE );
|
tr_ctorSetPaused( ctor, TR_FORCE, TRUE );
|
||||||
tr_ctorSetDestination( ctor, TR_FALLBACK, path );
|
tr_ctorSetDestination( ctor, TR_FALLBACK, path );
|
||||||
tr_ctorSetMaxConnectedPeers( ctor, TR_FALLBACK, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
tr_ctorSetMaxConnectedPeers( ctor, TR_FALLBACK,
|
||||||
|
pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
||||||
|
|
||||||
torrents = tr_loadTorrents ( tr_core_handle( self ), ctor, &count );
|
torrents = tr_loadTorrents ( tr_core_handle( self ), ctor, &count );
|
||||||
for( i=0; i<count; ++i )
|
for( i=0; i<count; ++i )
|
||||||
|
@ -507,9 +489,7 @@ tr_core_load( TrCore * self, gboolean forcePaused )
|
||||||
static void
|
static void
|
||||||
tr_core_errsig( TrCore * self, enum tr_core_err type, const char * msg )
|
tr_core_errsig( TrCore * self, enum tr_core_err type, const char * msg )
|
||||||
{
|
{
|
||||||
TrCoreClass * class;
|
TrCoreClass * class = g_type_class_peek( TR_CORE_TYPE );
|
||||||
|
|
||||||
class = g_type_class_peek( TR_CORE_TYPE );
|
|
||||||
g_signal_emit( self, class->errsig, 0, type, msg );
|
g_signal_emit( self, class->errsig, 0, type, msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,10 +500,12 @@ tr_core_apply_defaults( tr_ctor * ctor )
|
||||||
tr_ctorSetPaused( ctor, TR_FORCE, !pref_flag_get( PREF_KEY_START ) );
|
tr_ctorSetPaused( ctor, TR_FORCE, !pref_flag_get( PREF_KEY_START ) );
|
||||||
|
|
||||||
if( tr_ctorGetDeleteSource( ctor, NULL ) )
|
if( tr_ctorGetDeleteSource( ctor, NULL ) )
|
||||||
tr_ctorSetDeleteSource( ctor, pref_flag_get( PREF_KEY_DELETE_ORIGINAL ) );
|
tr_ctorSetDeleteSource( ctor,
|
||||||
|
pref_flag_get( PREF_KEY_DELETE_ORIGINAL ) );
|
||||||
|
|
||||||
if( tr_ctorGetMaxConnectedPeers( ctor, TR_FORCE, NULL ) )
|
if( tr_ctorGetMaxConnectedPeers( ctor, TR_FORCE, NULL ) )
|
||||||
tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE, pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
tr_ctorSetMaxConnectedPeers( ctor, TR_FORCE,
|
||||||
|
pref_int_get( PREF_KEY_MAX_PEERS_PER_TORRENT ) );
|
||||||
|
|
||||||
if( tr_ctorGetDestination( ctor, TR_FORCE, NULL ) ) {
|
if( tr_ctorGetDestination( ctor, TR_FORCE, NULL ) ) {
|
||||||
char * path = pref_string_get( PREF_KEY_DIR_DEFAULT );
|
char * path = pref_string_get( PREF_KEY_DIR_DEFAULT );
|
||||||
|
@ -536,22 +518,15 @@ void
|
||||||
tr_core_add_ctor( TrCore * self, tr_ctor * ctor )
|
tr_core_add_ctor( TrCore * self, tr_ctor * ctor )
|
||||||
{
|
{
|
||||||
TrTorrent * tor;
|
TrTorrent * tor;
|
||||||
char * errstr;
|
char * errstr = NULL;
|
||||||
|
|
||||||
errstr = NULL;
|
|
||||||
|
|
||||||
tr_core_apply_defaults( ctor );
|
tr_core_apply_defaults( ctor );
|
||||||
tor = tr_torrent_new_ctor( tr_core_handle( self ), ctor, &errstr );
|
|
||||||
if( !tor )
|
if(( tor = tr_torrent_new_ctor( tr_core_handle( self ), ctor, &errstr )))
|
||||||
{
|
tr_core_add_torrent( self, tor );
|
||||||
|
else{
|
||||||
tr_core_errsig( self, TR_CORE_ERR_ADD_TORRENT, errstr );
|
tr_core_errsig( self, TR_CORE_ERR_ADD_TORRENT, errstr );
|
||||||
g_free( errstr );
|
g_free( errstr );
|
||||||
errstr = NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_assert( !errstr );
|
|
||||||
tr_core_add_torrent( self, tor );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -87,22 +87,16 @@ enum tr_core_err
|
||||||
TR_CORE_ERR_SAVE_STATE /* error saving state */
|
TR_CORE_ERR_SAVE_STATE /* error saving state */
|
||||||
};
|
};
|
||||||
|
|
||||||
GType
|
GType tr_core_get_type( void );
|
||||||
tr_core_get_type( void );
|
|
||||||
|
|
||||||
TrCore *
|
TrCore * tr_core_new( void );
|
||||||
tr_core_new( void );
|
|
||||||
|
|
||||||
/* Return the model used without incrementing the reference count */
|
/* Return the model used without incrementing the reference count */
|
||||||
GtkTreeModel *
|
GtkTreeModel * tr_core_model( TrCore * self );
|
||||||
tr_core_model( TrCore * self );
|
|
||||||
|
|
||||||
/* Returns the libtransmission handle */
|
tr_handle * tr_core_handle( TrCore * self );
|
||||||
tr_handle *
|
|
||||||
tr_core_handle( TrCore * self );
|
|
||||||
|
|
||||||
const struct core_stats*
|
const struct core_stats* tr_core_get_stats( const TrCore * self );
|
||||||
tr_core_get_stats( const TrCore * self );
|
|
||||||
|
|
||||||
/******
|
/******
|
||||||
*******
|
*******
|
||||||
|
@ -144,32 +138,29 @@ void tr_core_torrents_added( TrCore * self );
|
||||||
*******
|
*******
|
||||||
******/
|
******/
|
||||||
|
|
||||||
/* remove a torrent, waiting for it to pause if necessary */
|
void tr_core_delete_torrent( TrCore * self, GtkTreeIter * iter );
|
||||||
void
|
|
||||||
tr_core_delete_torrent( TrCore * self, GtkTreeIter * iter /* XXX */ );
|
|
||||||
|
|
||||||
/* update the model with current torrent status */
|
/* update the model with current torrent status */
|
||||||
void
|
void tr_core_update( TrCore * self );
|
||||||
tr_core_update( TrCore * self );
|
|
||||||
|
|
||||||
/* emit the "quit" signal */
|
/* emit the "quit" signal */
|
||||||
void
|
void tr_core_quit( TrCore * self );
|
||||||
tr_core_quit( TrCore * self );
|
|
||||||
|
|
||||||
/* Set a preference value, save the prefs file, and emit the
|
/* Set a preference value, save the prefs file, and emit the
|
||||||
"prefs-changed" signal */
|
"prefs-changed" signal */
|
||||||
void
|
void tr_core_set_pref( TrCore * self, const char * key, const char * val );
|
||||||
tr_core_set_pref( TrCore * self, const char * key, const char * val );
|
|
||||||
|
|
||||||
/* Set a boolean preference value, save the prefs file, and emit the
|
/* Set a boolean preference value, save the prefs file, and emit the
|
||||||
"prefs-changed" signal */
|
"prefs-changed" signal */
|
||||||
void
|
void tr_core_set_pref_bool( TrCore * self, const char * key, gboolean val );
|
||||||
tr_core_set_pref_bool( TrCore * self, const char * key, gboolean val );
|
|
||||||
|
|
||||||
/* Set an integer preference value, save the prefs file, and emit the
|
/* Set an integer preference value, save the prefs file, and emit the
|
||||||
"prefs-changed" signal */
|
"prefs-changed" signal */
|
||||||
void
|
void tr_core_set_pref_int( TrCore * self, const char * key, int val );
|
||||||
tr_core_set_pref_int( TrCore * self, const char * key, int val );
|
|
||||||
|
/**
|
||||||
|
***
|
||||||
|
**/
|
||||||
|
|
||||||
/* column names for the model used to store torrent information */
|
/* column names for the model used to store torrent information */
|
||||||
/* keep this in sync with the type array in tr_core_init() in tr_core.c */
|
/* keep this in sync with the type array in tr_core_init() in tr_core.c */
|
||||||
|
|
|
@ -69,7 +69,7 @@ tr_prefs_init_global( void )
|
||||||
***
|
***
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#define PREFS_KEY "prefs-key"
|
#define PREF_KEY "pref-key"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
response_cb( GtkDialog * dialog, int response UNUSED, gpointer unused UNUSED )
|
response_cb( GtkDialog * dialog, int response UNUSED, gpointer unused UNUSED )
|
||||||
|
@ -80,7 +80,7 @@ response_cb( GtkDialog * dialog, int response UNUSED, gpointer unused UNUSED )
|
||||||
static void
|
static void
|
||||||
toggled_cb( GtkToggleButton * w, gpointer core )
|
toggled_cb( GtkToggleButton * w, gpointer core )
|
||||||
{
|
{
|
||||||
const char * key = g_object_get_data( G_OBJECT(w), PREFS_KEY );
|
const char * key = g_object_get_data( G_OBJECT(w), PREF_KEY );
|
||||||
const gboolean flag = gtk_toggle_button_get_active( w );
|
const gboolean flag = gtk_toggle_button_get_active( w );
|
||||||
tr_core_set_pref_bool( TR_CORE(core), key, flag );
|
tr_core_set_pref_bool( TR_CORE(core), key, flag );
|
||||||
}
|
}
|
||||||
|
@ -89,7 +89,7 @@ static GtkWidget*
|
||||||
new_check_button( const char * mnemonic, const char * key, gpointer core )
|
new_check_button( const char * mnemonic, const char * key, gpointer core )
|
||||||
{
|
{
|
||||||
GtkWidget * w = gtk_check_button_new_with_mnemonic( mnemonic );
|
GtkWidget * w = gtk_check_button_new_with_mnemonic( mnemonic );
|
||||||
g_object_set_data_full( G_OBJECT(w), PREFS_KEY, g_strdup(key), g_free );
|
g_object_set_data_full( G_OBJECT(w), PREF_KEY, g_strdup(key), g_free );
|
||||||
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(w), pref_flag_get(key) );
|
gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(w), pref_flag_get(key) );
|
||||||
g_signal_connect( w, "toggled", G_CALLBACK(toggled_cb), core );
|
g_signal_connect( w, "toggled", G_CALLBACK(toggled_cb), core );
|
||||||
return w;
|
return w;
|
||||||
|
@ -98,7 +98,7 @@ new_check_button( const char * mnemonic, const char * key, gpointer core )
|
||||||
static void
|
static void
|
||||||
spun_cb( GtkSpinButton * w, gpointer core )
|
spun_cb( GtkSpinButton * w, gpointer core )
|
||||||
{
|
{
|
||||||
const char * key = g_object_get_data( G_OBJECT(w), PREFS_KEY );
|
const char * key = g_object_get_data( G_OBJECT(w), PREF_KEY );
|
||||||
const int value = gtk_spin_button_get_value_as_int( w );
|
const int value = gtk_spin_button_get_value_as_int( w );
|
||||||
tr_core_set_pref_int( TR_CORE(core), key, value );
|
tr_core_set_pref_int( TR_CORE(core), key, value );
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ static GtkWidget*
|
||||||
new_spin_button( const char * key, gpointer core, int low, int high, int step )
|
new_spin_button( const char * key, gpointer core, int low, int high, int step )
|
||||||
{
|
{
|
||||||
GtkWidget * w = gtk_spin_button_new_with_range( low, high, step );
|
GtkWidget * w = gtk_spin_button_new_with_range( low, high, step );
|
||||||
g_object_set_data_full( G_OBJECT(w), PREFS_KEY, g_strdup(key), g_free );
|
g_object_set_data_full( G_OBJECT(w), PREF_KEY, g_strdup(key), g_free );
|
||||||
gtk_spin_button_set_digits( GTK_SPIN_BUTTON(w), 0 );
|
gtk_spin_button_set_digits( GTK_SPIN_BUTTON(w), 0 );
|
||||||
gtk_spin_button_set_value( GTK_SPIN_BUTTON(w), pref_int_get(key) );
|
gtk_spin_button_set_value( GTK_SPIN_BUTTON(w), pref_int_get(key) );
|
||||||
g_signal_connect( w, "value-changed", G_CALLBACK(spun_cb), core );
|
g_signal_connect( w, "value-changed", G_CALLBACK(spun_cb), core );
|
||||||
|
@ -117,7 +117,7 @@ new_spin_button( const char * key, gpointer core, int low, int high, int step )
|
||||||
static void
|
static void
|
||||||
chosen_cb( GtkFileChooser * w, gpointer core )
|
chosen_cb( GtkFileChooser * w, gpointer core )
|
||||||
{
|
{
|
||||||
const char * key = g_object_get_data( G_OBJECT(w), PREFS_KEY );
|
const char * key = g_object_get_data( G_OBJECT(w), PREF_KEY );
|
||||||
char * value = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(w) );
|
char * value = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(w) );
|
||||||
tr_core_set_pref( TR_CORE(core), key, value );
|
tr_core_set_pref( TR_CORE(core), key, value );
|
||||||
g_free( value );
|
g_free( value );
|
||||||
|
@ -129,16 +129,17 @@ new_path_chooser_button( const char * key, gpointer core )
|
||||||
GtkWidget * w = gtk_file_chooser_button_new( NULL,
|
GtkWidget * w = gtk_file_chooser_button_new( NULL,
|
||||||
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER );
|
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER );
|
||||||
char * path = pref_string_get( key );
|
char * path = pref_string_get( key );
|
||||||
g_object_set_data_full( G_OBJECT(w), PREFS_KEY, g_strdup(key), g_free );
|
g_object_set_data_full( G_OBJECT(w), PREF_KEY, g_strdup(key), g_free );
|
||||||
g_signal_connect( w, "selection-changed", G_CALLBACK(chosen_cb), core );
|
g_signal_connect( w, "selection-changed", G_CALLBACK(chosen_cb), core );
|
||||||
gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(w), path );
|
gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(w), path );
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
target_cb( GtkWidget * widget, gpointer target )
|
target_cb( GtkWidget * tb, gpointer target )
|
||||||
{
|
{
|
||||||
gtk_widget_set_sensitive( GTK_WIDGET(target), gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(widget) ) );
|
const gboolean b = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( tb ) );
|
||||||
|
gtk_widget_set_sensitive( GTK_WIDGET(target), b );
|
||||||
}
|
}
|
||||||
|
|
||||||
struct test_port_data
|
struct test_port_data
|
||||||
|
@ -155,7 +156,7 @@ test_port( gpointer data_gpointer )
|
||||||
if( *data->alive )
|
if( *data->alive )
|
||||||
{
|
{
|
||||||
GObject * o = G_OBJECT( data->label );
|
GObject * o = G_OBJECT( data->label );
|
||||||
GtkSpinButton * spin = GTK_SPIN_BUTTON( g_object_get_data( o, "tr-port-spin" ) );
|
GtkSpinButton * spin = g_object_get_data( o, "tr-port-spin" );
|
||||||
const int port = gtk_spin_button_get_value_as_int( spin );
|
const int port = gtk_spin_button_get_value_as_int( spin );
|
||||||
int isOpen;
|
int isOpen;
|
||||||
int size;
|
int size;
|
||||||
|
@ -203,7 +204,6 @@ generalPage( GObject * core )
|
||||||
GtkWidget * w;
|
GtkWidget * w;
|
||||||
|
|
||||||
t = hig_workarea_create( );
|
t = hig_workarea_create( );
|
||||||
|
|
||||||
hig_workarea_add_section_title( t, &row, _( "Windows" ) );
|
hig_workarea_add_section_title( t, &row, _( "Windows" ) );
|
||||||
|
|
||||||
s = _("Show an _icon in the system tray");
|
s = _("Show an _icon in the system tray");
|
||||||
|
@ -227,7 +227,6 @@ torrentPage( GObject * core )
|
||||||
GtkWidget * w;
|
GtkWidget * w;
|
||||||
|
|
||||||
t = hig_workarea_create( );
|
t = hig_workarea_create( );
|
||||||
|
|
||||||
hig_workarea_add_section_title( t, &row, _( "Location" ) );
|
hig_workarea_add_section_title( t, &row, _( "Location" ) );
|
||||||
|
|
||||||
w = new_path_chooser_button( PREF_KEY_DIR_DEFAULT, core );
|
w = new_path_chooser_button( PREF_KEY_DIR_DEFAULT, core );
|
||||||
|
@ -292,7 +291,6 @@ networkPage( GObject * core, gpointer alive )
|
||||||
GtkWidget * w, * w2;
|
GtkWidget * w, * w2;
|
||||||
GtkWidget * l;
|
GtkWidget * l;
|
||||||
GtkWidget * h;
|
GtkWidget * h;
|
||||||
GtkTooltips * tips = gtk_tooltips_new( );
|
|
||||||
|
|
||||||
t = hig_workarea_create( );
|
t = hig_workarea_create( );
|
||||||
|
|
||||||
|
@ -314,10 +312,9 @@ networkPage( GObject * core, gpointer alive )
|
||||||
|
|
||||||
hig_workarea_add_section_title (t, &row, _("Ports"));
|
hig_workarea_add_section_title (t, &row, _("Ports"));
|
||||||
|
|
||||||
s = _("Automatically _map port" );
|
s = _("_Map port with UPnP or NAT-PMP" );
|
||||||
w = new_check_button( s, PREF_KEY_NAT, core );
|
w = new_check_button( s, PREF_KEY_NAT, core );
|
||||||
hig_workarea_add_wide_control( t, &row, w );
|
hig_workarea_add_wide_control( t, &row, w );
|
||||||
gtk_tooltips_set_tip( GTK_TOOLTIPS( tips ), w, _( "NAT traversal uses either NAT-PMP or UPnP" ), NULL );
|
|
||||||
|
|
||||||
h = gtk_hbox_new( FALSE, GUI_PAD );
|
h = gtk_hbox_new( FALSE, GUI_PAD );
|
||||||
w2 = new_spin_button( PREF_KEY_PORT, core, 1, INT_MAX, 1 );
|
w2 = new_spin_button( PREF_KEY_PORT, core, 1, INT_MAX, 1 );
|
||||||
|
@ -343,7 +340,6 @@ tr_prefs_dialog_new( GObject * core, GtkWindow * parent )
|
||||||
{
|
{
|
||||||
GtkWidget * d;
|
GtkWidget * d;
|
||||||
GtkWidget * n;
|
GtkWidget * n;
|
||||||
GtkWidget * w;
|
|
||||||
gboolean * alive;
|
gboolean * alive;
|
||||||
|
|
||||||
alive = g_new( gboolean, 1 );
|
alive = g_new( gboolean, 1 );
|
||||||
|
@ -360,15 +356,18 @@ tr_prefs_dialog_new( GObject * core, GtkWindow * parent )
|
||||||
|
|
||||||
n = gtk_notebook_new( );
|
n = gtk_notebook_new( );
|
||||||
|
|
||||||
w = torrentPage( core );
|
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||||
gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, gtk_label_new (_("Torrents")) );
|
torrentPage( core ),
|
||||||
w = peerPage( core );
|
gtk_label_new (_("Torrents")) );
|
||||||
gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, gtk_label_new (_("Peers")) );
|
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||||
w = networkPage( core, alive );
|
peerPage( core ),
|
||||||
gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, gtk_label_new (_("Network")) );
|
gtk_label_new (_("Peers")) );
|
||||||
w = generalPage( core );
|
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||||
gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, gtk_label_new (_("General")) );
|
networkPage( core, alive ),
|
||||||
|
gtk_label_new (_("Network")) );
|
||||||
|
gtk_notebook_append_page( GTK_NOTEBOOK( n ),
|
||||||
|
generalPage( core ),
|
||||||
|
gtk_label_new (_("General")) );
|
||||||
|
|
||||||
g_signal_connect( d, "response", G_CALLBACK(response_cb), core );
|
g_signal_connect( d, "response", G_CALLBACK(response_cb), core );
|
||||||
gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(d)->vbox), n );
|
gtk_box_pack_start_defaults( GTK_BOX(GTK_DIALOG(d)->vbox), n );
|
||||||
|
|
Loading…
Reference in New Issue