响应 GTK+ 3 中的主题更改

Ind*_*oad 5 gtk themes gtk2 gtk3 gnome-3

某些应用程序可以实时响应 GTK+ 主题更改。例如,Thunar、Geany、lxrandr、Hexchat 都会在主题更改时更新它们的 UI,例如在 lxappearance 中。这些都是 GTK+ 2 程序。

另一方面,到目前为止,我尝试过的所有 GTK+ 3 程序(包括 baobab、moserial gucharmap、ghex、pamac、evince、xreader)似乎无法重新加载主题,需要重新启动应用程序。

lxappearance(gtk2在我的系统上编译)正在发送一个 GTK+“信号”(不是 100% 在 GTK-land 中的术语)以导致应用程序重新加载:

// src/lxappearance.c line 198
static void reload_all_programs()
{
#if GTK_CHECK_VERSION(3, 0, 0)

/* TODO Port this to something else than gdk_event_send_clientmessage_toall */

#else
    GdkEventClient event;
    event.type = GDK_CLIENT_EVENT;
    event.send_event = TRUE;
    event.window = NULL;

    if( app.use_lxsession )
    {
        event.message_type = gdk_atom_intern_static_string("_LXSESSION");
        event.data.b[0] = 0;    /* LXS_RELOAD */
    }
    else
    {
        /* if( icon_only )
            event.message_type = gdk_atom_intern("_GTK_LOAD_ICONTHEMES", FALSE);
        */
        event.message_type = gdk_atom_intern("_GTK_READ_RCFILES", FALSE);
    }
    event.data_format = 8;
    gdk_event_send_clientmessage_toall((GdkEvent *)&event);
#endif
}
Run Code Online (Sandbox Code Playgroud)

_GTK_READ_RCFILES事件显然是导致 GTK+ 2 中所有程序的主题更新的原因,但 GTK+ 3 程序似乎对此不敏感。

此处_GTK_READ_RCFILES也推荐该方法(在 Python 中)。

GTK+ 3 及更高版本中的等价物是什么?