曾经写过一篇文章《对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就可以显示真实的宽高比了呢?估计和图标的显示机制有关。

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

欢迎光临Caspar Ant,如果您喜欢本站的内容,欢迎订阅我的RSS;如果您需要出于非商业性质的转载,请先阅读版权声明页面。

日志标签

相关日志

日志信息

本文的Trackback地址为:http://www.casparant.com/a-recently-hack-of-notification-area-in-awn-applet.html/trackback,转载本站文章前请仔细阅读本站的版权声明页。您也可以选择点击下列按钮收藏本文到网络书签中:

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

One Response to “对awn-applet的notification area的最新改动”

Leave a Reply


Powered by Wordpress © 2008 - Caspar Ant | iKon Theme by TextNData | Admin | 京ICP备09031755号