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 及更高版本中的等价物是什么?