如何修复 GTK+2 中的 "assertion 'GDK_IS_SCREEN (screen)' failed" 错误
How to fix "assertion 'GDK_IS_SCREEN (screen)' failed" error in GTK+2
我正在尝试编写一个简短的 C 程序,它可以让所有程序重新加载 GTK+2 主题,就像 LXAppearance 在您单击“应用”时所做的那样。
查看 LXAppearance 的源代码,我发现了一个函数可以做到这一点。 gtk-theme-switch.
中也有相同的函数(没有仅适用于 LXSession 的 if-else)
这是作为单独程序编写的代码:
#include <gtk/gtk.h>
int main()
{
GdkEventClient event;
event.type = GDK_CLIENT_EVENT;
event.send_event = TRUE;
event.window = NULL;
event.message_type = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
event.data_format = 8;
gdk_event_send_clientmessage_toall((GdkEvent*)&event);
}
当运行程序出现如下错误:
(process:3428): Gdk-CRITICAL **: 21:38:49.599: IA__gdk_screen_get_root_window: assertion 'GDK_IS_SCREEN (screen)' failed
Segmentation fault (core dumped)
我做错了什么?
您还没有初始化 GTK。至少,要使用 GTK 访问您当前的 X 显示,您需要在执行任何其他与 X 相关的事情之前调用 gtk_init
function。
我正在尝试编写一个简短的 C 程序,它可以让所有程序重新加载 GTK+2 主题,就像 LXAppearance 在您单击“应用”时所做的那样。
查看 LXAppearance 的源代码,我发现了一个函数可以做到这一点。 gtk-theme-switch.
中也有相同的函数(没有仅适用于 LXSession 的 if-else)这是作为单独程序编写的代码:
#include <gtk/gtk.h>
int main()
{
GdkEventClient event;
event.type = GDK_CLIENT_EVENT;
event.send_event = TRUE;
event.window = NULL;
event.message_type = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
event.data_format = 8;
gdk_event_send_clientmessage_toall((GdkEvent*)&event);
}
当运行程序出现如下错误:
(process:3428): Gdk-CRITICAL **: 21:38:49.599: IA__gdk_screen_get_root_window: assertion 'GDK_IS_SCREEN (screen)' failed
Segmentation fault (core dumped)
我做错了什么?
您还没有初始化 GTK。至少,要使用 GTK 访问您当前的 X 显示,您需要在执行任何其他与 X 相关的事情之前调用 gtk_init
function。