Vala为更高的GTK / GDK版本生成已弃用的警告

时间:2017-01-08 10:20:04

标签: gtk3 vala

我正在使用GTK版本3.18附带的ElementaryOS Loki编译一些Vala代码。现在我得到(很多)不赞成的警告,如:

src/ScreenGrabber.vala:64.55-64.94: warning: Gdk.Display.get_device_manager has been deprecated since 3.20.
src/ScreenGrabber.vala:64.55-64.115: warning: Gdk.DeviceManager.get_client_pointer has been deprecated since 3.20
src/ScreenGrabber.vala:85.19-85.50: warning: Gdk.Screen.get_active_window has been deprecated since 3.22

但是推荐的替代方法应该用于支持“已弃用”的方法,但在3.18中根本不存在,所以我不能使用它们。

如何让valac为给定的GTK版本提供正确的警告?我倾向于完全关闭警告,如果可能的话我宁愿避免。 valac有一个开关--target-glib,但没有等效的“--target-gtk”

-

编辑: 例如这个小程序用valac -o test test.vala --pkg=gtk+-3.0编译时会显示问题(在ElementaryOS Loki上,使用GTK 3.18)

using Gtk;
public class Test {

    public Test() {
        var manager = Gdk.Display.get_default().get_device_manager();
    }

    public static int main(string[] args) {
        var test = new Test();
        return 0;
    }   
}   

1 个答案:

答案 0 :(得分:3)

可能最好的解决方案是在使用--enable-deprecated进行编译时使用valac开关。如果不起作用,您也可以尝试--disable-since-check--disable-since-check在Vala 0.32中引入了新的[Version]属性。

在理想的世界中,图书馆也会为Vala分发其绑定。这意味着绑定与库保持同步。请参阅Vala Bindings Upstream guide

GTK +和Vala都是GNOME托管项目。虽然Vala带有GTK +绑定,但两个项目都保持同步,并且可以很好地协同工作。与您的问题有关,GTK + 3.18 was released 22 September 2015和Vala 0.30 on the 18 September 2015。这两个都是及时GNOME 3.18 release on 23 September 2015

Loki发生了什么,according to the Loki beta release blog post,GTK + 3.18和Vala 0.32已捆绑在一起。 Vala 0.32携带GTK + 3.20的绑定。

因此,您可以从Vala 0.30.0版本下载gtk+-3.0.vapigdk-3.0.vapi,然后使用它。不幸的是,由于最近VAPI中记录的版本信息的变化方式,这将显示许多不同的警告。 Vala现在使用[Version]而不是[Deprecated]。可以使用--enable-deprecated来抑制这些不同的警告。

如果您为分发做出贡献,那么分发需要将Vala编译器与编译器附带的绑定捆绑在一起的根本原因。所以他们可以有两个或更多的包。一个用于编译器,一个用于非上游绑定,例如vala-0.30vala-non-upstreamed-bindings-0.30。虽然这有点简化,例如Vala will continue to carry a binding some time after it has been generated upstream