2012-03-24 4 views
0

Ich brauche ein GTK + empfangen in Veranstaltung konzentrieren auf einem Terminal (VTE), aber das Ereignis zurückgibt EventFocus die Gtk.Window Referenz gilt:konvertieren GdkX11Window zu VTE Terminal-Klasse in einem Fokus Ereignis

http://www.valadoc.org/gdk-3.0/Gdk.EventFocus.html

Wie kann ich das Terminal von der Fensterreferenz erhalten? Ich kann es nicht erneut eingeben, es sieht so aus, als wäre es ein Container. Aber ich bin nicht in der Lage, die Methode zu finden, um das Terminal zu erreichen.

Terminal terminal = new Terminal(); 
    // ... 
    terminal.focus_in_event.connect((event) => 
    { 
    the_terminal = event.window; // DOES NOT WORK > invalid cast from `GdkX11Window' to `Terminal' 
    return false; 
    }); 

Danke für das Aufzeigen, dass ich es nicht brauche. Ja, mein richtiger Code ist:

for (int i = 0; i < terminal.length; i++) { 
    this.terminal[i].focus_in_event.connect((event) => 
    { 
    GLib.stdout.printf("Focus event terminal %p\n", this.terminal[i]); 
    return false; 
    }); 
} 

Leider druckt es immer null :-(

Dank

Antwort

2

Ich bin nicht sicher, gibt es eine einfache Möglichkeit, ein Gdk.Window zu einem Gtk.Widget zu konvertieren, wie! Nicht alle Widgets haben notwendigerweise ein zugehöriges GDK-Fenster.Wenn ich es sehe, gibt es keinen zwingenden Grund, das Terminal aus dem event zu extrahieren.Im Kontext des Callbacks können Sie einfach auf die äußere Variable terminal verweisen, und Vala wird es heben in den Rückruf

+0

Ja, aber mein Problem ist, ich habe ein Bündel (Array) von Terminals, also bin ich in einer Schleife verbinden: foreach (Terminal t in Terminals). Und wenn ich versuche, dort "t" Variable zu verwenden, schreit Vala. Ich dachte, ich kann Verschlüsse benutzen, aber anscheinend kann ich nicht. – lzap

+0

Ich habe meine Frage bearbeiten. Vielen Dank. – lzap

+0

Sieht aus wie ein Fehler in Vala: https://bugzilla.gnome.org/show_bug.cgi?id=672767 – lzap

Verwandte Themen