Ignore:
Timestamp:
Aug 2, 2010, 8:55:11 PM (12 years ago)
Author:
charles
Message:

(trunk) add drag-and-drop support to the "create new torrent" dialogs in the Qt and GTK+ clients

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gtk/makemeta-ui.c

    r10970 r11098  
    3333    char * target;
    3434    guint progress_tag;
     35    GtkWidget * file_radio;
    3536    GtkWidget * file_chooser;
     37    GtkWidget * folder_radio;
    3638    GtkWidget * folder_chooser;
    3739    GtkWidget * pieces_lb;
     
    378380}
    379381
     382static void
     383on_drag_data_received( GtkWidget         * widget           UNUSED,
     384                       GdkDragContext    * drag_context     UNUSED,
     385                       gint                x                UNUSED,
     386                       gint                y                UNUSED,
     387                       GtkSelectionData  * selection_data,
     388                       guint               info             UNUSED,
     389                       guint               time             UNUSED,
     390                       gpointer            user_data )
     391{
     392    MakeMetaUI * ui = user_data;
     393    char ** uris = gtk_selection_data_get_uris( selection_data );
     394
     395    if( uris && uris[0] )
     396    {
     397        const char * uri = uris[ 0 ];
     398        gchar * filename = g_filename_from_uri( uri, NULL, NULL );
     399
     400        if( g_file_test( filename, G_FILE_TEST_IS_DIR ) )
     401        {
     402            /* a directory was dragged onto the dialog... */
     403            gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( ui->folder_radio ), TRUE );
     404            gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( ui->folder_chooser ), filename );
     405        }
     406        else if( g_file_test( filename, G_FILE_TEST_IS_REGULAR ) )
     407        {
     408            /* a file was dragged on to the dialog... */
     409            gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( ui->file_radio ), TRUE );
     410            gtk_file_chooser_set_filename( GTK_FILE_CHOOSER( ui->file_chooser ), filename );
     411        }
     412
     413        g_free( filename );
     414    }
     415
     416    g_strfreev( uris );
     417}
     418
    380419GtkWidget*
    381420make_meta_ui( GtkWindow  * parent, TrCore * core )
     
    416455        g_signal_connect( l, "toggled", G_CALLBACK( onSourceToggled ), w );
    417456        g_signal_connect( w, "selection-changed", G_CALLBACK( onChooserChosen ), ui );
     457        ui->folder_radio = l;
    418458        ui->folder_chooser = w;
    419459        gtk_widget_set_sensitive( GTK_WIDGET( w ), FALSE );
     
    427467        g_signal_connect( l, "toggled", G_CALLBACK( onSourceToggled ), w );
    428468        g_signal_connect( w, "selection-changed", G_CALLBACK( onChooserChosen ), ui );
     469        ui->file_radio = l;
    429470        ui->file_chooser = w;
    430471        hig_workarea_add_row_w( t, &row, l, w, NULL );
     
    475516    gtk_box_pack_start( GTK_BOX( GTK_DIALOG( d )->vbox ), t, TRUE, TRUE, 0 );
    476517
     518    gtk_drag_dest_set( d, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY );
     519    gtk_drag_dest_add_uri_targets( d );
     520    gtk_drag_dest_add_text_targets( d );
     521    g_signal_connect( d, "drag-data-received", G_CALLBACK( on_drag_data_received ), ui );
     522
    477523    return d;
    478524}
Note: See TracChangeset for help on using the changeset viewer.