Преобразование GdkX11Window в класс терминала VTE в событии фокуса - PullRequest
0 голосов
/ 24 марта 2012

Мне нужно получить GTK + фокус в событии на Терминале (VTE), но событие возвращает EventFocus, который содержит ссылку Gtk.Window:

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

К сожалению, он всегда печатает ноль: - (

Спасибо!

1 Ответ

2 голосов
/ 24 марта 2012

Я не уверен, что есть простой способ конвертировать Gdk.Window в Gtk.Widget, так как не все виджеты имеют связанное окно GDK, обязательно.На мой взгляд, нет никаких веских причин пытаться извлечь терминал из event.В контексте обратного вызова вы можете просто ссылаться на внешнюю переменную terminal, и Vala поднимет ее в обратный вызов.

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