diff -ruN xosd-2.2.14/src/libxosd/intern.h xosd-2.2.14-xft-new/src/libxosd/intern.h
--- xosd-2.2.14/src/libxosd/intern.h	2004-11-05 03:50:45.000000000 +0800
+++ xosd-2.2.14-xft-new/src/libxosd/intern.h	2009-09-21 15:56:28.000000000 +0800
@@ -26,6 +26,14 @@
 #include <X11/Xutil.h>
 #include <X11/extensions/shape.h>
 #include <X11/Xatom.h>
+
+/*For pango xft support*/
+#include <X11/Xft/Xft.h>
+#include <pango/pango.h>
+#include <pango/pangoxft.h>
+#include <pango/pango-font.h>
+#include <locale.h>
+
 #ifdef HAVE_XINERAMA
 #  include <X11/extensions/Xinerama.h>
 #endif
@@ -144,6 +152,28 @@
 
   int timeout;                  /* CONF delta time */
   struct timeval timeout_start; /* DYN Absolute start of timeout */
+
+/*For pango xft support*/
+//  XftColor  xftnorm[ColLast];
+  XftColor  xftcolour;
+  XftColor  outline_xftcolour;
+  XftColor  shadow_xftcolour;
+  XftColor * draw_xftcolour;
+  enum {
+    XOSD_XFT_NORM = 0,
+    XOSD_XFT_OUTLINE,
+    XOSD_XFT_SHADOW,
+  } xft_font_colour;
+  XftDraw  *xftdrawable;
+  XftDraw  *xftdrawable_msk;
+  PangoContext *pgc;
+  PangoLayout  *plo;
+  PangoFontDescription *pfd;
+  int xftascent;
+  int xftdescent;
+  int xftheight;
+  int x;
+  int y;
 };
 
 static const int XOSD_MAX_PRINTF_BUF_SIZE=2000;
diff -ruN xosd-2.2.14/src/libxosd/Makefile.am xosd-2.2.14-xft-new/src/libxosd/Makefile.am
--- xosd-2.2.14/src/libxosd/Makefile.am	2004-08-20 06:39:33.000000000 +0800
+++ xosd-2.2.14-xft-new/src/libxosd/Makefile.am	2009-09-21 16:19:09.000000000 +0800
@@ -1,4 +1,4 @@
-AM_CFLAGS = -I$(top_srcdir)/src
+AM_CFLAGS = -I$(top_srcdir)/src  `pkg-config --cflags xft pango pangoxft`
 # Library
 lib_LTLIBRARIES 	= libxosd.la
 libxosd_la_SOURCES 	= xosd.c intern.h
diff -ruN xosd-2.2.14/src/libxosd/Makefile.in xosd-2.2.14-xft-new/src/libxosd/Makefile.in
--- xosd-2.2.14/src/libxosd/Makefile.in	2004-11-18 03:30:23.000000000 +0800
+++ xosd-2.2.14-xft-new/src/libxosd/Makefile.in	2009-09-21 16:18:42.000000000 +0800
@@ -210,7 +210,7 @@
 sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-AM_CFLAGS = -I$(top_srcdir)/src
+AM_CFLAGS = -I$(top_srcdir)/src `pkg-config --cflags xft pango pangoxft`
 # Library
 lib_LTLIBRARIES = libxosd.la
 libxosd_la_SOURCES = xosd.c intern.h
diff -ruN xosd-2.2.14/src/libxosd/xosd.c xosd-2.2.14-xft-new/src/libxosd/xosd.c
--- xosd-2.2.14/src/libxosd/xosd.c	2004-11-18 03:27:11.000000000 +0800
+++ xosd-2.2.14-xft-new/src/libxosd/xosd.c	2009-09-21 15:56:34.000000000 +0800
@@ -24,12 +24,17 @@
 #define XOFFSET 10
 
 const char *osd_default_font =
-  "-misc-fixed-medium-r-semicondensed--*-*-*-*-c-*-*-*";
+  "Sans 8";
+/*  "-misc-fixed-medium-r-semicondensed--*-*-*-*-c-*-*-*";*/
 #if 0
 "-adobe-helvetica-bold-r-*-*-10-*";
 #endif
 const char *osd_default_colour = "green";
 
+const char *osd_default_shadow_colour = "black";
+
+const char *osd_default_outline_colour = "black";
+
 /** Global error string. */
 char *xosd_error;
 
