gtk3 - Vala 为更高的 GTK/GDK 版本生成不推荐使用的警告

标签 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;
    }   
}   

最佳答案

可能最好的解决方案是使用 --enable-deprecated使用 valac 编译时切换.你也可以试试--disable-since-check如果那不起作用。 --disable-since-check在 Vala 0.32 中引入了新的 [Version]属性。

在理想的世界中,图书馆也会分发其对 Vala 的绑定(bind)。这意味着绑定(bind)与库保持同步。见 Vala Bindings Upstream guide .

GTK+ 和 Vala 都是 GNOME 托管项目。尽管 Vala 带有 GTK+ 绑定(bind),但两个项目保持同步并且应该可以很好地协同工作。具体与您的问题有关,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 的绑定(bind)。

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

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

关于gtk3 - Vala 为更高的 GTK/GDK 版本生成不推荐使用的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531627/

相关文章:

c - GTK:设置C中网格的大小

python - 为什么我的 gi.repository.Gtk 一直使用 GTK 2 模块?

mysql - Vala:MySQL程序未编译

python - python GTK3中TextView空闲时运行方法

Python GTK 信号处理程序不工作

autotools - 是否有终端工具可以自动为 Vala 项目生成 autoconf/automake makefile?

vala - Vala 数组支持哪些方法和属性?

function - 我可以让一个函数在 Vala 中处理多个数据类型参数吗?

Python - gtk3 将股票图标添加到 Gtk.Buttons

cmake - 使用 cmake : `Undefined reference to ' g_thread_init'` 编译 vala