Como evitar que um Gtk.SourceView pegue o URI de um arquivo

0

Estou fazendo um editor de texto usando o GTK3 em Vala. Eu preciso arrastar um arquivo e, quando eu soltá-lo na janela do aplicativo, o aplicativo abre esse arquivo. Estou usando um Gtk.Notebook que contém Gtk.SourceView . Ele funciona quando eu solto um arquivo em um Gtk.Notebook vazio, mas quando há pelo menos um Gtk.SourceView anexado, o SourceView pega o URI do arquivo, mostra e a janela não aguenta a abertura do arquivo.

Nesse caso, o que posso fazer para impedir que um Gtk.SourceView pegue o URI de um arquivo quando eu descartar um arquivo em Gtk.SourceView .

PS: tentei usar o drag_dest_unset() dentro da classe derivada SourceView . Funcionou, o SourceView não pegou o URI e a janela pôde abrir o arquivo, mas o aplicativo mostrou uma mensagem como essa, em tempo de execução:

Gtk-WARNING **: Can't set a target list on a widget until you've called gtk_drag_dest_set() to make the widget into a drag destination
    
por LuisABOL 20.11.2011 / 00:10

2 respostas

1

Para fazer com que Gtk.SourceView pare de pegar o uri, usei o seguinte trecho de código:

public class MySourceView: Gtk.SourceView {
    public MySourceView() {
        Gtk.TargetEntry[] targets;
        targets = new Gtk.TargetEntry[1];
        targets[0].target = "text/uri-list";
        targets[0].flags = 0;
        targets[0].info = 0;

        Gtk.drag_dest_set(this, Gtk.DestDefaults.ALL, targets, Gdk.DragAction.COPY);
        this.drag_data_received.connect(this.drag_data_received_cb);
    }

    private void drag_data_received_cb(Gtk.Widget sender,
                    Gdk.DragContext drag_context,
                    int x, int y,
                    Gtk.SelectionData data,
                    uint info, uint time) {
        print("Drag data received!\n");
        // Do something

        Gtk.drag_finish (drag_context, true, false, time);
    }
}

Dessa forma, o uri do arquivo que eu solto na visualização de origem não é colado nele e posso abrir o arquivo em outra guia.

    
por LuisABOL 07.03.2012 / 18:17
0

Parece que você está tentando arrastar o arquivo para o widget SourceView com a ideia de que ele abrirá uma nova guia em vez de abrir esse arquivo nesse widget de exibição de código-fonte.

O que você precisa fazer é não desabilitar o evento de arrastar, você precisa redirecioná-lo. O evento entrará no widget sourceview e você se conectará a ele e o transmitirá para o seu código (na sua janela?) Que lida com a abertura de uma nova guia.

Isso faz sentido? você precisa de amostras de código?

    
por Martin Owens -doctormo- 14.02.2012 / 00:43