某些应用程序可以对GTK +主题更改做出实时响应。例如,Thunar,Geany,lxrandr,Hexchat将在主题更改时更新其UI,例如在lxappearance中。这些都是GTK + 2程序。
另一方面,到目前为止我尝试过的evey 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
}
_GTK_READ_RCFILES
事件显然导致GTK + 2中所有程序的主题更新,但GTK + 3程序似乎对它不敏感。
还建议使用_GTK_READ_RCFILES
方法here(在Python中)。
GTK + 3及更高版本中的等效内容是什么?