在焦点事件中将GdkX11Window转换为VTE Terminal类

时间:2012-03-24 13:47:17

标签: gtk glib vala vte

我需要在终端(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: - (

谢谢!

1 个答案:

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