如何修复 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