又对awn-applet的通知栏图标hack了一下

2008年9月4日 | 分类: Hacks | 标签: ,
曾经写过一篇文章《对awn-applet的notification area的一个小改动》,目的是为了避免高像素图标将notification area这个applet的高度撑破,经过修改,确实能将每个图标的像素给固定住,使得applet保持原大小。今天通过重新解读代码,发现原来的修改步骤并不那么完美,事实上只需要修改一条语句即可,仍旧是在applet.c这个源文件中,看到如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
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函数,在中有声明,含义为为第一个参数指定的widget请求大小,第二个参数为width,第三个参数为height。经过添加printf监听变量,发现除了awn启动后icon_size为原先指定好的24,此后一直就变为-1(其意义为不约束图标大小,使用原大小)。而图标通常都是尽可能使用高像素图标的,所以会造成撑破applet高度的现象。

因此不用我以前那么麻烦的修改,只需要在第11行上将后一个icon_size指定好大小即可。

但是有些细节还是不尽完美。比如grnotify这个软件在notification area上的高宽比不是1:1,图标右侧有未读订阅数显示,效果如下图:

而经过我修改的新applet中,grnotify这个软件的高宽比变成是1:1,也就是它图标右侧的未读订阅数不能显示,如下图:

我是个偏向完美主义的人,自然要继续修改代码。

弄了半天之后发现,原来将第11行代码上的24改成22就可以了。因为以前修改过pidgin的图标,知道trayicon一般有三种分辨率:18x18,22x22,48x48。为什么修改成22就可以显示真实的宽高比了呢?估计和图标的显示机制有关。

不猜了,反正我现在用着正常就好,嗯。

  1. 2008年9月6日20:45

    不错啊,自动动手改东西。。。