命令行中启动GTK+桌面程序出现警告

在cli里面运行GTK+的窗口程序时,会显示警告。查了一下,说是一个由来已久的bug,例如:

$ xsensors
(xsensors:3148): topmenu-module-CRITICAL **: gtk_module_init: assertion '!already_initialized' failed

不知道这个事是不是已经解决了。

参考:
https://bugs.launchpad.net/ubuntu/+source/libcanberra/+bug/1075928
https://askubuntu.com/questions/197549/all-gtk-applications-opened-with-warning-assertion-gdk-error-traps-null-fa

根据 xfce4-topmenu-plugin 的设计,这貌似是正常现象

在 xfce4-topmenu-plugin 中,gtk_module_init() 函数负责初始化工作。为了避免该函数被重复调用,设置一个标志布尔变量 already_initialized,初始值为 FALSE。并在 gtk_module_init() 中使用 g_return_if_fail(!already_initialized) 检测之前是否调用过该函数。

这样一来,如果之前已经调用过该函数,already_initialized 的值为 TRUE!already_initialized 为 FALSE,从而通过 g_return_if_fail() 提前退出,避免重复初始化。

这里不太明白的是,作者为何要使用 g_return_if_fail(),而不使用简单的 if (already_initialized) return。后者会静悄悄地完成工作,而前者会在应用程序的标准输出中打印显眼的错误信息,如主贴所示。检测重复加载并不算“错误”信息。根据 glib 文档,g_return_if_fail() “如果您只是意味着 “if(error)return”,则不应该使用它们,只有当您的意思是“if(程序中的错误)返回”时才应该使用它们)”

 

这些是其它应用程序的问题,可能与您的问题无关

vickycq看问题真细致啊,真不知道去哪找那么详细的信息。看懂了你的分析,看来代码不改的话,这种警告总会存在的。可能在CLI里启动窗口程序的情境不多吧,没人重视这个bug。

我能经常遇到这些讨厌的警告是因为经常用texdoc察看LaTeX的宏包文档。在evince打开文档的时候就列出一堆类似的警告。

这种警告我一般就忽略了, 哈哈