@@ -45,6 +50,28 @@
   pthread_mutex_unlock(&osd->mutex_sync);
 }
 
+
+static Pixmap
+take_snapshot(xosd *osd) {
+  Pixmap pixmap;
+  GC gc;
+
+  /* create a pixmap to hold the screenshot. */
+  pixmap = XCreatePixmap(osd->display, osd->window,
+                         osd->screen_width, osd->height,
+                         osd->depth);
+
+  /* then copy the screen into the pixmap. */
+  gc = XCreateGC(osd->display, pixmap, 0, NULL);
+  XSetSubwindowMode(osd->display, gc, IncludeInferiors);
+  XCopyArea(osd->display, DefaultRootWindow(osd->display), pixmap, gc,
+            osd->x, osd->y, osd->screen_width, osd->height,
+            0, 0);
+  XSetSubwindowMode(osd->display, gc, ClipByChildren);
+  XFreeGC(osd->display, gc);
+
+  return pixmap;
+}
 /* }}} */
 
 /* Serialize access to the X11 connection. {{{
@@ -110,7 +137,7 @@
   rs[1].height = mod->height + p->height;
   for (i = 0; i < nbars; i++, rs[0].x = rs[1].x += p->width) {
     XRectangle *r = &(rs[is_slider ? (i == on) : (i < on)]);
-    XFillRectangles(osd->display, osd->mask_bitmap, osd->mask_gc, r, 1);
+//    XFillRectangles(osd->display, osd->mask_bitmap, osd->mask_gc, r, 1);
     XFillRectangles(osd->display, osd->line_bitmap, osd->gc, r, 1);
   }
   FUNCTION_END(Dfunction);
@@ -123,9 +150,10 @@
   XRectangle p, m;
   p.x = XOFFSET;
   p.y = osd->line_height * line;
-  p.width = -osd->extent->y / 2;
-  p.height = -osd->extent->y;
-
+//  p.width = -osd->extent->y / 2;
+//  p.height = -osd->extent->y;
+  p.width = osd->xftheight / 2;
+  p.height =  osd->xftheight;
   assert(osd);
   FUNCTION_START(Dfunction);
 
@@ -181,22 +209,46 @@
 
 /* }}} */
 
+ void 
+set_xft_font_colour(xosd * osd, int ind)
+{
+  switch (ind) {
+  case XOSD_XFT_NORM:
+    osd->draw_xftcolour= & (osd ->xftcolour);
+    break;
+  case XOSD_XFT_OUTLINE:
+    osd->draw_xftcolour = & (osd->outline_xftcolour);
+    break;
+  case XOSD_XFT_SHADOW:
+    osd->draw_xftcolour = & (osd->shadow_xftcolour);
+    break;
+  }
+}
+
+
 /* Draw text. {{{ */
 static void                     /*inline */
 _draw_text(xosd * osd, char *string, int x, int y)
 {
   int len = strlen(string);
   FUNCTION_START(Dfunction);
-  XmbDrawString(osd->display, osd->mask_bitmap, osd->fontset, osd->mask_gc, x,
-                y, string, len);
-  XmbDrawString(osd->display, osd->line_bitmap, osd->fontset, osd->gc, x, y,
-                string, len);
+//  XmbDrawString(osd->display, osd->mask_bitmap, osd->fontset, osd->mask_gc, x,
+//                y, string, len);
+//  XmbDrawString(osd->display, osd->line_bitmap, osd->fontset, osd->gc, x, y,
+//                string, len);
+
+pango_layout_set_text(osd->plo, string, len);
+pango_xft_render_layout(osd->xftdrawable, osd->draw_xftcolour, osd->plo, x * PANGO_SCALE, y * PANGO_SCALE);
+//pango_xft_render_layout(osd->xftdrawable, &osd->xftcolour, osd->plo, x * PANGO_SCALE, y * PANGO_SCALE);
+
   FUNCTION_END(Dfunction);
 }
