Changeset 5180


Ignore:
Timestamp:
Mar 2, 2008, 3:54:58 PM (14 years ago)
Author:
charles
Message:

(gtk) #748: hig improvements to the `remove torrent' confirmation dialog.

Location:
trunk/gtk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/actions.c

    r5122 r5180  
    116116  { "remove-torrent", GTK_STOCK_REMOVE,
    117117    N_("_Remove"), "Delete", NULL, G_CALLBACK(action_cb) },
     118  { "delete-torrent", GTK_STOCK_DELETE,
     119    N_("_Delete Files"), "<control>Delete", NULL, G_CALLBACK(action_cb) },
    118120  { "new-torrent", GTK_STOCK_NEW, N_("_New..."), NULL,
    119121    N_("Create a new torrent"),
  • trunk/gtk/dialogs.c

    r5159 r5180  
    290290struct DeleteData
    291291{
    292     GtkWidget * delete_files_tb;
     292    gboolean delete_files;
    293293    GList * torrents;
    294294    TrCore * core;
     
    296296
    297297static void
    298 deleteDownloadedToggled( GtkToggleButton * tb, gpointer warn )
    299 {
    300     GtkWidget * w = GTK_WIDGET( warn );
    301 
    302     if( gtk_toggle_button_get_active( tb ) )
    303         gtk_widget_show( w );
    304     else
    305         gtk_widget_hide( w );
    306 }
    307 
    308 static void
    309 deleteResponse( GtkDialog * dialog, gint response, gpointer gdata )
     298removeResponse( GtkDialog * dialog, gint response, gpointer gdata )
    310299{
    311300    struct DeleteData * data = gdata;
    312     const int del = response == GTK_RESPONSE_ACCEPT;
    313     const int deleteFiles = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( data->delete_files_tb ) );
     301    const int doRemove = response == GTK_RESPONSE_ACCEPT;
     302    const int doDelete = data->delete_files;
    314303    GList * l;
    315304
     
    318307        TrTorrent * gtor = TR_TORRENT( l->data );
    319308
    320         if( del )
    321             tr_core_remove_torrent( data->core, gtor, deleteFiles );
     309        if( doRemove )
     310            tr_core_remove_torrent( data->core, gtor, doDelete );
    322311        else
    323312            g_object_unref( G_OBJECT( gtor ) );
     
    327316    g_list_free( data->torrents );
    328317    g_free( data );
     318}
     319
     320void
     321confirmRemove( GtkWindow * parent,
     322               TrCore    * core,
     323               GList     * torrents )
     324{
     325    GtkWidget * d;
     326    char text[128];
     327    struct DeleteData * dd = g_new0( struct DeleteData, 1 );
     328
     329    dd->core = core;
     330    dd->torrents = torrents;
     331    dd->delete_files = FALSE;
     332
     333    g_snprintf( text, sizeof( text ),
     334                ngettext( "Remove torrent?",
     335                          "Remove torrents?",
     336                          g_list_length( torrents ) ) );
     337    d = gtk_message_dialog_new_with_markup( parent,
     338                                            GTK_DIALOG_DESTROY_WITH_PARENT,
     339                                            GTK_MESSAGE_QUESTION,
     340                                            GTK_BUTTONS_NONE,
     341                                            "<b>%s</b>", text );
     342    gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( d ),
     343                         _( "This removes the torrent, not its downloads." ) );
     344    gtk_dialog_add_buttons( GTK_DIALOG( d ),
     345                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
     346                            GTK_STOCK_REMOVE, GTK_RESPONSE_ACCEPT,
     347                            NULL );
     348    gtk_dialog_set_default_response( GTK_DIALOG ( d ),
     349                                     GTK_RESPONSE_ACCEPT );
     350    gtk_dialog_set_alternative_button_order( GTK_DIALOG( d ),
     351                                             GTK_RESPONSE_ACCEPT,
     352                                             GTK_RESPONSE_CANCEL,
     353                                             -1 );
     354    g_signal_connect( d, "response", G_CALLBACK( removeResponse ), dd );
     355    gtk_widget_show_all( d );
    329356}
    330357
     
    334361               GList     * torrents )
    335362{
    336     char buf[1024];
    337     GtkWidget * t;
    338363    GtkWidget * d;
    339     GtkWidget * w;
    340     GtkWidget * warn;
     364    char text[128];
    341365    struct DeleteData * dd = g_new0( struct DeleteData, 1 );
    342366
    343367    dd->core = core;
    344368    dd->torrents = torrents;
    345 
    346     d = gtk_dialog_new_with_buttons( _( "Remove Torrent" ),
    347                                      parent,
    348                                      GTK_DIALOG_DESTROY_WITH_PARENT|GTK_DIALOG_NO_SEPARATOR,
    349                                      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
    350                                      GTK_STOCK_REMOVE, GTK_RESPONSE_ACCEPT,
    351                                      NULL );
     369    dd->delete_files = TRUE;
     370
     371    g_snprintf( text, sizeof( text ),
     372                ngettext( "Delete torrent?",
     373                          "Delete torrents?",
     374                          g_list_length( torrents ) ) );
     375    d = gtk_message_dialog_new_with_markup( parent,
     376                                            GTK_DIALOG_DESTROY_WITH_PARENT,
     377                                            GTK_MESSAGE_WARNING,
     378                                            GTK_BUTTONS_NONE,
     379                                            "<b>%s</b>", text );
     380    gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG( d ),
     381                  _( "This removes the torrent and deletes its downloads!" ) );
     382    gtk_dialog_add_buttons( GTK_DIALOG( d ),
     383                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
     384                            GTK_STOCK_DELETE, GTK_RESPONSE_ACCEPT,
     385                            NULL );
     386    gtk_dialog_set_default_response( GTK_DIALOG ( d ),
     387                                     GTK_RESPONSE_CANCEL );
    352388    gtk_dialog_set_alternative_button_order( GTK_DIALOG( d ),
    353389                                             GTK_RESPONSE_ACCEPT,
    354390                                             GTK_RESPONSE_CANCEL,
    355391                                             -1 );
    356     g_signal_connect( d, "response", G_CALLBACK( deleteResponse ), dd );
    357 
    358     t = gtk_table_new( 3, 2, FALSE );
    359     gtk_container_set_border_width( GTK_CONTAINER( t ), GUI_PAD_BIG );
    360     gtk_table_set_col_spacing( GTK_TABLE( t ), 0, GUI_PAD_BIG );
    361     gtk_table_set_row_spacings( GTK_TABLE( t ), GUI_PAD_BIG );
    362 
    363     w = gtk_image_new_from_stock( GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG );
    364     gtk_table_attach( GTK_TABLE( t ), w, 0, 1, 0, 3, GTK_FILL, GTK_FILL, 0, 0 );
    365     gtk_widget_show( w );
    366 
    367     g_snprintf( buf, sizeof(buf), "<b>%s</b>", _( "Remove the selected torrent(s)?" ) );
    368     w = gtk_label_new( buf );
    369     gtk_misc_set_alignment( GTK_MISC( w ), 0.0, 0.5 );
    370     gtk_label_set_use_markup( GTK_LABEL( w ), TRUE );
    371     gtk_table_attach( GTK_TABLE( t ), w, 1, 2, 0, 1, GTK_FILL, 0, 0, 0 );
    372     gtk_widget_show( w );
    373 
    374     g_snprintf( buf, sizeof( buf ), "<i>%s</i>",
    375                 _( "All downloaded files for this torrent will be deleted!" ) );
    376     warn = gtk_label_new( buf );
    377     gtk_label_set_use_markup( GTK_LABEL( warn ), TRUE );
    378     gtk_table_attach( GTK_TABLE( t ), warn, 1, 2, 2, 3, GTK_FILL, 0, 0, 0 );
    379    
    380     w = gtk_check_button_new_with_mnemonic( _( "Delete _downloaded files" ) );
    381     dd->delete_files_tb = w;
    382     gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), FALSE );
    383     gtk_table_attach( GTK_TABLE( t ), w, 1, 2, 1, 2, GTK_FILL, 0, 0, 0 );
    384     g_signal_connect( w, "toggled", G_CALLBACK(deleteDownloadedToggled), warn );
    385     gtk_widget_show( w );
    386 
    387     gtk_widget_show( t );
    388     gtk_container_add( GTK_CONTAINER( GTK_DIALOG( d )->vbox ), t );
    389     gtk_widget_show( d );
    390 }
     392    g_signal_connect( d, "response", G_CALLBACK( removeResponse ), dd );
     393    gtk_widget_show_all( d );
     394}
  • trunk/gtk/dialogs.h

    r5122 r5180  
    4040
    4141void confirmDelete( GtkWindow * parent, TrCore * core, GList * torrents );
     42void confirmRemove( GtkWindow * parent, TrCore * core, GList * torrents );
    4243
    4344#endif /* TG_PREFS_H */
  • trunk/gtk/main.c

    r5166 r5180  
    201201    action_sensitize( "start-torrent", counts.inactiveCount!=0 );
    202202    action_sensitize( "remove-torrent", counts.totalCount!=0 );
     203    action_sensitize( "delete-torrent", counts.totalCount!=0 );
    203204    action_sensitize( "verify-torrent", counts.totalCount!=0 );
    204205    action_sensitize( "show-torrent-details", counts.totalCount==1 );
     
    807808
    808809#if GTK_CHECK_VERSION(2,8,0)
    809     gtk_window_set_urgency_hint( GTK_WINDOW( cbdata->wind ), TRUE );
     810    if( cbdata->wind )
     811        gtk_window_set_urgency_hint( GTK_WINDOW( cbdata->wind ), TRUE );
    810812    g_signal_connect( w, "focus-in-event",
    811813                      G_CALLBACK(on_main_window_focus_in),  cbdata );
     
    957959
    958960static void
    959 accumulateSelectedTorrents( GtkTreeModel * model,
    960                             GtkTreePath  * path UNUSED,
    961                             GtkTreeIter  * iter,
    962                             gpointer       gdata )
    963 {
    964     GList ** data = ( GList** ) gdata;
    965     TrTorrent * tor = NULL;
    966     gtk_tree_model_get( model, iter, MC_TORRENT, &tor, -1 );
    967     *data = g_list_append( *data, tor );
    968 }
    969 
    970 static void
    971961updateTrackerForeach (GtkTreeModel * model,
    972962                      GtkTreePath  * path UNUSED,
     
    10291019
    10301020static gboolean
    1031 msgwinclosed()
     1021msgwinclosed( void )
    10321022{
    10331023  action_toggle( "toggle-message-log", FALSE );
    10341024  return FALSE;
     1025}
     1026
     1027static void
     1028accumulateSelectedTorrents( GtkTreeModel * model,
     1029                            GtkTreePath  * path UNUSED,
     1030                            GtkTreeIter  * iter,
     1031                            gpointer       gdata )
     1032{
     1033    GList ** data = ( GList** ) gdata;
     1034    TrTorrent * tor = NULL;
     1035    gtk_tree_model_get( model, iter, MC_TORRENT, &tor, -1 );
     1036    *data = g_list_append( *data, tor );
     1037}
     1038
     1039static void
     1040removeSelected( struct cbdata * data, gboolean doDelete )
     1041{
     1042    GList * l = NULL;
     1043    GtkTreeSelection * s = tr_window_get_selection( data->wind );
     1044    gtk_tree_selection_selected_foreach( s, accumulateSelectedTorrents, &l );
     1045    gtk_tree_selection_unselect_all( s );
     1046    if( l ) {
     1047        if( doDelete )
     1048            confirmDelete( data->wind, data->core, l );
     1049        else
     1050            confirmRemove( data->wind, data->core, l );
     1051    }
    10351052}
    10361053
     
    10861103        gtk_widget_show_all( w );
    10871104    }
    1088     else if (!strcmp (action_name, "remove-torrent"))
    1089     {
    1090         GList * l = NULL;
    1091         GtkTreeSelection * s = tr_window_get_selection(data->wind);
    1092         gtk_tree_selection_selected_foreach( s, accumulateSelectedTorrents, &l );
    1093         gtk_tree_selection_unselect_all( s );
    1094         if( l != NULL )
    1095             confirmDelete( data->wind, data->core, l );
     1105    else if( !strcmp( action_name, "remove-torrent" ) )
     1106    {
     1107        removeSelected( data, FALSE );
     1108    }
     1109    else if( !strcmp( action_name, "delete-torrent" ) )
     1110    {
     1111        removeSelected( data, TRUE );
    10961112    }
    10971113    else if (!strcmp (action_name, "close"))
  • trunk/gtk/ui.h

    r4911 r5180  
    1010"      <menuitem action='pause-torrent'/>\n"
    1111"      <menuitem action='verify-torrent'/>\n"
     12"      <menuitem action='show-torrent-details'/>\n"
    1213"      <menuitem action='remove-torrent'/>\n"
    13 "      <menuitem action='show-torrent-details'/>\n"
     14"      <menuitem action='delete-torrent'/>\n"
    1415"      <separator/>\n"
    1516"      <menuitem action='close'/>\n"
     
    6364"    <separator/>\n"
    6465"    <menuitem action='remove-torrent'/>\n"
     66"    <menuitem action='delete-torrent'/>\n"
    6567"  </popup>\n"
    6668"\n"
Note: See TracChangeset for help on using the changeset viewer.