diff -ur gnome-panel-2.20.3.orig/applets/clock/calendar-window.c gnome-panel-2.20.3/applets/clock/calendar-window.c
--- gnome-panel-2.20.3.orig/applets/clock/calendar-window.c	2008-04-30 11:51:24.000000000 +0800
+++ gnome-panel-2.20.3/applets/clock/calendar-window.c	2008-04-30 11:52:05.000000000 +0800
@@ -50,6 +50,9 @@
 #ifdef HAVE_LIBECAL
 #include "calendar-client.h"
 #endif
+#ifdef HAVE_LIBLUNAR
+    #include <lunar/lunar.h>
+#endif
 
 #define CALENDAR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_WINDOW, CalendarWindowPrivate))
 
@@ -824,7 +827,11 @@
 		      guint           day,
 		      CalendarWindow *calwin)
 {
+#ifdef HAVE_LIBLUNAR
+        lunar_calendar_mark_day (LUNAR_CALENDAR (calwin->priv->calendar), day);
+#else
         gtk_calendar_mark_day (GTK_CALENDAR (calwin->priv->calendar), day);
+#endif
 }
 
 static void
@@ -834,7 +841,11 @@
         guint   year, month, day;
 
         if (calwin->priv->calendar) {
+#ifdef HAVE_LIBLUNAR
+                lunar_calendar_clear_marks (LUNAR_CALENDAR (calwin->priv->calendar));
+#else
                 gtk_calendar_clear_marks (GTK_CALENDAR (calwin->priv->calendar));
+#endif
 
                 calendar_client_foreach_appointment_day (calwin->priv->client,
                                                          (CalendarDayIter) mark_day_on_calendar,
@@ -1092,7 +1103,11 @@
 }
 
 static void
+#ifdef HAVE_LIBLUNAR
+calendar_day_activated (LunarCalendar    *calendar,
+#else
 calendar_day_activated (GtkCalendar    *calendar,
+#endif
 			CalendarWindow *calwin)
 {
 	unsigned int  day;
@@ -1100,7 +1115,11 @@
 	unsigned int  year;
 	char         *argument;
 
+#ifdef HAVE_LIBLUNAR
+	lunar_calendar_get_date (calendar, &year, &month, &day);
+#else
 	gtk_calendar_get_date (calendar, &year, &month, &day);
+#endif
 
 	argument = g_strdup_printf ("calendar:///?startdate=%.4d%.2d%.2d",
 				    year, month + 1, day);
@@ -1111,12 +1130,20 @@
 }
 
 static void
+#ifdef HAVE_LIBLUNAR
+calendar_day_selected (LunarCalendar    *calendar,
+#else
 calendar_day_selected (GtkCalendar    *calendar,
+#endif
 		       CalendarWindow *calwin)
 {
         guint day;
 
+#ifdef HAVE_LIBLUNAR
+        lunar_calendar_get_date (calendar, NULL, NULL, &day);
+#else
         gtk_calendar_get_date (calendar, NULL, NULL, &day);
+#endif
 
         calendar_client_select_day (calwin->priv->client, day);
 
@@ -1125,12 +1152,20 @@
 }
 
 static void
+#ifdef HAVE_LIBLUNAR
+calendar_month_selected (LunarCalendar    *calendar,
+#else
 calendar_month_selected (GtkCalendar    *calendar,
+#endif
 			 CalendarWindow *calwin)
 {
         guint year, month;
 
+#ifdef HAVE_LIBLUNAR
+        lunar_calendar_get_date (calendar, &year, &month, NULL);
+#else
         gtk_calendar_get_date (calendar, &year, &month, NULL);
+#endif
 
         calendar_client_select_month (calwin->priv->client, month, year);
 
@@ -1355,7 +1390,11 @@
 					  calwin);
         }
 
+#ifdef HAVE_LIBLUNAR
+        lunar_calendar_get_date (LUNAR_CALENDAR (calwin->priv->calendar),
+#else
         gtk_calendar_get_date (GTK_CALENDAR (calwin->priv->calendar),
+#endif
 			       &year, &month, &day);
 
         calendar_client_select_day   (calwin->priv->client, day);
@@ -1383,26 +1422,51 @@
 calendar_window_create_calendar (CalendarWindow *calwin)
 {
 	GtkWidget                 *calendar;
-	GtkCalendarDisplayOptions  options;
         struct tm                 *tm;
 
+#ifdef HAVE_LIBLUNAR
+	LunarCalendarDisplayOptions  options;
+	calendar = lunar_calendar_new ();
+	options = lunar_calendar_get_display_options (LUNAR_CALENDAR (calendar));
+#else
+	GtkCalendarDisplayOptions  options;
 	calendar = gtk_calendar_new ();
 	options = gtk_calendar_get_display_options (GTK_CALENDAR (calendar));
+#endif
 	if (calwin->priv->show_weeks)
+#ifdef HAVE_LIBLUNAR
+		options |= LUNAR_CALENDAR_SHOW_WEEK_NUMBERS;
+#else
 		options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+#endif
 	else
+#ifdef HAVE_LIBLUNAR
+		options &= ~(LUNAR_CALENDAR_SHOW_WEEK_NUMBERS);
+#else
 		options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+#endif
+#ifdef HAVE_LIBLUNAR
+	lunar_calendar_set_display_options (LUNAR_CALENDAR (calendar), options);
+#else
 	gtk_calendar_set_display_options (GTK_CALENDAR (calendar), options);
+#endif
 
 	if (calwin->priv->utc_time)
 		tm = gmtime (calwin->priv->current_time);
 	else
 		tm = localtime (calwin->priv->current_time);
 
+#ifdef HAVE_LIBLUNAR
+        lunar_calendar_select_month (LUNAR_CALENDAR (calendar),
+                                   tm->tm_mon,
+                                   tm->tm_year + 1900);
+        lunar_calendar_select_day (LUNAR_CALENDAR (calendar), tm->tm_mday);
+#else
         gtk_calendar_select_month (GTK_CALENDAR (calendar),
                                    tm->tm_mon,
                                    tm->tm_year + 1900);
         gtk_calendar_select_day (GTK_CALENDAR (calendar), tm->tm_mday);
+#endif
 
 	return calendar;
 }
@@ -1792,7 +1856,11 @@
 calendar_window_set_show_weeks (CalendarWindow *calwin,
 				gboolean        show_weeks)
 {
+#ifdef HAVE_LIBLUNAR
+	LunarCalendarDisplayOptions options;
+#else
 	GtkCalendarDisplayOptions options;
+#endif
 
 	g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
 
@@ -1802,14 +1870,30 @@
 	calwin->priv->show_weeks = show_weeks;
 
 	if (calwin->priv->calendar) {
+#ifdef HAVE_LIBLUNAR
+		options = lunar_calendar_get_display_options (LUNAR_CALENDAR (calwin->priv->calendar));
+#else
 		options = gtk_calendar_get_display_options (GTK_CALENDAR (calwin->priv->calendar));
+#endif
 
 		if (show_weeks)
+#ifdef HAVE_LIBLUNAR
+			options |= LUNAR_CALENDAR_SHOW_WEEK_NUMBERS;
+#else
 			options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+#endif
 		else
+#ifdef HAVE_LIBLUNAR
+			options &= ~(LUNAR_CALENDAR_SHOW_WEEK_NUMBERS);
+#else
 			options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+#endif
 
+#ifdef HAVE_LIBLUNAR
+		lunar_calendar_set_display_options (LUNAR_CALENDAR (calwin->priv->calendar),
+#else
 		gtk_calendar_set_display_options (GTK_CALENDAR (calwin->priv->calendar),
+#endif
 						  options);
 	}
 
diff -ur gnome-panel-2.20.3.orig/applets/clock/Makefile.am gnome-panel-2.20.3/applets/clock/Makefile.am
--- gnome-panel-2.20.3.orig/applets/clock/Makefile.am	2008-04-30 11:51:24.000000000 +0800
+++ gnome-panel-2.20.3/applets/clock/Makefile.am	2008-04-30 11:51:35.000000000 +0800
@@ -55,6 +55,11 @@
 	clock-typebuiltins.c	\
 	clock-typebuiltins.h
 
+if CLOCK_LUNAR
+INCLUDES += $(LUNAR_CFLAGS)
+CLOCK_LDADD += $(LUNAR_LIBS)
+endif
+
 clock_enum_headers =					\
 	$(top_srcdir)/applets/clock/clock-utils.h
 
diff -ur gnome-panel-2.20.3.orig/configure.in gnome-panel-2.20.3/configure.in
--- gnome-panel-2.20.3.orig/configure.in	2008-04-30 11:51:17.000000000 +0800
+++ gnome-panel-2.20.3/configure.in	2008-04-30 11:51:35.000000000 +0800
@@ -113,6 +113,30 @@
 AC_SUBST(CLOCK_CFLAGS)
 AC_SUBST(CLOCK_LIBS)
 
+
+dnl *****
+dnl lunar
+dnl *****
+AC_ARG_ENABLE(lunar,
+        AS_HELP_STRING([--enable-lunar],[Enable chinese lunar calendar for clock applet.]),
+        enable_lunar=$enableval, enable_lunar=auto)
+
+if test "x$enable_lunar" = "xauto"; then
+         PKG_CHECK_EXISTS([liblunar-1],enable_lunar=yes,enable_lunar=no)
+fi
+
+if test "x$enable_lunar" = "xyes";then
+        LIBLUNAR_REQUIRED=0.2.6
+        PKG_CHECK_MODULES(LUNAR, [liblunar-1 >= $LIBLUNAR_REQUIRED])
+        AC_SUBST(LUNAR_CFLAGS)
+        AC_SUBST(LUNAR_LIBS)
+        AC_DEFINE([HAVE_LIBLUNAR], 1, [Defined when liblunar-1 are detected])
+        have_lunar=true
+else
+        have_lunar=false
+fi
+AM_CONDITIONAL(CLOCK_LUNAR, $have_lunar)
+
 PKG_CHECK_MODULES(FISH, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED cairo >= $CAIRO_REQUIRED)
 AC_SUBST(FISH_CFLAGS)
 AC_SUBST(FISH_LIBS)