+
 static void
 draw_text(xosd * osd, int line)
 {
-  int x = XOFFSET, y = osd->line_height * line - osd->extent->y;
+//  int x = XOFFSET, y = osd->line_height * line - osd->extent->y;
+  int x = XOFFSET, y = osd->line_height * line ;//- osd->xftdescent;
   struct xosd_text *l = &osd->lines[line].text;
 
   assert(osd);
@@ -206,9 +258,17 @@
     return;
 
   if (l->width < 0) {
+/*
     XRectangle rect;
     XmbTextExtents(osd->fontset, l->string, strlen(l->string), NULL, &rect);
     l->width = rect.width;
+*/
+/*Pango XFT support*/
+    PangoRectangle r;
+    pango_layout_set_text(osd->plo, l->string, strlen(l->string));
+    pango_layout_get_extents(osd->plo, &r, 0);
+    l->width= r.width / PANGO_SCALE;
+
   }
 
   switch (osd->align) {
@@ -223,12 +283,14 @@
 
   if (osd->shadow_offset) {
     XSetForeground(osd->display, osd->gc, osd->shadow_pixel);
+    set_xft_font_colour(osd, XOSD_XFT_SHADOW);    
     _draw_text(osd, l->string, x + osd->shadow_offset,
                y + osd->shadow_offset);
   }
   if (osd->outline_offset) {
     int i, j;
     XSetForeground(osd->display, osd->gc, osd->outline_pixel);
+    set_xft_font_colour(osd, XOSD_XFT_OUTLINE);
     /* FIXME: echo . | osd_cat -O 50 -p middle -A center */
     for (i = 1; i <= osd->outline_offset; i++)
       for (j = 0; j < 9; j++)
@@ -238,6 +300,7 @@
   }
   if (1) {
     XSetForeground(osd->display, osd->gc, osd->pixel);
+    set_xft_font_colour(osd, XOSD_XFT_NORM);
     _draw_text(osd, l->string, x, y);
   }
 }
@@ -291,11 +354,16 @@
     /* The font, outline or shadow was changed. Recalculate line height,
      * resize window and bitmaps. */
     if (osd->update & UPD_size) {
+/*
       XFontSetExtents *extents = XExtentsOfFontSet(osd->fontset);
       DEBUG(Dupdate, "UPD_size");
       osd->extent = &extents->max_logical_extent;
       osd->line_height = osd->extent->height + osd->shadow_offset + 2 *
+        osd->outline_offset;*/
+      osd->line_height = osd->xftheight  + osd->shadow_offset + 2 *
         osd->outline_offset;
+
+
       osd->height = osd->line_height * osd->number_lines;
       for (line = 0; line < osd->number_lines; line++)
         if (osd->lines[line].type == LINE_text)
@@ -303,13 +371,32 @@
 
       XResizeWindow(osd->display, osd->window, osd->screen_width,
                     osd->height);
-      XFreePixmap(osd->display, osd->mask_bitmap);
-      osd->mask_bitmap = XCreatePixmap(osd->display, osd->window,
-                                       osd->screen_width, osd->height, 1);
+//      XFreePixmap(osd->display, osd->mask_bitmap);
+//      osd->mask_bitmap = XCreatePixmap(osd->display, osd->window,
+ //                                      osd->screen_width, osd->height, 1);
       XFreePixmap(osd->display, osd->line_bitmap);
       osd->line_bitmap = XCreatePixmap(osd->display, osd->window,
                                        osd->screen_width, osd->height,
                                        osd->depth);
+  xosd_xypos(osd);
+  //printf("osd->screen_width=%d,osd->height=%d,osd->x=%d,osd->y=%d\n",osd->screen_width,osd->height,osd->x,osd->y);
+
+  XCopyArea(osd->display, take_snapshot(osd), osd->line_bitmap, osd->gc,
+             0, 0, osd->screen_width, osd->height, 0, 0);
+
+
+  //printf("osd->screen_width=%d, osd->height=%d\n",osd->screen_width, osd->height);
+/*BEGIN For pango XFT support*/
+//osd->xftdrawable_msk = XftDrawCreate(osd->display, osd->mask_bitmap, osd->visual, DefaultColormap(osd->display, osd->screen));
+//if(!osd->xftdrawable_msk)
+//   printf("error, cannot create drawable_msk\n");
+
+  osd->xftdrawable = XftDrawCreate(osd->display, osd->line_bitmap, osd->visual, DefaultColormap(osd->display, osd->screen));
+  if(!osd->xftdrawable)
+    printf("error, cannot create drawable\n");
+/*END*/
+
+
     }
     /* H/V offset or vertical positon was changed. Horizontal alignment is
      * handles internally as line realignment with UPD_content. */
@@ -334,6 +421,7 @@
       case XOSD_top:
         y = osd->voffset;
       }
