【问题标题】:Convert GdkX11Window to VTE Terminal class in an focus event在焦点事件中将 GdkX11Window 转换为 VTE 终端类
【发布时间】:2012-12-17 17:22:03
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: gtk glib vala vte


    【解决方案1】:

    我不确定是否有一种简单的方法可以将 Gdk.Window 转换为 Gtk.Widget,因为并非所有小部件都必然具有关联的 GDK 窗口。在我看来,没有令人信服的理由尝试从event 中提取终端。在回调的上下文中,您可以简单地引用外部变量terminal,Vala 会将其提升到回调中。

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

    【讨论】:

    • 是的,但我的问题是我有一堆(数组)终端,所以我在一个循环中连接:foreach(终端中的终端 t)。当我尝试在那里使用“t”变量时,vala 尖叫起来。我以为我可以使用闭包,但显然我不能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多