如何在Vala中调整窗口大小?

时间:2015-01-10 19:55:44

标签: callback resize window gtk3 vala

我正在编写一个Vala应用程序。我希望在窗口大小调整上执行一些函数。我尝试用窗口调整大小回调重写C示例,它似乎正在工作(编译,我的意思),但是当我运行我的程序时它会出现段错误。

这是我的代码:

Gtk.Widget toplevel = this.get_toplevel();
Gtk.Window window = (Gtk.Window)toplevel;

....

Signal.connect(window, "size-allocate", (GLib.Callback)this.callback, null);

,函数callback()为:

private bool callback(Gtk.Widget* window, Gtk.Allocation? a,  char * data )
{       
    resizeAllImages(window->get_allocated_width());
    return false;
}

我尝试将此(http://osdir.com/ml/gtk-list/2010-01/msg00092.html)教程重写为Vala,但看起来我做错了。 你能帮帮我吗?

1 个答案:

答案 0 :(得分:3)

您不需要直接使用connect。内置信号处理功能。信号具有相同的名称,并且破折号更改为下划线(例如,Gtk.Widget.size_allocate)。

要进行连接,只需将其添加到信号处理程序中,如下所示:

widget.size_allocate.connect(this.callback);

您的信号处理程序应如下所示:

private bool callback(Gtk.Widget sender, Gtk.Allocation? a) { ...

您的方法失败的原因是您将null传递给处理程序:

Signal.connect(window, "size-allocate", (GLib.Callback)this.callback, this);

Vala区分具有上下文(即闭包)的委托和没有上下文的委托(即函数指针,即“静态委托”)。如果你看Gtk.Callback,你会注意到has_target = false。这使它成为静态委托,因此您需要根据回调的需要传递数据ponter。

相关问题