+      osd->x=x; osd->y=y;
       XMoveWindow(osd->display, osd->window, x, y);
     }
     /* If the content changed, redraw lines in background buffer.
@@ -347,10 +435,10 @@
         XFillRectangle(osd->display, osd->line_bitmap, osd->gc, 0,
                        y, osd->screen_width, osd->line_height);
 #endif
-        if (osd->update & UPD_mask) {
-          XFillRectangle(osd->display, osd->mask_bitmap, osd->mask_gc_back, 0,
-                         y, osd->screen_width, osd->line_height);
-        }
+        //if (osd->update & UPD_mask) {
+        //  XFillRectangle(osd->display, osd->mask_bitmap, osd->mask_gc_back, 0,
+        //                 y, osd->screen_width, osd->line_height);
+       // }
         switch (osd->lines[line].type) {
         case LINE_text:
           draw_text(osd, line);
@@ -365,11 +453,12 @@
     }
 #ifndef DEBUG_XSHAPE
     /* More than colours was changed, also update XShape. */
+/*
     if (osd->update & UPD_mask) {
       DEBUG(Dupdate, "UPD_mask");
       XShapeCombineMask(osd->display, osd->window, ShapeBounding, 0, 0,
                         osd->mask_bitmap, ShapeSet);
-    }
+    }*/
 #endif
     /* Show display requested. */
     if (osd->update & UPD_show) {
@@ -504,6 +593,19 @@
 
 /* }}} */
 
+ static int parse_xft_colour(xosd * osd, XftColor * color, unsigned long *pixel, const char *colorstr){
+  Colormap cmap = DefaultColormap(osd->display, osd->screen);
+  int retval = 0;
+
+ if(!XftColorAllocName(osd->display, osd->visual, cmap, colorstr, color)){
+    printf("error, cannot allocate color '%s'\n", colorstr);
+    retval = -1;
+  } else
+    retval = 0;
+  *pixel = color->pixel;
+  return retval;
+ }
+
 /* Parse textual colour value. {{{ */
 static int
 parse_colour(xosd * osd, XColor * col, unsigned long *pixel,
@@ -611,16 +713,39 @@
   XRaiseWindow(dpy, win);
 }
 
-/* }}} */
-
+ /* }}} */
+void xosd_xypos(xosd *osd)
+{
+  int x,y;
+      switch (osd->align) {
+      case XOSD_left:
+      case XOSD_center:
+        x = osd->screen_xpos + osd->hoffset;
+        break;
+      case XOSD_right:
+        x = osd->screen_xpos - osd->hoffset;
+      }
+      switch (osd->pos) {
+      case XOSD_bottom:
+        y = osd->screen_height - osd->height - osd->voffset;
+        break;
+      case XOSD_middle:
+        y = (osd->screen_height - osd->height) / 2 - osd->voffset;
+        break;
+      case XOSD_top:
+        y = osd->voffset;
+      }
+      //printf("in xosd_xypos x=%d, y=%d, osd->height =%d, osd->screen_height=%d, osd->voffset=%d \n",x,y,osd->height, osd->screen_height, osd->voffset);
+      osd->x=x; osd->y=y;
+}
 /* xosd_init -- Create a new xosd "object" {{{
  * Deprecated: Use xosd_create. */
 xosd *
 xosd_init(const char *font, const char *colour, int timeout, xosd_pos pos,
           int voffset, int shadow_offset, int number_lines)
 {
-  xosd *osd = xosd_create(number_lines);
 
+  xosd *osd = xosd_create(number_lines);
   FUNCTION_START(Dfunction);
   if (osd == NULL)
     return NULL;
@@ -631,19 +756,22 @@
      * we do not set xosd_error, as set_font has already set it to 
      * a sensible error message. 
      */
+    printf("xosd_set_font(osd, font) == -1\n");
     return NULL;
   }
+//  xosd_xypos(osd);
   xosd_set_colour(osd, colour);
   xosd_set_timeout(osd, timeout);
   xosd_set_pos(osd, pos);
   xosd_set_vertical_offset(osd, voffset);
   xosd_set_shadow_offset(osd, shadow_offset);
-
   return osd;
 }
 
 /* }}} */
 
