Changeset 3943


Ignore:
Timestamp:
Nov 23, 2007, 3:36:32 PM (15 years ago)
Author:
charles
Message:

fix bug in gtk client that caused torrent changes to show up too slowly in the GUI

Location:
branches/0.9x/gtk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/0.9x/gtk/main.c

    r3899 r3943  
    372372static void
    373373rowChangedCB( GtkTreeModel  * model UNUSED,
    374               GtkTreePath   * path UNUSED,
     374              GtkTreePath   * path,
    375375              GtkTreeIter   * iter UNUSED,
    376376              gpointer        sel)
    377377{
    378     refreshTorrentActions( GTK_TREE_SELECTION(sel) );
     378    if( gtk_tree_selection_path_is_selected ( sel, path ) )
     379        refreshTorrentActions( GTK_TREE_SELECTION(sel) );
    379380}
    380381
     
    395396    g_signal_connect( model, "row-changed", G_CALLBACK(rowChangedCB), sel );
    396397    g_signal_connect( wind, "delete-event", G_CALLBACK( winclose ), cbdata );
     398    refreshTorrentActions( sel );
    397399   
    398400    setupdrag( GTK_WIDGET(wind), cbdata );
  • branches/0.9x/gtk/tr_core.c

    r3899 r3943  
    529529}
    530530
    531 void
    532 tr_core_update( TrCore * self )
    533 {
    534     GtkTreeIter iter;
     531static gboolean
     532update_foreach( GtkTreeModel * model,
     533                GtkTreePath  * path UNUSED,
     534                GtkTreeIter  * iter,
     535                gpointer       data UNUSED)
     536{
    535537    TrTorrent * tor;
    536538    const tr_stat * st;
    537539
    538     TR_IS_CORE( self );
    539 
    540     if( gtk_tree_model_get_iter_first( self->model, &iter ) ) do
    541     {
    542         gtk_tree_model_get( self->model, &iter, MC_TORRENT, &tor, -1 );
    543         st = tr_torrent_stat( tor );
    544         g_object_unref( tor );
    545         tr_torrent_check_seeding_cap ( tor );
    546 
    547         /* XXX find out if setting the same data emits changed signal */
    548         gtk_list_store_set( GTK_LIST_STORE( self->model ), &iter,
    549                             MC_STAT,        st->status,
    550                             MC_ERR,         st->error,
    551                             MC_TERR,        st->errorString,
    552                             MC_PROG_C,      st->percentComplete,
    553                             MC_PROG_D,      st->percentDone,
    554                             MC_DRATE,       st->rateDownload,
    555                             MC_URATE,       st->rateUpload,
    556                             MC_ETA,         st->eta,
    557                             MC_PEERS,       st->peersConnected,
    558                             MC_UPEERS,      st->peersGettingFromUs,
    559                             MC_DPEERS,      st->peersSendingToUs,
    560                             MC_SEED,        st->seeders,
    561                             MC_LEECH,       st->leechers,
    562                             MC_DONE,        st->completedFromTracker,
    563                             MC_DOWN,        st->downloadedEver,
    564                             MC_UP,          st->uploadedEver,
    565                             MC_RATIO,       st->ratio,
    566                             MC_LEFT,        st->leftUntilDone,
    567                             -1 );
    568     }
    569     while( gtk_tree_model_iter_next( self->model, &iter ) );
     540    gtk_tree_model_get( model, iter, MC_TORRENT, &tor, -1 );
     541    st = tr_torrent_stat( tor );
     542    tr_torrent_check_seeding_cap ( tor );
     543    g_object_unref( tor );
     544
     545    gtk_list_store_set( GTK_LIST_STORE( model ), iter,
     546                        MC_STAT,        st->status,
     547                        MC_ERR,         st->error,
     548                        MC_TERR,        st->errorString,
     549                        MC_PROG_C,      st->percentComplete,
     550                        MC_PROG_D,      st->percentDone,
     551                        MC_DRATE,       st->rateDownload,
     552                        MC_URATE,       st->rateUpload,
     553                        MC_ETA,         st->eta,
     554                        MC_PEERS,       st->peersConnected,
     555                        MC_UPEERS,      st->peersGettingFromUs,
     556                        MC_DPEERS,      st->peersSendingToUs,
     557                        MC_SEED,        st->seeders,
     558                        MC_LEECH,       st->leechers,
     559                        MC_DONE,        st->completedFromTracker,
     560                        MC_DOWN,        st->downloadedEver,
     561                        MC_UP,          st->uploadedEver,
     562                        MC_RATIO,       st->ratio,
     563                        MC_LEFT,        st->leftUntilDone,
     564                        -1 );
     565
     566    return FALSE;
     567}
     568
     569void
     570tr_core_update( TrCore * self )
     571{
     572    int column;
     573    GtkSortType order;
     574    GtkTreeSortable * sortable;
     575
     576    /* pause sorting */
     577    sortable = GTK_TREE_SORTABLE( self->model );
     578    gtk_tree_sortable_get_sort_column_id( sortable, &column, &order );
     579    gtk_tree_sortable_set_sort_column_id( sortable, GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, order );
     580
     581    /* refresh the model */
     582    gtk_tree_model_foreach( self->model, update_foreach, NULL );
     583
     584    /* resume sorting */
     585    gtk_tree_sortable_set_sort_column_id( sortable, column, order );
    570586}
    571587
Note: See TracChangeset for help on using the changeset viewer.