Changeset 8034


Ignore:
Timestamp:
Mar 5, 2009, 5:18:36 PM (13 years ago)
Author:
charles
Message:

(trunk gtk) minor tweaks

Location:
trunk/gtk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/details.c

    r8021 r8034  
    3131
    3232#define UPDATE_INTERVAL_SECONDS 2
    33 typedef struct
     33
     34struct ResponseData
    3435{
    3536    gpointer    gtor;
    3637    TrCore    * core;
    3738    guint       handler;
    38 } ResponseData;
    39 
    40 
    41 /****
    42 *****  PIECES VIEW
    43 ****/
    44 
    45 /* define SHOW_PIECES */
    46 
    47 #ifdef SHOW_PIECES
    48 static int
    49 getGridSize( int   pieceCount,
    50              int * n_rows,
    51              int * n_cols )
    52 {
    53     const int MAX_ACROSS = 16;
    54 
    55     if( pieceCount >= ( MAX_ACROSS * MAX_ACROSS ) )
    56     {
    57         *n_rows = *n_cols = MAX_ACROSS;
    58         return MAX_ACROSS * MAX_ACROSS;
    59     }
    60     else
    61     {
    62         int i;
    63         for( i = 0; ( i * i ) < pieceCount; ++i ) ;
    64         *n_rows = *n_cols = i;
    65         return pieceCount;
    66     }
    67 }
    68 
    69  #define TO16( a ) ( (guint16)( ( a << 8 ) | ( a ) ) )
    70  #define RGB_2_GDK( R, G, B ) { 0, TO16( R ), TO16( G ), TO16( B ) }
    71 
    72 enum { DRAW_AVAIL, DRAW_PROG };
    73 
    74 static void
    75 release_gobject_array( gpointer data )
    76 {
    77     int       i;
    78     GObject **objects = (GObject**) data;
    79 
    80     for( i = 0; objects[i] != NULL; ++i )
    81         g_object_unref ( G_OBJECT( objects[i] ) );
    82     g_free ( objects );
    83 }
    84 
    85 static gboolean
    86 refresh_pieces( GtkWidget *            da,
    87                 GdkEventExpose * event UNUSED,
    88                 gpointer               gtor )
    89 {
    90     tr_torrent *       tor = tr_torrent_handle( TR_TORRENT( gtor ) );
    91     const tr_info *    info = tr_torrent_info( TR_TORRENT( gtor ) );
    92     int                mode =
    93         GPOINTER_TO_INT ( g_object_get_data ( G_OBJECT( da ), "draw-mode" ) );
    94 
    95     GdkColormap *      colormap = gtk_widget_get_colormap ( da );
    96     const int          widget_w = da->allocation.width;
    97     const int          widget_h = da->allocation.height;
    98     int                n_rows, n_cols;
    99     const int          n_cells = getGridSize ( info->pieceCount,  &n_rows,
    100                                                &n_cols );
    101     const GdkRectangle grid_bounds = { 0, 0, widget_w, widget_h };
    102     const double       piece_w = grid_bounds.width / (double)n_cols;
    103     const double       piece_h = grid_bounds.height / (double)n_rows;
    104     const int          piece_w_int = (int) ( piece_w + 1 ); /* pad for roundoff
    105                                                               */
    106     const int          piece_h_int = (int) ( piece_h + 1 ); /* pad for roundoff
    107                                                               */
    108     const gboolean     rtl = gtk_widget_get_direction( da ) ==
    109                              GTK_TEXT_DIR_RTL;
    110 
    111     guint8 *           prev_color = NULL;
    112     gboolean           first_time = FALSE;
    113 
    114     int                i, x, y;
    115     int8_t *           pieces = NULL;
    116     float *            completeness = NULL;
    117 
    118     /**
    119     ***  Get the Graphics Contexts...
    120     **/
    121 
    122     enum { ALL, LOTS, SOME, FEW, NONE,
    123            BLACK, GRAY, BLINK,
    124            N_COLORS };
    125     GdkGC **           gcs = (GdkGC**) g_object_get_data ( G_OBJECT(
    126                                                                da ),
    127                                                            "graphics-contexts" );
    128     if( gcs == NULL )
    129     {
    130         const GdkColor colors[N_COLORS] = {
    131             RGB_2_GDK ( 114, 159, 207 ), /* all */
    132             RGB_2_GDK (  52, 101, 164 ), /* lots */
    133             RGB_2_GDK (  32,  74, 135 ), /* some */
    134             RGB_2_GDK (  85,  87, 83 ), /* few */
    135             RGB_2_GDK ( 238, 238, 236 ), /* none - tango aluminum highlight */
    136             RGB_2_GDK (  46,  52, 54 ), /* black - tango slate shadow */
    137             RGB_2_GDK ( 186, 189, 182 ), /* gray - tango aluminum shadow */
    138             RGB_2_GDK ( 252, 233, 79 ), /* blink - tango butter highlight */
    139         };
    140 
    141         gcs = g_new ( GdkGC *, N_COLORS + 1 );
    142 
    143         for( i = 0; i < N_COLORS; ++i )
    144         {
    145             gcs[i] = gdk_gc_new ( da->window );
    146             gdk_gc_set_colormap ( gcs[i], colormap );
    147             gdk_gc_set_rgb_fg_color ( gcs[i], &colors[i] );
    148             gdk_gc_set_rgb_bg_color ( gcs[i], &colors[i] );
    149         }
    150 
    151         gcs[N_COLORS] = NULL; /* a sentinel in the release function */
    152         g_object_set_data_full ( G_OBJECT( da ), "graphics-contexts",
    153                                  gcs, release_gobject_array );
    154     }
    155 
    156     /**
    157     ***  Get the cells' previous colors...
    158     ***  (this is used for blinking when the color changes)
    159     **/
    160 
    161     prev_color = (guint8*) g_object_get_data ( G_OBJECT( da ), "prev-color" );
    162     if( prev_color == NULL )
    163     {
    164         first_time = TRUE;
    165         prev_color = g_new0 ( guint8, n_cells );
    166         g_object_set_data_full ( G_OBJECT(
    167                                      da ), "prev-color", prev_color, g_free );
    168     }
    169 
    170     /**
    171     ***  Get the piece data values...
    172     **/
    173 
    174     switch( mode )
    175     {
    176         case DRAW_AVAIL:
    177             pieces = g_new ( int8_t, n_cells );
    178             tr_torrentAvailability ( tor, pieces, n_cells );
    179             break;
    180 
    181         case DRAW_PROG:
    182             completeness = g_new ( float, n_cells );
    183             tr_torrentAmountFinished ( tor, completeness, n_cells );
    184             break;
    185 
    186         default:
    187             g_error( "no mode defined!" );
    188     }
    189 
    190     /**
    191     ***  Draw...
    192     **/
    193 
    194     i = 0;
    195     for( y = 0; y < n_rows; ++y )
    196     {
    197         for( x = 0; x < n_cols; ++x )
    198         {
    199             int draw_x = grid_bounds.x + (int)( x * piece_w );
    200             int draw_y = grid_bounds.y + (int)( y * piece_h );
    201             int color = BLACK;
    202             int border = BLACK;
    203 
    204             if( rtl )
    205                 draw_x = grid_bounds.x + grid_bounds.width -
    206                          (int)( ( x + 1 ) * piece_w );
    207             else
    208                 draw_x = grid_bounds.x + (int)( x * piece_w );
    209             draw_y = grid_bounds.y + (int)( y * piece_h );
    210 
    211             if( i < n_cells )
    212             {
    213                 border = GRAY;
    214 
    215                 if( mode == DRAW_AVAIL )
    216                 {
    217                     const int8_t val = pieces[i];
    218                     if( val <  0 ) color = ALL;
    219                     else if( val == 0 ) color = NONE;
    220                     else if( val <= 4 ) color = FEW;
    221                     else if( val <= 8 ) color = SOME;
    222                     else color = LOTS;
    223                 }
    224                 else /* completeness */
    225                 {
    226                     const float val = completeness[i];
    227                     if( val >= 1.00 ) color = ALL;
    228                     else if( val >= 0.66 ) color = LOTS;
    229                     else if( val >= 0.33 ) color = SOME;
    230                     else if( val >= 0.01 ) color = FEW;
    231                     else color = NONE;
    232                 }
    233 
    234                 /* draw a "blink" for one interval when a piece changes */
    235                 if( first_time )
    236                     prev_color[i] = color;
    237                 else if( color != prev_color[i] )
    238                 {
    239                     prev_color[i] = color;
    240                     color = border = BLINK;
    241                 }
    242             }
    243 
    244             gdk_draw_rectangle ( da->window, gcs[color], TRUE,
    245                                  draw_x, draw_y,
    246                                  piece_w_int, piece_h_int );
    247 
    248             if( i < n_cells )
    249                 gdk_draw_rectangle ( da->window, gcs[border], FALSE,
    250                                      draw_x, draw_y,
    251                                      piece_w_int, piece_h_int );
    252 
    253             ++i;
    254         }
    255     }
    256 
    257     gdk_draw_rectangle ( da->window, gcs[GRAY], FALSE,
    258                          grid_bounds.x, grid_bounds.y,
    259                          grid_bounds.width - 1, grid_bounds.height - 1 );
    260 
    261     g_free ( pieces );
    262     g_free ( completeness );
    263     return FALSE;
    264 }
    265 
    266 #endif
     39};
    26740
    26841/****
     
    383156        GtkTreeIter iter;
    384157        gtk_list_store_append( store, &iter );
    385         peer_row_set ( store, &iter, &peers[i] );
     158        peer_row_set( store, &iter, &peers[i] );
    386159    }
    387160}
     
    390163peer_model_new( tr_torrent * tor )
    391164{
    392     GtkListStore * m = gtk_list_store_new ( N_PEER_COLS,
    393                                             G_TYPE_STRING, /* addr */
    394                                             G_TYPE_FLOAT, /* downloadFromRate */
    395                                             G_TYPE_FLOAT, /* uploadToRate */
    396                                             G_TYPE_STRING, /* client */
    397                                             G_TYPE_INT,   /* progress [0..100] */
    398                                             G_TYPE_BOOLEAN, /* isEncrypted */
    399                                             G_TYPE_STRING ); /* flagString */
     165    GtkListStore * m = gtk_list_store_new( N_PEER_COLS,
     166                                           G_TYPE_STRING, /* addr */
     167                                           G_TYPE_FLOAT, /* downloadFromRate */
     168                                           G_TYPE_FLOAT, /* uploadToRate */
     169                                           G_TYPE_STRING, /* client */
     170                                           G_TYPE_INT,   /* progress [0..100] */
     171                                           G_TYPE_BOOLEAN, /* isEncrypted */
     172                                           G_TYPE_STRING ); /* flagString */
    400173
    401174    int            n_peers = 0;
    402     tr_peer_stat * peers = tr_torrentPeers ( tor, &n_peers );
    403 
    404     qsort ( peers, n_peers, sizeof( tr_peer_stat ), compare_peers );
    405     append_peers_to_model ( m, peers, n_peers );
     175    tr_peer_stat * peers = tr_torrentPeers( tor, &n_peers );
     176
     177    qsort( peers, n_peers, sizeof( tr_peer_stat ), compare_peers );
     178    append_peers_to_model( m, peers, n_peers );
    406179    tr_torrentPeersFree( peers, 0 );
    407     return GTK_TREE_MODEL ( m );
     180    return GTK_TREE_MODEL( m );
    408181}
    409182
     
    417190    gboolean is_encrypted = FALSE;
    418191
    419     gtk_tree_model_get ( tree_model, iter, PEER_COL_IS_ENCRYPTED,
    420                          &is_encrypted,
    421                          -1 );
    422     g_object_set ( renderer, "xalign", (gfloat)0.0,
    423                    "yalign", (gfloat)0.5,
    424                    "stock-id", ( is_encrypted ? "transmission-lock" : NULL ),
    425                    NULL );
     192    gtk_tree_model_get( tree_model, iter, PEER_COL_IS_ENCRYPTED, &is_encrypted, -1 );
     193    g_object_set( renderer, "xalign", (gfloat)0.0,
     194                            "yalign", (gfloat)0.5,
     195                            "stock-id", ( is_encrypted ? "transmission-lock" : NULL ),
     196                            NULL );
     197}
     198
     199static void
     200render_speed( GtkCellRenderer  * renderer,
     201              GtkTreeModel     * tree_model,
     202              GtkTreeIter      * iter,
     203              int                col )
     204{
     205    float rate = 0.0;
     206    char str[64];
     207    gtk_tree_model_get( tree_model, iter, col, &rate, -1 );
     208    if( rate < 0.01 )
     209        *str = '\0';
     210    else
     211        tr_strlspeed( str, rate, sizeof( str ) );
     212    g_object_set( renderer, "text", str, NULL );
    426213}
    427214
    428215static void
    429216render_ul_rate( GtkTreeViewColumn  * column UNUSED,
    430                 GtkCellRenderer *          renderer,
    431                 GtkTreeModel *              tree_model,
    432                 GtkTreeIter *              iter,
     217                GtkCellRenderer    * renderer,
     218                GtkTreeModel       * tree_model,
     219                GtkTreeIter        * iter,
    433220                gpointer             data   UNUSED )
    434221{
    435     float rate = 0.0;
    436 
    437     gtk_tree_model_get ( tree_model, iter, PEER_COL_UPLOAD_RATE, &rate, -1 );
    438     if( rate < 0.01 )
    439         g_object_set ( renderer, "text", "", NULL );
    440     else
    441     {
    442         char speedStr[64];
    443         tr_strlspeed( speedStr, rate, sizeof( speedStr ) );
    444         g_object_set( renderer, "text", speedStr, NULL );
    445     }
     222    render_speed( renderer, tree_model, iter, PEER_COL_UPLOAD_RATE );
    446223}
    447224
    448225static void
    449226render_dl_rate( GtkTreeViewColumn  * column UNUSED,
    450                 GtkCellRenderer *          renderer,
    451                 GtkTreeModel *              tree_model,
    452                 GtkTreeIter *              iter,
     227                GtkCellRenderer    * renderer,
     228                GtkTreeModel       * tree_model,
     229                GtkTreeIter        * iter,
    453230                gpointer             data   UNUSED )
    454231{
    455     float rate = 0.0;
    456 
    457     gtk_tree_model_get ( tree_model, iter, PEER_COL_DOWNLOAD_RATE, &rate,
    458                          -1 );
    459     if( rate < 0.01 )
    460         g_object_set ( renderer, "text", "", NULL );
    461     else
    462     {
    463         char speedStr[64];
    464         tr_strlspeed( speedStr, rate, sizeof( speedStr ) );
    465         g_object_set( renderer, "text", speedStr, NULL );
    466     }
     232    render_speed( renderer, tree_model, iter, PEER_COL_DOWNLOAD_RATE );
    467233}
    468234
     
    476242    char * client = NULL;
    477243
    478     gtk_tree_model_get ( tree_model, iter, PEER_COL_CLIENT, &client,
    479                          -1 );
    480     g_object_set ( renderer, "text", ( client ? client : "" ), NULL );
    481     g_free ( client );
     244    gtk_tree_model_get( tree_model, iter, PEER_COL_CLIENT, &client, -1 );
     245    g_object_set( renderer, "text", ( client ? client : "" ), NULL );
     246    g_free( client );
    482247}
    483248
     
    518283    int             n_peers;
    519284    GtkTreeIter     iter;
    520     PeerData *      p = (PeerData*) g_object_get_data ( G_OBJECT(
    521                                                             top ),
    522                                                         "peer-data" );
    523     tr_torrent *    tor = tr_torrent_handle ( p->gtor );
     285    PeerData *      p = (PeerData*) g_object_get_data( G_OBJECT( top ), "peer-data" );
     286    tr_torrent *    tor = tr_torrent_handle( p->gtor );
    524287    GtkTreeModel *  model = p->model;
    525288    GtkListStore *  store = p->store;
     
    534297        {
    535298            GtkTreeIter iter;
    536             gtk_tree_model_iter_nth_child( GTK_TREE_MODEL(
    537                                                p->webseeds ), &iter, NULL,
    538                                            i );
    539             gtk_list_store_set( p->webseeds, &iter,
    540                                 WEBSEED_COL_DOWNLOAD_RATE, speeds[i],
    541                                 -1 );
     299            gtk_tree_model_iter_nth_child( GTK_TREE_MODEL( p->webseeds ), &iter, NULL, i );
     300            gtk_list_store_set( p->webseeds, &iter, WEBSEED_COL_DOWNLOAD_RATE, speeds[i], -1 );
    542301        }
    543302        tr_free( speeds );
     
    553312
    554313    n_peers = 0;
    555     peers = tr_torrentPeers ( tor, &n_peers );
    556     qsort ( peers, n_peers, sizeof( tr_peer_stat ), compare_peers );
    557 
    558     if( gtk_tree_model_get_iter_first ( model, &iter ) ) do
     314    peers = tr_torrentPeers( tor, &n_peers );
     315    qsort( peers, n_peers, sizeof( tr_peer_stat ), compare_peers );
     316
     317    if( gtk_tree_model_get_iter_first( model, &iter ) ) do
    559318        {
    560319            char *         addr = NULL;
    561320            tr_peer_stat * peer = NULL;
    562             gtk_tree_model_get ( model, &iter, PEER_COL_ADDRESS, &addr, -1 );
    563             peer = bsearch ( addr, peers, n_peers, sizeof( tr_peer_stat ),
    564                              compare_addr_to_peer );
    565             g_free ( addr );
     321            gtk_tree_model_get( model, &iter, PEER_COL_ADDRESS, &addr, -1 );
     322            peer = bsearch( addr, peers, n_peers, sizeof( tr_peer_stat ),
     323                            compare_addr_to_peer );
     324            g_free( addr );
    566325
    567326            if( peer ) /* update a pre-existing row */
     
    569328                const int pos = peer - peers;
    570329                const int n_rhs = n_peers - ( pos + 1 );
    571                 g_assert ( n_rhs >= 0 );
    572 
    573                 peer_row_set ( store, &iter, peer );
     330                g_assert( n_rhs >= 0 );
     331
     332                peer_row_set( store, &iter, peer );
    574333
    575334                /* remove it from the tr_peer_stat list */
    576                 g_memmove ( peer, peer + 1, sizeof( tr_peer_stat ) * n_rhs );
     335                g_memmove( peer, peer + 1, sizeof( tr_peer_stat ) * n_rhs );
    577336                --n_peers;
    578337            }
    579             else if( !gtk_list_store_remove ( store, &iter ) )
     338            else if( !gtk_list_store_remove( store, &iter ) )
    580339                break; /* we removed the model's last item */
    581340        }
    582         while( gtk_tree_model_iter_next ( model, &iter ) );
    583 
    584     append_peers_to_model ( store, peers, n_peers ); /* all these are new */
    585 
    586 #ifdef SHOW_PIECES
    587     if( GDK_IS_DRAWABLE ( p->completeness->window ) )
    588         refresh_pieces ( p->completeness, NULL, p->gtor );
    589 #endif
    590 
    591     fmtpeercount ( p->seeders_lb, stat->seeders );
    592     fmtpeercount ( p->leechers_lb, stat->leechers );
    593     fmtpeercount ( p->completed_lb, stat->timesCompleted );
     341        while( gtk_tree_model_iter_next( model, &iter ) );
     342
     343    append_peers_to_model( store, peers, n_peers ); /* all these are new */
     344
     345    fmtpeercount( p->seeders_lb, stat->seeders );
     346    fmtpeercount( p->leechers_lb, stat->leechers );
     347    fmtpeercount( p->completed_lb, stat->timesCompleted );
    594348
    595349    free( peers );
     
    624378            switch( *pch )
    625379            {
    626                 case 'O':
    627                     txt = _( "Optimistic unchoke" ); break;
    628 
    629                 case 'D':
    630                     txt = _( "Downloading from this peer" ); break;
    631 
    632                 case 'd':
    633                     txt = _(
    634                         "We would download from this peer if they would let us" );
    635                     break;
    636 
    637                 case 'U':
    638                     txt = _( "Uploading to peer" ); break;
    639 
    640                 case 'u':
    641                     txt = _( "We would upload to this peer if they asked" );
    642                     break;
    643 
    644                 case 'K':
    645                     txt = _(
    646                         "Peer has unchoked us, but we're not interested" );
    647                     break;
    648 
    649                 case '?':
    650                     txt = _(
    651                         "We unchoked this peer, but they're not interested" );
    652                     break;
    653 
    654                 case 'E':
    655                     txt = _( "Encrypted connection" ); break;
    656 
    657                 case 'X':
    658                     txt = _(
    659                         "Peer was discovered through Peer Exchange (PEX)" );
    660                     break;
    661 
    662                 case 'I':
    663                     txt = _( "Peer is an incoming connection" ); break;
     380                case 'O': txt = _( "Optimistic unchoke" ); break;
     381                case 'D': txt = _( "Downloading from this peer" ); break;
     382                case 'd': txt = _( "We would download from this peer if they would let us" ); break;
     383                case 'U': txt = _( "Uploading to peer" ); break;
     384                case 'u': txt = _( "We would upload to this peer if they asked" ); break;
     385                case 'K': txt = _( "Peer has unchoked us, but we're not interested" ); break;
     386                case '?': txt = _( "We unchoked this peer, but they're not interested" ); break;
     387                case 'E': txt = _( "Encrypted connection" ); break;
     388                case 'X': txt = _( "Peer was discovered through Peer Exchange (PEX)" ); break;
     389                case 'I': txt = _( "Peer is an incoming connection" ); break;
    664390            }
    665391            if( txt )
     
    686412    GtkWidget *     v, *w, *ret, *sw, *l, *vbox, *hbox;
    687413    GtkWidget *     webtree = NULL;
    688     tr_torrent *    tor = tr_torrent_handle ( gtor );
    689     PeerData *      p = g_new ( PeerData, 1 );
     414    tr_torrent *    tor = tr_torrent_handle( gtor );
     415    PeerData *      p = g_new( PeerData, 1 );
    690416    const tr_info * inf = tr_torrent_info( gtor );
    691417
     
    716442
    717443        t = _( webseed_column_names[WEBSEED_COL_URL] );
    718         r = gtk_cell_renderer_text_new ( );
     444        r = gtk_cell_renderer_text_new( );
    719445        g_object_set( G_OBJECT( r ), "ellipsize", PANGO_ELLIPSIZE_END, NULL );
    720446        c = gtk_tree_view_column_new_with_attributes( t, r, "text", WEBSEED_COL_URL, NULL );
     
    724450
    725451        t = _( webseed_column_names[WEBSEED_COL_DOWNLOAD_RATE] );
    726         r = gtk_cell_renderer_text_new ( );
    727         c = gtk_tree_view_column_new_with_attributes ( t, r, "text", WEBSEED_COL_DOWNLOAD_RATE, NULL );
    728         gtk_tree_view_column_set_cell_data_func ( c, r, render_dl_rate, NULL, NULL );
     452        r = gtk_cell_renderer_text_new( );
     453        c = gtk_tree_view_column_new_with_attributes( t, r, "text", WEBSEED_COL_DOWNLOAD_RATE, NULL );
     454        gtk_tree_view_column_set_cell_data_func( c, r, render_dl_rate, NULL, NULL );
    729455        gtk_tree_view_column_set_sort_column_id( c, WEBSEED_COL_DOWNLOAD_RATE );
    730456        gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
    731457
    732         w = gtk_scrolled_window_new ( NULL, NULL );
    733         gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW( w ),
    734                                          GTK_POLICY_AUTOMATIC,
    735                                          GTK_POLICY_AUTOMATIC );
    736         gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW( w ),
    737                                               GTK_SHADOW_IN );
    738         gtk_container_add ( GTK_CONTAINER( w ), v );
     458        w = gtk_scrolled_window_new( NULL, NULL );
     459        gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
     460        gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( w ), GTK_SHADOW_IN );
     461        gtk_container_add( GTK_CONTAINER( w ), v );
    739462
    740463        webtree = w;
    741464    }
    742465
    743     m  = peer_model_new ( tor );
     466    m  = peer_model_new( tor );
    744467    v = GTK_WIDGET( g_object_new( GTK_TYPE_TREE_VIEW,
    745468                                  "model",  gtk_tree_model_sort_new_with_model( m ),
     
    756479#endif
    757480    gtk_widget_set_size_request( v, 550, 0 );
    758     g_object_unref ( G_OBJECT( m ) );
     481    g_object_unref( G_OBJECT( m ) );
    759482    g_signal_connect( v, "button-release-event",
    760483                      G_CALLBACK( on_tree_view_button_released ), NULL );
     
    770493        {
    771494            case PEER_COL_ADDRESS:
    772                 r = gtk_cell_renderer_text_new ( );
    773                 c = gtk_tree_view_column_new_with_attributes ( t, r, "text", col, NULL );
     495                r = gtk_cell_renderer_text_new( );
     496                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
    774497                break;
    775498
    776499            case PEER_COL_CLIENT:
    777                 r = gtk_cell_renderer_text_new ( );
    778                 c = gtk_tree_view_column_new_with_attributes ( t, r, "text", col, NULL );
    779                 gtk_tree_view_column_set_cell_data_func ( c, r, render_client, NULL, NULL );
     500                r = gtk_cell_renderer_text_new( );
     501                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
     502                gtk_tree_view_column_set_cell_data_func( c, r, render_client, NULL, NULL );
    780503                break;
    781504
    782505            case PEER_COL_PROGRESS:
    783                 r = gtk_cell_renderer_progress_new ( );
    784                 c = gtk_tree_view_column_new_with_attributes ( t, r, "value", PEER_COL_PROGRESS, NULL );
     506                r = gtk_cell_renderer_progress_new( );
     507                c = gtk_tree_view_column_new_with_attributes( t, r, "value", PEER_COL_PROGRESS, NULL );
    785508                break;
    786509
    787510            case PEER_COL_IS_ENCRYPTED:
    788                 r = gtk_cell_renderer_pixbuf_new ( );
    789                 c = gtk_tree_view_column_new_with_attributes ( t, r, NULL );
    790                 gtk_tree_view_column_set_sizing ( c, GTK_TREE_VIEW_COLUMN_FIXED );
    791                 gtk_tree_view_column_set_fixed_width ( c, 20 );
    792                 gtk_tree_view_column_set_cell_data_func ( c, r, render_encrypted, NULL, NULL );
     511                r = gtk_cell_renderer_pixbuf_new( );
     512                c = gtk_tree_view_column_new_with_attributes( t, r, NULL );
     513                gtk_tree_view_column_set_sizing( c, GTK_TREE_VIEW_COLUMN_FIXED );
     514                gtk_tree_view_column_set_fixed_width( c, 20 );
     515                gtk_tree_view_column_set_cell_data_func( c, r, render_encrypted, NULL, NULL );
    793516                break;
    794517
    795518            case PEER_COL_DOWNLOAD_RATE:
    796                 r = gtk_cell_renderer_text_new ( );
    797                 c = gtk_tree_view_column_new_with_attributes ( t, r, "text", col, NULL );
    798                 gtk_tree_view_column_set_cell_data_func ( c, r, render_dl_rate, NULL, NULL );
     519                r = gtk_cell_renderer_text_new( );
     520                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
     521                gtk_tree_view_column_set_cell_data_func( c, r, render_dl_rate, NULL, NULL );
    799522                break;
    800523
    801524            case PEER_COL_UPLOAD_RATE:
    802                 r = gtk_cell_renderer_text_new ( );
    803                 c = gtk_tree_view_column_new_with_attributes ( t, r, "text", col, NULL );
    804                 gtk_tree_view_column_set_cell_data_func ( c, r, render_ul_rate, NULL, NULL );
     525                r = gtk_cell_renderer_text_new( );
     526                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
     527                gtk_tree_view_column_set_cell_data_func( c, r, render_ul_rate, NULL, NULL );
    805528                break;
    806529
    807530            case PEER_COL_STATUS:
    808531                r = gtk_cell_renderer_text_new( );
    809                 c = gtk_tree_view_column_new_with_attributes ( t, r, "text", col, NULL );
     532                c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL );
    810533                break;
    811534
    812535            default:
    813                 abort ( );
     536                abort( );
    814537        }
    815538
    816         gtk_tree_view_column_set_resizable ( c, FALSE );
    817         gtk_tree_view_column_set_sort_column_id ( c, col );
    818         gtk_tree_view_append_column ( GTK_TREE_VIEW( v ), c );
     539        gtk_tree_view_column_set_resizable( c, FALSE );
     540        gtk_tree_view_column_set_sort_column_id( c, col );
     541        gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
    819542    }
    820543
     
    824547       'expander column. */
    825548    {
    826         GtkTreeViewColumn *c = gtk_tree_view_column_new ( );
    827         gtk_tree_view_column_set_visible ( c, FALSE );
    828         gtk_tree_view_append_column ( GTK_TREE_VIEW( v ), c );
    829         gtk_tree_view_set_expander_column ( GTK_TREE_VIEW( v ), c );
     549        GtkTreeViewColumn *c = gtk_tree_view_column_new( );
     550        gtk_tree_view_column_set_visible( c, FALSE );
     551        gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c );
     552        gtk_tree_view_set_expander_column( GTK_TREE_VIEW( v ), c );
    830553    }
    831554
    832     w = sw = gtk_scrolled_window_new ( NULL, NULL );
    833     gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW( w ),
    834                                      GTK_POLICY_AUTOMATIC,
    835                                      GTK_POLICY_AUTOMATIC );
    836     gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW( w ),
    837                                           GTK_SHADOW_IN );
    838     gtk_container_add ( GTK_CONTAINER( w ), v );
    839 
    840 
    841     vbox = gtk_vbox_new ( FALSE, GUI_PAD );
    842     gtk_container_set_border_width ( GTK_CONTAINER( vbox ), GUI_PAD_BIG );
     555    w = sw = gtk_scrolled_window_new( NULL, NULL );
     556    gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ),
     557                                    GTK_POLICY_AUTOMATIC,
     558                                    GTK_POLICY_AUTOMATIC );
     559    gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( w ),
     560                                         GTK_SHADOW_IN );
     561    gtk_container_add( GTK_CONTAINER( w ), v );
     562
     563
     564    vbox = gtk_vbox_new( FALSE, GUI_PAD );
     565    gtk_container_set_border_width( GTK_CONTAINER( vbox ), GUI_PAD_BIG );
    843566
    844567    if( webtree == NULL )
     
    851574    }
    852575
    853     hbox = gtk_hbox_new ( FALSE, GUI_PAD );
    854     l = gtk_label_new ( NULL );
    855     gtk_label_set_markup ( GTK_LABEL( l ), _( "<b>Seeders:</b>" ) );
    856     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    857     l = p->seeders_lb = gtk_label_new ( NULL );
    858     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    859     gtk_box_pack_start( GTK_BOX( hbox ),
    860                         gtk_alignment_new ( 0.0f, 0.0f, 0.0f, 0.0f ),
    861                         TRUE, TRUE, 0 );
    862     l = gtk_label_new ( NULL );
    863     gtk_label_set_markup ( GTK_LABEL( l ), _( "<b>Leechers:</b>" ) );
    864     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    865     l = p->leechers_lb = gtk_label_new ( NULL );
    866     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    867     gtk_box_pack_start( GTK_BOX( hbox ),
    868                         gtk_alignment_new ( 0.0f, 0.0f, 0.0f, 0.0f ),
    869                         TRUE, TRUE, 0 );
    870     l = gtk_label_new ( NULL );
    871     gtk_label_set_markup ( GTK_LABEL( l ), _( "<b>Times Completed:</b>" ) );
    872     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    873     l = p->completed_lb = gtk_label_new ( NULL );
    874     gtk_box_pack_start ( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
    875     gtk_box_pack_start ( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
     576    hbox = gtk_hbox_new( FALSE, GUI_PAD );
     577    l = gtk_label_new( NULL );
     578    gtk_label_set_markup( GTK_LABEL( l ), _( "<b>Seeders:</b>" ) );
     579    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     580    l = p->seeders_lb = gtk_label_new( NULL );
     581    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     582    gtk_box_pack_start( GTK_BOX( hbox ), gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f ), TRUE, TRUE, 0 );
     583    l = gtk_label_new( NULL );
     584    gtk_label_set_markup( GTK_LABEL( l ), _( "<b>Leechers:</b>" ) );
     585    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     586    l = p->leechers_lb = gtk_label_new( NULL );
     587    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     588    gtk_box_pack_start( GTK_BOX( hbox ), gtk_alignment_new( 0.0f, 0.0f, 0.0f, 0.0f ), TRUE, TRUE, 0 );
     589    l = gtk_label_new( NULL );
     590    gtk_label_set_markup( GTK_LABEL( l ), _( "<b>Times Completed:</b>" ) );
     591    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     592    l = p->completed_lb = gtk_label_new( NULL );
     593    gtk_box_pack_start( GTK_BOX( hbox ), l, FALSE, FALSE, 0 );
     594    gtk_box_pack_start( GTK_BOX( vbox ), hbox, FALSE, FALSE, 0 );
    876595
    877596    ret = vbox;
     
    879598    p->model = m;
    880599    p->store = GTK_LIST_STORE( m );
    881     g_object_set_data_full ( G_OBJECT( ret ), "peer-data", p, g_free );
     600    g_object_set_data_full( G_OBJECT( ret ), "peer-data", p, g_free );
    882601    return ret;
    883602}
     
    907626{
    908627    int             row = 0;
    909     GtkWidget *     t = hig_workarea_create ( );
     628    GtkWidget *     t = hig_workarea_create( );
    910629    GtkWidget *     l, *w, *fr;
    911630    char *          pch;
     
    916635    const tr_info * info = tr_torrentInfo( tor );
    917636
    918     hig_workarea_add_section_title ( t, &row, _( "Details" ) );
     637    hig_workarea_add_section_title( t, &row, _( "Details" ) );
    919638
    920639    g_snprintf( countStr, sizeof( countStr ),
     
    928647                countStr, sizeStr );
    929648
    930     l = gtk_label_new ( buf );
    931     hig_workarea_add_row ( t, &row, _( "Pieces:" ), l, NULL );
    932 
    933     l =
    934         g_object_new( GTK_TYPE_LABEL, "label", info->hashString,
    935                       "selectable",
    936                       TRUE,
     649    l = gtk_label_new( buf );
     650    hig_workarea_add_row( t, &row, _( "Pieces:" ), l, NULL );
     651
     652    l = g_object_new( GTK_TYPE_LABEL, "label", info->hashString,
     653                      "selectable", TRUE,
    937654                      "ellipsize", PANGO_ELLIPSIZE_END,
    938655                      NULL );
    939     hig_workarea_add_row ( t, &row, _( "Hash:" ), l, NULL );
     656    hig_workarea_add_row( t, &row, _( "Hash:" ), l, NULL );
    940657
    941658    pch = ( info->isPrivate )
    942659          ? _( "Private to this tracker -- PEX disabled" )
    943660          : _( "Public torrent" );
    944     l = gtk_label_new ( pch );
    945     hig_workarea_add_row ( t, &row, _( "Privacy:" ), l, NULL );
    946 
    947     b = gtk_text_buffer_new ( NULL );
     661    l = gtk_label_new( pch );
     662    hig_workarea_add_row( t, &row, _( "Privacy:" ), l, NULL );
     663
     664    b = gtk_text_buffer_new( NULL );
    948665    if( info->comment )
    949         gtk_text_buffer_set_text ( b, info->comment, -1 );
    950     w = gtk_text_view_new_with_buffer ( b );
    951     gtk_widget_set_size_request ( w, 0u, 100u );
    952     gtk_text_view_set_wrap_mode ( GTK_TEXT_VIEW( w ), GTK_WRAP_WORD );
    953     gtk_text_view_set_editable ( GTK_TEXT_VIEW( w ), FALSE );
    954     fr = gtk_frame_new ( NULL );
    955     gtk_frame_set_shadow_type ( GTK_FRAME( fr ), GTK_SHADOW_IN );
    956     gtk_container_add ( GTK_CONTAINER( fr ), w );
    957     w = hig_workarea_add_row ( t, &row, _( "Comment:" ), fr, NULL );
    958     gtk_misc_set_alignment ( GTK_MISC( w ), 0.0f, 0.0f );
    959 
    960     hig_workarea_add_section_divider ( t, &row );
    961     hig_workarea_add_section_title ( t, &row, _( "Origins" ) );
    962 
    963     l = gtk_label_new ( *info->creator ? info->creator : _( "Unknown" ) );
     666        gtk_text_buffer_set_text( b, info->comment, -1 );
     667    w = gtk_text_view_new_with_buffer( b );
     668    gtk_widget_set_size_request( w, 0u, 100u );
     669    gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( w ), GTK_WRAP_WORD );
     670    gtk_text_view_set_editable( GTK_TEXT_VIEW( w ), FALSE );
     671    fr = gtk_frame_new( NULL );
     672    gtk_frame_set_shadow_type( GTK_FRAME( fr ), GTK_SHADOW_IN );
     673    gtk_container_add( GTK_CONTAINER( fr ), w );
     674    w = hig_workarea_add_row( t, &row, _( "Comment:" ), fr, NULL );
     675    gtk_misc_set_alignment( GTK_MISC( w ), 0.0f, 0.0f );
     676
     677    hig_workarea_add_section_divider( t, &row );
     678    hig_workarea_add_section_title( t, &row, _( "Origins" ) );
     679
     680    l = gtk_label_new( *info->creator ? info->creator : _( "Unknown" ) );
    964681    gtk_label_set_ellipsize( GTK_LABEL( l ), PANGO_ELLIPSIZE_END );
    965     hig_workarea_add_row ( t, &row, _( "Creator:" ), l, NULL );
     682    hig_workarea_add_row( t, &row, _( "Creator:" ), l, NULL );
    966683
    967684    l = gtk_label_new( NULL );
    968685    refresh_time_lb( l, info->dateCreated );
    969     hig_workarea_add_row ( t, &row, _( "Date:" ), l, NULL );
    970 
    971     hig_workarea_add_section_divider ( t, &row );
    972     hig_workarea_add_section_title ( t, &row, _( "Location" ) );
    973 
    974     l =
    975         g_object_new( GTK_TYPE_LABEL, "label", tr_torrentGetDownloadDir(
    976                           tor ), "selectable", TRUE,
    977                       "ellipsize", PANGO_ELLIPSIZE_END, NULL );
    978     hig_workarea_add_row ( t, &row, _( "Destination folder:" ), l, NULL );
    979 
    980     l =
    981         g_object_new( GTK_TYPE_LABEL, "label", info->torrent, "selectable",
    982                       TRUE,
    983                       "ellipsize", PANGO_ELLIPSIZE_END,
    984                       NULL );
    985     hig_workarea_add_row ( t, &row, _( "Torrent file:" ), l, NULL );
    986 
    987     hig_workarea_finish ( t, &row );
     686    hig_workarea_add_row( t, &row, _( "Date:" ), l, NULL );
     687
     688    hig_workarea_add_section_divider( t, &row );
     689    hig_workarea_add_section_title( t, &row, _( "Location" ) );
     690
     691    l = g_object_new( GTK_TYPE_LABEL, "label", tr_torrentGetDownloadDir( tor ),
     692                                      "selectable", TRUE,
     693                                      "ellipsize", PANGO_ELLIPSIZE_END,
     694                                      NULL );
     695    hig_workarea_add_row( t, &row, _( "Destination folder:" ), l, NULL );
     696
     697    l = g_object_new( GTK_TYPE_LABEL, "label", info->torrent,
     698                                      "selectable", TRUE,
     699                                      "ellipsize", PANGO_ELLIPSIZE_END,
     700                                      NULL );
     701    hig_workarea_add_row( t, &row, _( "Torrent file:" ), l, NULL );
     702
     703    hig_workarea_finish( t, &row );
    988704    return t;
    989705}
     
    995711typedef struct
    996712{
    997     GtkWidget *  state_lb;
    998     GtkWidget *  progress_lb;
    999     GtkWidget *  have_lb;
    1000     GtkWidget *  dl_lb;
    1001     GtkWidget *  ul_lb;
    1002     GtkWidget *  failed_lb;
    1003     GtkWidget *  ratio_lb;
    1004     GtkWidget *  err_lb;
    1005     GtkWidget *  swarm_lb;
    1006     GtkWidget *  date_added_lb;
    1007     GtkWidget *  last_activity_lb;
    1008     GtkWidget *  availability_da;
    1009     TrTorrent *  gtor;
     713    GtkWidget * state_lb;
     714    GtkWidget * progress_lb;
     715    GtkWidget * have_lb;
     716    GtkWidget * dl_lb;
     717    GtkWidget * ul_lb;
     718    GtkWidget * failed_lb;
     719    GtkWidget * ratio_lb;
     720    GtkWidget * err_lb;
     721    GtkWidget * swarm_lb;
     722    GtkWidget * date_added_lb;
     723    GtkWidget * last_activity_lb;
     724    GtkWidget * availability_da;
     725    TrTorrent * gtor;
    1010726}
    1011727Activity;
     
    1018734    char buf1[128];
    1019735    char buf2[128];
    1020     Activity * a = g_object_get_data ( G_OBJECT( top ), "activity-data" );
     736    Activity * a = g_object_get_data( G_OBJECT( top ), "activity-data" );
    1021737    const tr_stat * stat = tr_torrent_stat( a->gtor );
    1022738    const tr_info * info = tr_torrent_info( a->gtor );
     
    1026742
    1027743    pch = tr_torrent_status_str( a->gtor );
    1028     gtk_label_set_text ( GTK_LABEL( a->state_lb ), pch );
    1029     g_free ( pch );
     744    gtk_label_set_text( GTK_LABEL( a->state_lb ), pch );
     745    g_free( pch );
    1030746
    1031747    if( (int)complete == (int)done )
     
    1036752        pch = g_strdup_printf( _( "%1$.1f%% (%2$.1f%% selected)" ),
    1037753                               complete, done );
    1038     gtk_label_set_text ( GTK_LABEL( a->progress_lb ), pch );
    1039     g_free ( pch );
     754    gtk_label_set_text( GTK_LABEL( a->progress_lb ), pch );
     755    g_free( pch );
    1040756
    1041757    i = (int) ceil( verifiedPieceCount );
     
    1045761     * %2$s is how much of it's passed the checksum test
    1046762     * %3$s is how many pieces are verified */
    1047     pch = g_strdup_printf( ngettext( "%1$s (%2$s verified in %3$d piece)",
    1048                                      "%1$s (%2$s verified in %3$d pieces)", i ),
    1049                            buf1, buf2, i );
     763    if( !i )
     764        pch = tr_strdup( buf1 );
     765    else
     766        pch = g_strdup_printf( ngettext( "%1$s (%2$s verified in %3$d piece)",
     767                                         "%1$s (%2$s verified in %3$d pieces)", i ),
     768                               buf1, buf2, i );
    1050769    gtk_label_set_text( GTK_LABEL( a->have_lb ), pch );
    1051770    g_free( pch );
     
    1064783
    1065784    tr_strlspeed( buf1, stat->swarmSpeed, sizeof( buf1 ) );
    1066     gtk_label_set_text ( GTK_LABEL( a->swarm_lb ), buf1 );
    1067 
    1068     gtk_label_set_text ( GTK_LABEL( a->err_lb ),
     785    gtk_label_set_text( GTK_LABEL( a->swarm_lb ), buf1 );
     786
     787    gtk_label_set_text( GTK_LABEL( a->err_lb ),
    1069788                        *stat->errorString ? stat->errorString : _( "None" ) );
    1070789
     
    1072791
    1073792    refresh_time_lb( a->last_activity_lb, stat->activityDate );
    1074 
    1075 #ifdef SHOW_PIECES
    1076     if( GDK_IS_DRAWABLE ( a->availability_da->window ) )
    1077         refresh_pieces ( a->availability_da, NULL, a->gtor );
    1078 #endif
    1079793}
    1080794
     
    1082796activity_page_new( TrTorrent * gtor )
    1083797{
    1084     Activity * a = g_new ( Activity, 1 );
     798    Activity * a = g_new( Activity, 1 );
    1085799    int        row = 0;
    1086     GtkWidget *t = hig_workarea_create ( );
     800    GtkWidget *t = hig_workarea_create( );
    1087801    GtkWidget *l;
    1088802
    1089803    a->gtor = gtor;
    1090804
    1091     hig_workarea_add_section_title ( t, &row, _( "Transfer" ) );
    1092 
    1093     l = a->state_lb = gtk_label_new ( NULL );
    1094     hig_workarea_add_row ( t, &row, _( "State:" ), l, NULL );
    1095 
    1096     l = a->progress_lb = gtk_label_new ( NULL );
    1097     hig_workarea_add_row ( t, &row, _( "Progress:" ), l, NULL );
    1098 
    1099     l = a->have_lb = gtk_label_new ( NULL );
     805    hig_workarea_add_section_title( t, &row, _( "Transfer" ) );
     806
     807    l = a->state_lb = gtk_label_new( NULL );
     808    hig_workarea_add_row( t, &row, _( "State:" ), l, NULL );
     809
     810    l = a->progress_lb = gtk_label_new( NULL );
     811    hig_workarea_add_row( t, &row, _( "Progress:" ), l, NULL );
     812
     813    l = a->have_lb = gtk_label_new( NULL );
    1100814    /* "Have" refers to how much of the torrent we have */
    1101     hig_workarea_add_row ( t, &row, _( "Have:" ), l, NULL );
    1102 
    1103     l = a->dl_lb = gtk_label_new ( NULL );
    1104     hig_workarea_add_row ( t, &row, _( "Downloaded:" ), l, NULL );
    1105 
    1106     l = a->ul_lb = gtk_label_new ( NULL );
    1107     hig_workarea_add_row ( t, &row, _( "Uploaded:" ), l, NULL );
     815    hig_workarea_add_row( t, &row, _( "Have:" ), l, NULL );
     816
     817    l = a->dl_lb = gtk_label_new( NULL );
     818    hig_workarea_add_row( t, &row, _( "Downloaded:" ), l, NULL );
     819
     820    l = a->ul_lb = gtk_label_new( NULL );
     821    hig_workarea_add_row( t, &row, _( "Uploaded:" ), l, NULL );
    1108822
    1109823    /* how much downloaded data was corrupt */
    1110     l = a->failed_lb = gtk_label_new ( NULL );
    1111     hig_workarea_add_row ( t, &row, _( "Failed DL:" ), l, NULL );
    1112 
    1113     l = a->ratio_lb = gtk_label_new ( NULL );
    1114     hig_workarea_add_row ( t, &row, _( "Ratio:" ), l, NULL );
    1115 
    1116     l = a->swarm_lb = gtk_label_new ( NULL );
    1117     hig_workarea_add_row ( t, &row, _( "Swarm rate:" ), l, NULL );
    1118 
    1119     l = a->err_lb = gtk_label_new ( NULL );
    1120     hig_workarea_add_row ( t, &row, _( "Error:" ), l, NULL );
    1121 
    1122 #ifdef SHOW_PIECES
    1123     hig_workarea_add_section_divider ( t, &row );
    1124     hig_workarea_add_section_title ( t, &row, _( "Completion" ) );
    1125 
    1126     w = a->availability_da = gtk_drawing_area_new ( );
    1127     gtk_widget_set_size_request ( w, 0u, 100u );
    1128     g_object_set_data ( G_OBJECT( w ), "draw-mode",
    1129                        GINT_TO_POINTER( DRAW_PROG ) );
    1130     g_signal_connect ( w, "expose-event", G_CALLBACK(
    1131                            refresh_pieces ), gtor );
    1132     hig_workarea_add_wide_control( t, &row, w );
    1133 #endif
    1134 
    1135     hig_workarea_add_section_divider ( t, &row );
    1136     hig_workarea_add_section_title ( t, &row, _( "Dates" ) );
    1137 
    1138     l = a->date_added_lb = gtk_label_new ( NULL );
    1139     hig_workarea_add_row ( t, &row, _( "Started at:" ), l, NULL );
    1140 
    1141     l = a->last_activity_lb = gtk_label_new ( NULL );
    1142     hig_workarea_add_row ( t, &row, _( "Last activity at:" ), l, NULL );
    1143 
    1144     hig_workarea_add_section_divider ( t, &row );
    1145     hig_workarea_finish ( t, &row );
    1146     g_object_set_data_full ( G_OBJECT( t ), "activity-data", a, g_free );
     824    l = a->failed_lb = gtk_label_new( NULL );
     825    hig_workarea_add_row( t, &row, _( "Failed DL:" ), l, NULL );
     826
     827    l = a->ratio_lb = gtk_label_new( NULL );
     828    hig_workarea_add_row( t, &row, _( "Ratio:" ), l, NULL );
     829
     830    l = a->swarm_lb = gtk_label_new( NULL );
     831    hig_workarea_add_row( t, &row, _( "Swarm rate:" ), l, NULL );
     832
     833    l = a->err_lb = gtk_label_new( NULL );
     834    hig_workarea_add_row( t, &row, _( "Error:" ), l, NULL );
     835
     836    hig_workarea_add_section_divider( t, &row );
     837    hig_workarea_add_section_title( t, &row, _( "Dates" ) );
     838
     839    l = a->date_added_lb = gtk_label_new( NULL );
     840    hig_workarea_add_row( t, &row, _( "Started at:" ), l, NULL );
     841
     842    l = a->last_activity_lb = gtk_label_new( NULL );
     843    hig_workarea_add_row( t, &row, _( "Last activity at:" ), l, NULL );
     844
     845    hig_workarea_add_section_divider( t, &row );
     846    hig_workarea_finish( t, &row );
     847    g_object_set_data_full( G_OBJECT( t ), "activity-data", a, g_free );
    1147848    return t;
    1148849}
     
    1156857                     gpointer         gtor )
    1157858{
    1158     tr_torrent * tor = tr_torrent_handle ( gtor );
     859    tr_torrent * tor = tr_torrent_handle( gtor );
    1159860    const gboolean b = gtk_toggle_button_get_active( tb );
    1160861
     
    1166867                       gpointer         gtor )
    1167868{
    1168     tr_torrent * tor = tr_torrent_handle ( gtor );
     869    tr_torrent * tor = tr_torrent_handle( gtor );
    1169870    const gboolean b = gtk_toggle_button_get_active( tb );
    1170871
     
    1175876global_speed_toggled_cb( GtkToggleButton * tb, gpointer gtor )
    1176877{
    1177     tr_torrent * tor = tr_torrent_handle ( gtor );
     878    tr_torrent * tor = tr_torrent_handle( gtor );
    1178879    const gboolean b = gtk_toggle_button_get_active( tb );
    1179880
     
    1198899sensitize_from_check_cb( GtkToggleButton * toggle, gpointer w )
    1199900{
    1200     gtk_widget_set_sensitive ( GTK_WIDGET( w ),
    1201                                gtk_toggle_button_get_active( toggle ) );
     901    gtk_widget_set_sensitive( GTK_WIDGET( w ),
     902                              gtk_toggle_button_get_active( toggle ) );
    1202903}
    1203904
     
    1205906setSpeedLimit( GtkSpinButton* spin, gpointer gtor, int up_or_down )
    1206907{
    1207     tr_torrent * tor = tr_torrent_handle ( gtor );
    1208     const int kb_sec = gtk_spin_button_get_value_as_int ( spin );
     908    tr_torrent * tor = tr_torrent_handle( gtor );
     909    const int kb_sec = gtk_spin_button_get_value_as_int( spin );
    1209910
    1210911    tr_torrentSetSpeedLimit( tor, up_or_down, kb_sec );
     
    1226927ratio_spun_cb( GtkSpinButton * spin, gpointer gtor )
    1227928{
    1228     tr_torrent * tor = tr_torrent_handle ( gtor );
    1229     float        ratio = gtk_spin_button_get_value ( spin );
     929    tr_torrent * tor = tr_torrent_handle( gtor );
     930    float        ratio = gtk_spin_button_get_value( spin );
    1230931
    1231932    tr_torrentSetRatioLimit( tor, ratio );
     
    1267968
    1268969static GtkWidget*
    1269 options_page_new( ResponseData * data )
     970options_page_new( struct ResponseData * data )
    1270971{
    1271972    uint16_t     maxConnectedPeers;
     
    1279980    TrCore     * core = data->core;
    1280981    TrTorrent  * gtor = data->gtor;
    1281     tr_torrent * tor = tr_torrent_handle ( gtor );
     982    tr_torrent * tor = tr_torrent_handle( gtor );
    1282983
    1283984    row = 0;
    1284     t = hig_workarea_create ( );
    1285     hig_workarea_add_section_title ( t, &row, _( "Speed Limits" ) );
     985    t = hig_workarea_create( );
     986    hig_workarea_add_section_title( t, &row, _( "Speed Limits" ) );
    1286987
    1287988        b = tr_torrentIsUsingGlobalSpeedLimit( tor, TR_UP );
     
    1289990        g_signal_connect( tb, "toggled", G_CALLBACK( global_speed_toggled_cb ), gtor );
    1290991
    1291         tb = gtk_check_button_new_with_mnemonic ( _( "Limit _download speed (KB/s):" ) );
     992        tb = gtk_check_button_new_with_mnemonic( _( "Limit _download speed (KB/s):" ) );
    1292993        b = tr_torrentIsUsingSpeedLimit( tor, TR_DOWN );
    1293         gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
    1294         g_signal_connect ( tb, "toggled", G_CALLBACK( down_speed_toggled_cb ), gtor );
     994        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( tb ), b );
     995        g_signal_connect( tb, "toggled", G_CALLBACK( down_speed_toggled_cb ), gtor );
    1295996
    1296997        i = tr_torrentGetSpeedLimit( tor, TR_DOWN );
    1297998        w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
    1298999        gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
    1299         g_signal_connect ( w, "value-changed", G_CALLBACK( down_speed_spun_cb ), gtor );
    1300         g_signal_connect ( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
    1301         sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
    1302         hig_workarea_add_row_w ( t, &row, tb, w, NULL );
    1303 
    1304         tb = gtk_check_button_new_with_mnemonic ( _( "Limit _upload speed (KB/s):" ) );
     1000        g_signal_connect( w, "value-changed", G_CALLBACK( down_speed_spun_cb ), gtor );
     1001        g_signal_connect( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
     1002        sensitize_from_check_cb( GTK_TOGGLE_BUTTON( tb ), w );
     1003        hig_workarea_add_row_w( t, &row, tb, w, NULL );
     1004
     1005        tb = gtk_check_button_new_with_mnemonic( _( "Limit _upload speed (KB/s):" ) );
    13051006        b = tr_torrentIsUsingSpeedLimit( tor, TR_UP );
    1306         gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( tb ), b );
    1307         g_signal_connect ( tb, "toggled", G_CALLBACK( up_speed_toggled_cb ), gtor );
     1007        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( tb ), b );
     1008        g_signal_connect( tb, "toggled", G_CALLBACK( up_speed_toggled_cb ), gtor );
    13081009
    13091010        i = tr_torrentGetSpeedLimit( tor, TR_UP );
    13101011        w = gtk_spin_button_new_with_range( 1, INT_MAX, 5 );
    13111012        gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), i );
    1312         g_signal_connect ( w, "value-changed", G_CALLBACK( up_speed_spun_cb ), gtor );
    1313         g_signal_connect ( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
    1314         sensitize_from_check_cb ( GTK_TOGGLE_BUTTON( tb ), w );
    1315         hig_workarea_add_row_w ( t, &row, tb, w, NULL );
    1316 
    1317     hig_workarea_add_section_divider ( t, &row );
    1318     hig_workarea_add_section_title ( t, &row, _( "Seed-Until Ratio" ) );
     1013        g_signal_connect( w, "value-changed", G_CALLBACK( up_speed_spun_cb ), gtor );
     1014        g_signal_connect( tb, "toggled", G_CALLBACK( sensitize_from_check_cb ), w );
     1015        sensitize_from_check_cb( GTK_TOGGLE_BUTTON( tb ), w );
     1016        hig_workarea_add_row_w( t, &row, tb, w, NULL );
     1017
     1018    hig_workarea_add_section_divider( t, &row );
     1019    hig_workarea_add_section_title( t, &row, _( "Seed-Until Ratio" ) );
    13191020
    13201021        group = NULL;
     
    13241025        data->handler = g_signal_connect( core, "prefs-changed", G_CALLBACK( prefsChanged ), w );
    13251026        group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( w ) );
    1326         gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_GLOBAL);
     1027        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_GLOBAL);
    13271028        hig_workarea_add_wide_control( t, &row, w );
    13281029        g_free( s );
     
    13321033        w = gtk_radio_button_new_with_mnemonic( group, _( "Seed _regardless of ratio" ) );
    13331034        group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( w ) );
    1334         gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_UNLIMITED);
     1035        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_UNLIMITED);
    13351036        hig_workarea_add_wide_control( t, &row, w );
    13361037        g_object_set_data( G_OBJECT( w ), RATIO_MODE_KEY, GINT_TO_POINTER( TR_RATIOLIMIT_UNLIMITED ) );
    13371038        g_signal_connect( w, "toggled", G_CALLBACK( ratio_mode_changed_cb ), gtor );
    13381039
    1339         h = gtk_hbox_new ( FALSE, GUI_PAD );
     1040        h = gtk_hbox_new( FALSE, GUI_PAD );
    13401041        w = gtk_radio_button_new_with_mnemonic( group, _( "_Stop seeding when a torrent's ratio reaches" ) );
    13411042        g_object_set_data( G_OBJECT( w ), RATIO_MODE_KEY, GINT_TO_POINTER( TR_RATIOLIMIT_SINGLE ) );
    1342         gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_SINGLE);
     1043        gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), mode == TR_RATIOLIMIT_SINGLE);
    13431044        g_signal_connect( w, "toggled", G_CALLBACK( ratio_mode_changed_cb ), gtor );
    13441045        group = gtk_radio_button_get_group( GTK_RADIO_BUTTON( w ) );
    1345         gtk_box_pack_start ( GTK_BOX( h ), w, FALSE, FALSE, 0 );
     1046        gtk_box_pack_start( GTK_BOX( h ), w, FALSE, FALSE, 0 );
    13461047        d = tr_torrentGetRatioLimit( tor );
    13471048        w = gtk_spin_button_new_with_range( 0.5, INT_MAX, .05 );
    13481049        gtk_spin_button_set_digits( GTK_SPIN_BUTTON( w ), 2 );
    13491050        gtk_spin_button_set_value( GTK_SPIN_BUTTON( w ), d );
    1350         g_signal_connect ( w, "value-changed", G_CALLBACK( ratio_spun_cb ), gtor );
    1351         gtk_box_pack_start ( GTK_BOX( h ), w, FALSE, FALSE, 0 );
     1051        g_signal_connect( w, "value-changed", G_CALLBACK( ratio_spun_cb ), gtor );
     1052        gtk_box_pack_start( GTK_BOX( h ), w, FALSE, FALSE, 0 );
    13521053        hig_workarea_add_wide_control( t, &row, h );
    13531054   
    1354     hig_workarea_add_section_divider ( t, &row );
    1355     hig_workarea_add_section_title ( t, &row, _( "Peer Connections" ) );
     1055    hig_workarea_add_section_divider( t, &row );
     1056    hig_workarea_add_section_title( t, &row, _( "Peer Connections" ) );
    13561057
    13571058    maxConnectedPeers = tr_torrentGetPeerLimit( tor );
     
    13621063                          max_peers_spun_cb ), gtor );
    13631064
    1364     hig_workarea_finish ( t, &row );
     1065    hig_workarea_finish( t, &row );
    13651066    return t;
    13661067}
    1367 
    1368 static void
    1369 refresh_options( GtkWidget * top UNUSED )
    1370 {}
    13711068
    13721069/****
     
    14081105    const char *          s;
    14091106    struct tracker_page * page = g_new0( struct tracker_page, 1 );
    1410     const tr_info *       info = tr_torrent_info ( gtor );
     1107    const tr_info *       info = tr_torrent_info( gtor );
    14111108
    14121109    page->gtor = gtor;
     
    14411138    l = gtk_label_new( info->trackers[0].announce );
    14421139    gtk_label_set_ellipsize( GTK_LABEL( l ), PANGO_ELLIPSIZE_END );
    1443     hig_workarea_add_row ( t, &row, _( "Tracker:" ), l, NULL );
     1140    hig_workarea_add_row( t, &row, _( "Tracker:" ), l, NULL );
    14441141
    14451142    s = _( "Last announce at:" );
     
    14821179    else if( t < now )
    14831180        gtk_label_set_text( l, countdown_done );
    1484     else
    1485     {
    1486         char      buf[1024];
     1181    else {
     1182        char buf[512];
    14871183        const int seconds = t - now;
    14881184        tr_strltime( buf, seconds, sizeof( buf ) );
     
    15321228
    15331229static void
    1534 torrent_destroyed( gpointer               dialog,
    1535                    GObject * dead_torrent UNUSED )
    1536 {
    1537     gtk_widget_destroy ( GTK_WIDGET( dialog ) );
     1230torrent_destroyed( gpointer dialog, GObject * dead_torrent UNUSED )
     1231{
     1232    gtk_widget_destroy( GTK_WIDGET( dialog ) );
    15381233}
    15391234
     
    15411236remove_tag( gpointer tag )
    15421237{
    1543     g_source_remove ( GPOINTER_TO_UINT( tag ) ); /* stop the periodic refresh */
     1238    g_source_remove( GPOINTER_TO_UINT( tag ) ); /* stop the periodic refresh */
    15441239}
    15451240
     
    15491244             gpointer     data )
    15501245{
    1551     ResponseData *rd = data;
     1246    struct ResponseData *rd = data;
    15521247    TrCore * core = rd->core;
    15531248    gulong handler = rd-> handler;
    15541249
    15551250    g_signal_handler_disconnect( core, handler );
    1556     g_object_weak_unref ( G_OBJECT( rd->gtor ), torrent_destroyed, dialog );
    1557     gtk_widget_destroy ( GTK_WIDGET( dialog ) );
    1558 
    1559     g_free ( rd );
     1251    g_object_weak_unref( G_OBJECT( rd->gtor ), torrent_destroyed, dialog );
     1252    gtk_widget_destroy( GTK_WIDGET( dialog ) );
     1253
     1254    g_free( rd );
    15601255}
    15611256
     
    15631258periodic_refresh( gpointer data )
    15641259{
    1565     refresh_tracker   ( g_object_get_data ( G_OBJECT( data ), "tracker-top" ) );
    1566     refresh_peers     ( g_object_get_data ( G_OBJECT( data ), "peers-top" ) );
    1567     refresh_activity  ( g_object_get_data ( G_OBJECT( data ),
    1568                                             "activity-top" ) );
    1569     refresh_options   ( g_object_get_data ( G_OBJECT( data ), "options-top" ) );
     1260    refresh_tracker   ( g_object_get_data( G_OBJECT( data ), "tracker-top" ) );
     1261    refresh_peers     ( g_object_get_data( G_OBJECT( data ), "peers-top" ) );
     1262    refresh_activity  ( g_object_get_data( G_OBJECT( data ), "activity-top" ) );
    15701263    return TRUE;
    15711264}
     
    15771270{
    15781271    guint           tag;
    1579     GtkWidget *     d, *n, *w;
    1580     tr_torrent *    tor = tr_torrent_handle ( gtor );
     1272    GtkWidget *     d, *n, *w, *lb;
    15811273    char            title[512];
    1582     const tr_info * info = tr_torrent_info ( gtor );
    1583     ResponseData  * rd;
     1274    struct ResponseData  * rd;
     1275    tr_torrent *    tor = tr_torrent_handle( gtor );
     1276    const tr_info * info = tr_torrent_info( gtor );
    15841277
    15851278    /* create the dialog */
    1586     rd = g_new0(ResponseData, 1);
     1279    rd = g_new0(struct ResponseData, 1);
    15871280    rd->gtor = gtor;
    15881281    rd->core = core;
    15891282    g_snprintf( title, sizeof( title ), _( "%s Properties" ), info->name );
    1590     d = gtk_dialog_new_with_buttons ( title, parent, 0,
    1591                                       GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
    1592                                       NULL );
    1593     gtk_window_set_role ( GTK_WINDOW( d ), "tr-info" );
    1594     g_signal_connect ( d, "response", G_CALLBACK ( response_cb ), rd );
     1283    d = gtk_dialog_new_with_buttons( title, parent, 0,
     1284                                     GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
     1285                                     NULL );
     1286    gtk_window_set_role( GTK_WINDOW( d ), "tr-info" );
     1287    g_signal_connect( d, "response", G_CALLBACK( response_cb ), rd );
    15951288    gtk_dialog_set_has_separator( GTK_DIALOG( d ), FALSE );
    15961289    gtk_container_set_border_width( GTK_CONTAINER( d ), GUI_PAD );
    1597     g_object_weak_ref ( G_OBJECT( gtor ), torrent_destroyed, d );
     1290    g_object_weak_ref( G_OBJECT( gtor ), torrent_destroyed, d );
    15981291
    15991292
    16001293    /* add the notebook */
    1601     n = gtk_notebook_new ( );
    1602     gtk_container_set_border_width ( GTK_CONTAINER ( n ), GUI_PAD );
    1603 
    1604     w = activity_page_new ( gtor );
    1605     g_object_set_data ( G_OBJECT( d ), "activity-top", w );
    1606     gtk_notebook_append_page ( GTK_NOTEBOOK( n ), w,
    1607                               gtk_label_new ( _( "Activity" ) ) );
    1608 
    1609     w = peer_page_new ( gtor );
    1610     g_object_set_data ( G_OBJECT( d ), "peers-top", w );
    1611     gtk_notebook_append_page ( GTK_NOTEBOOK( n ),  w,
    1612                               gtk_label_new ( _( "Peers" ) ) );
     1294    n = gtk_notebook_new( );
     1295    gtk_container_set_border_width( GTK_CONTAINER( n ), GUI_PAD );
     1296
     1297    w = activity_page_new( gtor );
     1298    lb = gtk_label_new( _( "Activity" ) );
     1299    gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, lb );
     1300    g_object_set_data( G_OBJECT( d ), "activity-top", w );
     1301
     1302    w = peer_page_new( gtor );
     1303    lb = gtk_label_new( _( "Peers" ) );
     1304    gtk_notebook_append_page( GTK_NOTEBOOK( n ),  w, lb );
     1305    g_object_set_data( G_OBJECT( d ), "peers-top", w );
    16131306
    16141307    w = tracker_page_new( gtor );
     1308    lb = gtk_label_new( _( "Tracker" ) );
     1309    gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, lb );
    16151310    g_object_set_data( G_OBJECT( d ), "tracker-top", w );
    1616     gtk_notebook_append_page( GTK_NOTEBOOK( n ), w,
    1617                              gtk_label_new( _( "Tracker" ) ) );
    1618 
    1619     gtk_notebook_append_page ( GTK_NOTEBOOK( n ),
    1620                               info_page_new ( tor ),
    1621                               gtk_label_new ( _( "Information" ) ) );
     1311
     1312    w = info_page_new( tor );
     1313    lb = gtk_label_new( _( "Information" ) );
     1314    gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, lb );
    16221315
    16231316    w = file_list_new( gtor );
    16241317    gtk_container_set_border_width( GTK_CONTAINER( w ), GUI_PAD_BIG );
    1625     g_object_set_data ( G_OBJECT( d ), "files-top", w );
    1626     gtk_notebook_append_page ( GTK_NOTEBOOK( n ), w,
    1627                               gtk_label_new ( _( "Files" ) ) );
    1628 
    1629     w = options_page_new ( rd );
    1630     g_object_set_data ( G_OBJECT( d ), "options-top", w );
    1631     gtk_notebook_append_page ( GTK_NOTEBOOK( n ), w,
    1632                                gtk_label_new ( _( "Options" ) ) );
     1318    lb = gtk_label_new( _( "Files" ) );
     1319    gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, lb );
     1320    g_object_set_data( G_OBJECT( d ), "files-top", w );
     1321
     1322    w = options_page_new( rd );
     1323    lb = gtk_label_new( _( "Options" ) );
     1324    gtk_notebook_append_page( GTK_NOTEBOOK( n ), w, lb );
    16331325
    16341326    gtk_box_pack_start( GTK_BOX( GTK_DIALOG( d )->vbox ), n, TRUE, TRUE, 0 );
    16351327
    16361328    tag = gtr_timeout_add_seconds( UPDATE_INTERVAL_SECONDS, periodic_refresh, d );
    1637     g_object_set_data_full ( G_OBJECT( d ), "tag",
    1638                              GUINT_TO_POINTER( tag ), remove_tag );
    1639 
    1640     /* return the results */
    1641     periodic_refresh ( d );
    1642     gtk_widget_show_all ( GTK_DIALOG( d )->vbox );
     1329    g_object_set_data_full( G_OBJECT( d ), "tag", GUINT_TO_POINTER( tag ), remove_tag );
     1330    periodic_refresh( d );
     1331    gtk_widget_show_all( GTK_DIALOG( d )->vbox );
    16431332    return d;
    16441333}
  • trunk/gtk/hig.c

    r7658 r8034  
    113113    GtkWidget * w = rowNew( l );
    114114
    115     gtk_table_attach( GTK_TABLE(
    116                           t ), w, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0,
    117                       0 );
     115    gtk_table_attach( GTK_TABLE( t ), w, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0 );
    118116}
    119117
  • trunk/gtk/main.c

    r8026 r8034  
    3636#include <glib/gstdio.h>
    3737
    38 #include <gdk/gdk.h>
    39 #ifdef GDK_WINDOWING_X11
    40  #include <X11/Xatom.h>
    41  #include <gdk/gdkx.h>
    42 #endif
    43 
    4438#include <libtransmission/transmission.h>
    4539#include <libtransmission/rpcimpl.h>
     
    6660#include "ui.h"
    6761
    68 #include <libtransmission/transmission.h>
    69 #include <libtransmission/version.h>
    70 
    7162#define MY_NAME "transmission"
    7263
    73 /* interval in milliseconds to update the torrent list display */
    74 #define UPDATE_INTERVAL         1666
    75 
    76 /* interval in milliseconds to check for stopped torrents and update display */
    77 #define EXIT_CHECK_INTERVAL     500
     64#define REFRESH_INTERVAL_SECONDS 2
    7865
    7966#if GTK_CHECK_VERSION( 2, 8, 0 )
     
    353340    gboolean            startpaused = FALSE;
    354341    gboolean            startminimized = FALSE;
    355     char *              domain = MY_NAME;
     342    const char *        domain = MY_NAME;
    356343    char *              configDir = NULL;
    357344    tr_lockfile_state_t tr_state;
     
    389376    gerr = NULL;
    390377    if( !gtk_init_with_args( &argc, &argv, _( "[torrent files]" ), entries,
    391                              domain, &gerr ) )
     378                             (char*)domain, &gerr ) )
    392379    {
    393380        fprintf( stderr, "%s\n", gerr->message );
     
    613600
    614601    /* start model update timer */
    615     cbdata->timer = g_timeout_add( UPDATE_INTERVAL, updatemodel, cbdata );
     602    cbdata->timer = gtr_timeout_add_seconds( REFRESH_INTERVAL_SECONDS, updatemodel, cbdata );
    616603    updatemodel( cbdata );
    617604
     
    901888{
    902889    GtkTargetEntry targets[] = {
    903         { "STRING",          0, 0 },
    904         { "text/plain",      0, 0 },
    905         { "text/uri-list",   0, 0 },
     890        { (char*)"STRING",          0, 0 },
     891        { (char*)"text/plain",      0, 0 },
     892        { (char*)"text/uri-list",   0, 0 },
    906893    };
    907894
  • trunk/gtk/util.c

    r8021 r8034  
    558558        if( !opened )
    559559        {
    560             char * argv[] = { "xdg-open", (char*)path, NULL };
     560            char * argv[] = { (char*)"xdg-open", (char*)path, NULL };
    561561            g_spawn_async( NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
    562562                           NULL, NULL, NULL, NULL );
     
    645645
    646646guint
    647 gtr_timeout_add_seconds( guint        interval,
    648                          GSourceFunc  function,
    649                          gpointer     data )
     647gtr_timeout_add_seconds( guint seconds, GSourceFunc function, gpointer data )
    650648{
    651649#if GLIB_CHECK_VERSION( 2,14,0 )
    652     return g_timeout_add_seconds( interval, function, data );
     650    return g_timeout_add_seconds( seconds, function, data );
    653651#else
    654     return g_timeout_add( interval*1000, function, data );
    655 #endif
    656 }
     652    return g_timeout_add( seconds*1000, function, data );
     653#endif
     654}
Note: See TracChangeset for help on using the changeset viewer.