我需要在终端(VTE)上接收GTK +焦点事件,但该事件返回包含Gtk.Window参考的EventFocus:
http://www.valadoc.org/gdk-3.0/Gdk.EventFocus.html
如何从Window参考中获取终端?我无法重新输入它,它看起来像是一个容器。但是我无法找到调用终端的方法。
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;
});
}
不幸的是它始终打印为null: - (
谢谢!
答案 0 :(得分:2)
我不确定是否有一种简单的方法可以将Gdk.Window
转换为Gtk.Widget
,因为并非所有小部件都具有关联的GDK窗口。在我看来,尝试从event
中提取终端没有令人信服的理由。在回调的上下文中,您可以简单地引用外部变量terminal
,Vala会将其提升到回调中。
Terminal terminal = new Terminal();
// ...
terminal.focus_in_event.connect((event) =>
{
terminal.queue_draw();
return false;
});