回应GTK + 3中的主题变化

时间:2017-07-18 11:49:43

标签: gtk themes gtk3 gtk2 gnome-3

某些应用程序可以对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及更高版本中的等效内容是什么?

0 个答案:

没有答案