2012-03-24 17 views
0

我需要接收一個GTK +集中在事件上的終端(VTE),但事件返回EventFocus保持Gtk.Window參考:轉換GdkX11Window到VTE終端類在一個焦點事件

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

我怎樣才能從窗口引用獲取終端?我無法重新輸入,它看起來像是一個容器。但我無法找到要調用終端的方法。

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; 
    }); 

感謝您指出我不需要它。是啊,我真正的代碼是:

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; 
    }); 
} 

不幸的是它始終打印空:-(

感謝

回答

2

我不知道有一個簡單的方法來一個Gdk.Window轉換爲Gtk.Widget作爲!並不是所有的窗口小部件都有相關的GDK窗口,因爲我看到它沒有任何理由嘗試從event中提取終端。在回調的上下文中,可以簡單地引用外部變量terminal,Vala將解除它進入回調。

Terminal terminal = new Terminal(); 
// ... 
terminal.focus_in_event.connect((event) => 
{ 
    terminal.queue_draw(); 
    return false; 
}); 
+0

是的,但我的問題是我有一堆(數組)的終端,所以我連接在一個循環:foreach(終端t在終端)。當我嘗試在那裏使用「t」變量時,vala尖叫。我以爲我可以使用閉包,但顯然我不能。 – lzap 2012-03-24 14:09:47

+0

我已編輯我的問題。謝謝。 – lzap 2012-03-24 14:11:50

+0

看起來像vala中的錯誤:https://bugzilla.gnome.org/show_bug.cgi?id = 672767 – lzap 2012-03-24 20:25:18