Index: gtk/gtkcalendar.h
===================================================================
--- gtk/gtkcalendar.h	(révision 17552)
+++ gtk/gtkcalendar.h	(copie de travail)
@@ -123,6 +123,11 @@
 void	   gtk_calendar_select_day	(GtkCalendar *calendar,
 					 guint	      day);
 
+gboolean   gtk_calendar_set_date	(GtkCalendar *calendar, 
+					 gint	     year,
+					 gint	     month,
+					 gint	     day);
+
 gboolean   gtk_calendar_mark_day	(GtkCalendar *calendar,
 					 guint	      day);
 gboolean   gtk_calendar_unmark_day	(GtkCalendar *calendar,
Index: gtk/gtkcalendar.c
===================================================================
--- gtk/gtkcalendar.c	(révision 17552)
+++ gtk/gtkcalendar.c	(copie de travail)
@@ -58,6 +58,8 @@
 #include "gdk/gdkkeysyms.h"
 #include "gtkalias.h"
 
+#include "glib/gdate.h"
+
 /***************************************************************************/
 /* The following date routines are taken from the lib_date package. 
  * They have been minimally edited to avoid conflict with types defined
@@ -3491,6 +3493,66 @@
 }
 
 /**
+ * gtk_calendar_set_date:
+ * @calendar: a #GtkCalendar
+ * @year: the year number or -1 if you don't to change this value
+ * @month: the month number (between 1 and 12) or -1 if you don't to change this value
+ * @day: the day number (between 1 and 31) or -1 if you don't to change this value
+ * Return value: %TRUE if the date was set, %FALSE if an error happen.
+ * Set the selected date to a #GtkCalendar.
+ **/
+gboolean
+gtk_calendar_set_date (GtkCalendar *calendar, 
+		       gint	    year,
+		       gint         month,
+		       gint	    day)
+{
+  if (day == -1)
+    day = calendar->selected_day;
+  if (month == -1)
+    month = calendar->month;
+  else
+    month--;
+  if (year == -1)
+    year = calendar->year;
+  
+  g_return_val_if_fail (GTK_IS_CALENDAR (calendar), FALSE);
+  g_return_val_if_fail (g_date_valid_dmy(day,
+					 month+1,
+					 year), 
+			FALSE);
+  
+  calendar->month = month;
+  calendar->year = year;
+  calendar_compute_days (calendar);
+  calendar->selected_day = day;
+
+  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
+    calendar_invalidate_day_num (calendar, 
+				 day);
+
+  g_object_freeze_notify (G_OBJECT (calendar));
+  g_object_notify (G_OBJECT (calendar), 
+		   "month");
+  g_object_notify (G_OBJECT (calendar), 
+		   "year");
+  g_object_notify (G_OBJECT (calendar), 
+		   "day");
+  g_object_thaw_notify (G_OBJECT (calendar));
+
+  g_signal_emit(calendar,
+		gtk_calendar_signals[DAY_SELECTED_SIGNAL],
+		0);
+  g_signal_emit(calendar,
+		gtk_calendar_signals[MONTH_CHANGED_SIGNAL],
+		0);
+
+  gtk_widget_queue_draw (GTK_WIDGET (calendar));
+
+  return TRUE;
+}
+
+/**
  * gtk_calendar_freeze:
  * @calendar: a #GtkCalendar
  * 
