曾经写过一篇文章《对 awn-applet 的 notification area 的一个小改动》,目的是为了避免高像素图标将 notification area 这个 applet 的高度撑破,经过修改,确实能将每个图标的像素给固定住,使得 applet 保持原大小。今天通过重新解读代码,发现原来的修改步骤并不那么完美,事实上只需要修改一条语句即可,仍旧是在 applet.c 这个源文件中,看到如下代码:
static void
tray_icon_added (EggTrayManager *manager,
GtkWidget *icon,
TrayApplet *applet)
{
//gtk_widget_set_size_request (GTK_WIDGET (icon), 24, 24);
g_object_set_qdata (G_OBJECT (icon), new_quark, GINT_TO_POINTER (1));
g_object_set_qdata (G_OBJECT (icon), del_quark, GINT_TO_POINTER (0));
applet->icons = g_list_append (applet->icons, icon);
gtk_widget_set_size_request (icon, icon_size, icon_size);
tray_applet_refresh (applet);
}
其中的 11 行的gtk_widget_set_size_request
函数,在
因此不用我以前那么麻烦的修改,只需要在第 11 行上将后一个 icon_size 指定好大小即可。
但是有些细节还是不尽完美。比如 grnotify 这个软件在 notification area 上的高宽比不是 1:1,图标右侧有未读订阅数显示,效果如下图:
而经过我修改的新 applet 中,grnotify 这个软件的高宽比变成是 1:1,也就是它图标右侧的未读订阅数不能显示,如下图:
我是个偏向完美主义的人,自然要继续修改代码。
弄了半天之后发现,原来将第 11 行代码上的 24 改成 22 就可以了。因为以前修改过 pidgin 的图标,知道 trayicon 一般有三种分辨率:18x18,22x22,48x48。为什么修改成 22 就可以显示真实的宽高比了呢?估计和图标的显示机制有关。
不猜了,反正我现在用着正常就好,嗯。