Vala 为更高 GTK/GDK 版本生成弃用警告
Vala generates deprecated warnings for higher GTK/GDK Versions
我正在 ElementaryOS Loki 上编译一些 Vala 代码,它随 GTK 版本 3.18 一起提供。现在我收到(很多)已弃用的警告,例如:
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
但是应该使用支持 "deprecated" 方法的推荐替代方法在 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;
}
}
最好的解决方案可能是在使用 valac
进行编译时使用 --enable-deprecated
开关。如果不起作用,您也可以尝试 --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 and Vala 0.30 on the 18 September 2015. Both of these were in time for the 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.vapi and gdk-3.0.vapi 并使用它。不幸的是,这会显示很多不同的警告,因为 VAPI 中版本信息的记录方式最近发生了变化。 Vala 现在使用 [Version]
而不是 [Deprecated]
。可以使用 --enable-deprecated
.
来抑制这些不同的警告
如果您为发行版做出贡献,那么发行版就没有必要将 Vala 编译器与编译器附带的绑定捆绑在一起。所以他们可以有两个或更多的包裹。一种用于编译器,一种用于非上游绑定,例如vala-0.30
和 vala-non-upstreamed-bindings-0.30
。尽管这有点简化,例如 Vala will continue to carry a binding some time after it has been generated upstream.
我正在 ElementaryOS Loki 上编译一些 Vala 代码,它随 GTK 版本 3.18 一起提供。现在我收到(很多)已弃用的警告,例如:
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
但是应该使用支持 "deprecated" 方法的推荐替代方法在 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;
}
}
最好的解决方案可能是在使用 valac
进行编译时使用 --enable-deprecated
开关。如果不起作用,您也可以尝试 --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 and Vala 0.30 on the 18 September 2015. Both of these were in time for the 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.vapi and gdk-3.0.vapi 并使用它。不幸的是,这会显示很多不同的警告,因为 VAPI 中版本信息的记录方式最近发生了变化。 Vala 现在使用 [Version]
而不是 [Deprecated]
。可以使用 --enable-deprecated
.
如果您为发行版做出贡献,那么发行版就没有必要将 Vala 编译器与编译器附带的绑定捆绑在一起。所以他们可以有两个或更多的包裹。一种用于编译器,一种用于非上游绑定,例如vala-0.30
和 vala-non-upstreamed-bindings-0.30
。尽管这有点简化,例如 Vala will continue to carry a binding some time after it has been generated upstream.