diff -Nurw gcin-1.6.4~pre19.orig/eve.cpp gcin-1.6.4~pre19/eve.cpp
--- gcin-1.6.4~pre19.orig/eve.cpp	2011-06-04 02:30:22.000000000 +0800
+++ gcin-1.6.4~pre19/eve.cpp	2011-08-22 17:13:22.539184420 +0800
@@ -3,6 +3,10 @@
 #if UNIX
 #include <signal.h>
 #include <X11/extensions/XTest.h>
+#if !GTK_CHECK_VERSION(2,16,0)
+#include <X11/XKBlib.h>
+#include <gdk/gdkx.h>
+#endif
 #endif
 #include "gst.h"
 #include "pho.h"
@@ -1054,13 +1058,28 @@
 void create_win_sym(), win_kbm_disp_caplock();
 int gcin_switch_keys_lookup(int key);
 
+gboolean get_caps_lock_state(GdkKeymap *keymap)
+{
+#if GTK_CHECK_VERSION(2,16,0)
+        return gdk_keymap_get_caps_lock_state(keymap);
+#else
+        XkbStateRec states;
+	
+        if (XkbGetState (GDK_DISPLAY_XDISPLAY (gdk_display_get_default()), XkbUseCoreKbd, &states) == Success)
+        {   
+                if (states.locked_mods & LockMask) return TRUE;
+        }
+	return FALSE;
+#endif
+}
+
 void disp_win_kbm_capslock()
 {
   if (!b_show_win_kbm)
     return;
 
   gboolean o_state = old_capslock_on;
-  old_capslock_on = gdk_keymap_get_caps_lock_state(gdk_keymap_get_default());
+  old_capslock_on = get_caps_lock_state(gdk_keymap_get_default());
 
 //  dbg("%x %x\n", old_capslock_on, o_state);
 
@@ -1072,7 +1091,7 @@
 
 void disp_win_kbm_capslock_init()
 {
-  old_capslock_on = gdk_keymap_get_caps_lock_state(gdk_keymap_get_default());
+  old_capslock_on = get_caps_lock_state(gdk_keymap_get_default());
 //  dbg("disp_win_kbm_capslock_init %d\n",old_capslock_on);
 
   if (b_show_win_kbm)
