2012-03-24 3 views
0

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

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

Как я могу получить Terminal из ссылки 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 :-(

Благодаря

ответ

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 (Terminal t в терминалах). И когда я пытаюсь использовать переменную «t», вала кричит. Я думал, что могу использовать закрытие, но, видимо, не могу. – lzap

+0

У меня есть мой вопрос. Благодарю. – lzap

+0

Похож на ошибку в vala: https://bugzilla.gnome.org/show_bug.cgi?id=672767 – lzap

Смежные вопросы