+
+
 /* xosd_create -- Create a new xosd "object" {{{ */
 xosd *
 xosd_create(int number_lines)
@@ -658,7 +786,6 @@
   int dummy_a, dummy_b;
   XineramaScreenInfo *screeninfo = NULL;
 #endif
-
   FUNCTION_START(Dfunction);
   DEBUG(Dtrace, "getting display");
   display = getenv("DISPLAY");
@@ -730,13 +857,13 @@
 
   DEBUG(Dtrace, "font selection info");
   xosd_set_font(osd, osd_default_font);
-  if (osd->fontset == NULL) {
+  //if (osd->fontset == NULL) {
     /*
      * if we still don't have a fontset, then abort 
      */
-    xosd_error = "Default font not found";
-    goto error3;
-  }
+  //  xosd_error = "Default font not found";
+  //  goto error3;
+  //}
 
   DEBUG(Dtrace, "width and height initialization");
 #ifdef HAVE_XINERAMA
@@ -772,16 +899,22 @@
                               CopyFromParent,
                               osd->visual, CWOverrideRedirect, &setwinattr);
   XStoreName(osd->display, osd->window, "XOSD");
-
+/*
   osd->mask_bitmap =
     XCreatePixmap(osd->display, osd->window, osd->screen_width,
-                  osd->height, 1);
+                  osd->height, 1);*/
   osd->line_bitmap =
     XCreatePixmap(osd->display, osd->window, osd->screen_width,
                   osd->line_height, osd->depth);
 
   osd->gc = XCreateGC(osd->display, osd->window, GCGraphicsExposures, &xgcv);
-  osd->mask_gc = XCreateGC(osd->display, osd->mask_bitmap, GCGraphicsExposures, &xgcv);
+  //xosd_xypos(osd);
+  /*copy back ground to the image*/
+  //printf("1 osd->screen_width=%d,osd->height=%d,osd->x=%d,osd->y=%d\n",osd->screen_width,osd->height,osd->x,osd->y);
+  //XCopyArea(osd->display, take_snapshot(osd), osd->line_bitmap, osd->gc,
+  //            0, 0, osd->screen_width, osd->height, 0, 0);
+
+/*  osd->mask_gc = XCreateGC(osd->display, osd->mask_bitmap, GCGraphicsExposures, &xgcv);
   osd->mask_gc_back = XCreateGC(osd->display, osd->mask_bitmap, GCGraphicsExposures, &xgcv);
 
   XSetBackground(osd->display, osd->gc,
@@ -796,10 +929,22 @@
                  WhitePixel(osd->display, osd->screen));
   XSetBackground(osd->display, osd->mask_gc,
                  BlackPixel(osd->display, osd->screen));
+*/
+/*BEGIN For pango XFT support*/
+//osd->xftdrawable_msk = XftDrawCreate(osd->display, osd->mask_bitmap, osd->visual, DefaultColormap(osd->display, osd->screen));
+//if(!osd->xftdrawable_msk)
+//   printf("error, cannot create drawable_msk\n");
 
 
+osd->xftdrawable = XftDrawCreate(osd->display, osd->line_bitmap, osd->visual, DefaultColormap(osd->display, osd->screen));
+if(!osd->xftdrawable)
+   printf("error, cannot create drawable\n");
+/*END*/
+
   DEBUG(Dtrace, "setting colour");
   xosd_set_colour(osd, osd_default_colour);
+  xosd_set_shadow_colour(osd, osd_default_shadow_colour);
+  xosd_set_outline_colour(osd, osd_default_outline_colour);
 
   DEBUG(Dtrace, "stay on top");
   stay_on_top(osd->display, osd->window);
@@ -859,11 +1004,11 @@
 
   DEBUG(Dtrace, "freeing X resources");
   XFreeGC(osd->display, osd->gc);
-  XFreeGC(osd->display, osd->mask_gc);
-  XFreeGC(osd->display, osd->mask_gc_back);
+//  XFreeGC(osd->display, osd->mask_gc);
+//  XFreeGC(osd->display, osd->mask_gc_back);
   XFreePixmap(osd->display, osd->line_bitmap);
-  XFreeFontSet(osd->display, osd->fontset);
-  XFreePixmap(osd->display, osd->mask_bitmap);
+//  XFreeFontSet(osd->display, osd->fontset);
+//  XFreePixmap(osd->display, osd->mask_bitmap);
   XDestroyWindow(osd->display, osd->window);
 
   XCloseDisplay(osd->display);
@@ -1036,8 +1181,9 @@
     return -1;
 
   _xosd_lock(osd);
+  retval = parse_xft_colour(osd, &osd->xftcolour, &osd->pixel, colour);
   retval = parse_colour(osd, &osd->colour, &osd->pixel, colour);
-  osd->update |= UPD_lines;
+   osd->update |= UPD_lines;
   _xosd_unlock(osd);
 
   return retval;
@@ -1056,6 +1202,8 @@
     return -1;
 
   _xosd_lock(osd);
+  //printf("xosd_set_shadow_colour %s\n",colour);
+  retval = parse_xft_colour(osd, &osd->shadow_xftcolour, &osd->shadow_pixel, colour);
   retval = parse_colour(osd, &osd->shadow_colour, &osd->shadow_pixel, colour);
   osd->update |= UPD_lines;
   _xosd_unlock(osd);
@@ -1076,6 +1224,7 @@
     return -1;
 
   _xosd_lock(osd);
+  retval = parse_xft_colour(osd, &osd->outline_xftcolour, &osd->pixel, colour);
   retval =
     parse_colour(osd, &osd->outline_colour, &osd->outline_pixel, colour);
   osd->update |= UPD_lines;
@@ -1107,6 +1256,8 @@
    * Try to create the new font. If it doesn't succeed, keep old font. 
    */
   _xosd_lock(osd);
+/*Mod by Waspee, for pango xft font*/
+/*
   fontset2 = XCreateFontSet(osd->display, font, &missing, &nmissing, &defstr);
   XFreeStringList(missing);
   if (fontset2 == NULL) {
@@ -1118,6 +1269,26 @@
     osd->fontset = fontset2;
     osd->update |= UPD_font;
   }
+*/
+PangoFontMetrics *metrics;
+osd->pgc = pango_xft_get_context(osd->display, osd->screen);
+osd->pfd = pango_font_description_from_string(font);
+osd->update |= UPD_font;
+
+metrics = pango_context_get_metrics(osd->pgc, osd->pfd, pango_language_from_string(setlocale(LC_CTYPE, "")));
+//
+//dc.font.ascent  = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
+//dc.font.descent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
+
+// pango_font_metrics_unref(metrics);
+
+osd->plo = pango_layout_new(osd->pgc);
+pango_layout_set_font_description(osd->plo, osd->pfd);
+
+osd->xftascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE ;
+osd->xftdescent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE ;
+osd->xftheight = osd->xftascent + osd->xftdescent;
+//printf("osd->xftheight=%d\n",osd->xftheight);
   _xosd_unlock(osd);
 
   return ret;
diff -ruN xosd-2.2.14/src/Makefile.am xosd-2.2.14-xft-new/src/Makefile.am
--- xosd-2.2.14/src/Makefile.am	2004-11-09 04:03:23.000000000 +0800
+++ xosd-2.2.14-xft-new/src/Makefile.am	2009-09-21 16:05:29.000000000 +0800
@@ -5,8 +5,8 @@
 osd_cat_SOURCES  = osd_cat.c
 testprog_SOURCES = testprog.c
 
-osd_cat_LDADD 	= libxosd/libxosd.la
-testprog_LDADD 	= libxosd/libxosd.la
+osd_cat_LDADD 	= libxosd/libxosd.la `pkg-config --libs xft pango pangoxft`
+testprog_LDADD 	= libxosd/libxosd.la `pkg-config --libs xft pango pangoxft`
 
 include_HEADERS = xosd.h
 
diff -ruN xosd-2.2.14/src/Makefile.in xosd-2.2.14-xft-new/src/Makefile.in
--- xosd-2.2.14/src/Makefile.in	2004-11-18 03:30:22.000000000 +0800
+++ xosd-2.2.14-xft-new/src/Makefile.in	2009-09-21 16:17:57.000000000 +0800
@@ -140,7 +140,7 @@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LDFLAGS = @LDFLAGS@
 LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
+LIBS = @LIBS@  `pkg-config --libs xft pango pangoxft`
 LIBTOOL = @LIBTOOL@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
