Index: gtk/gtkcalendar.h
===================================================================
--- gtk/gtkcalendar.h	(révision 17949)
+++ gtk/gtkcalendar.h	(copie de travail)
@@ -123,6 +123,12 @@
 void	   gtk_calendar_select_day	(GtkCalendar *calendar,
 					 guint	      day);
 
+gboolean   gtk_calendar_set_gdate	(GtkCalendar *calendar, 
+					 GDate       *date);
+
+void       gtk_calendar_get_gdate	(GtkCalendar *calendar, 
+					 GDate       *date);
+
 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 17970)
+++ gtk/gtkcalendar.c	(copie de travail)
@@ -3491,6 +3491,83 @@
 }
 
 /**
+ * gtk_calendar_set_gdate:
+ * @calendar: a #GtkCalendar
+ * @date: the date to set
+ *
+ * Set the selected date to a #GtkCalendar.
+ *
+ * Return value: %TRUE if the date was set, %FALSE if an error happened.
+ *
+ * Since: 2.12
+ **/
+gboolean
+gtk_calendar_set_gdate	(GtkCalendar *calendar, 
+			 GDate       *date)
+{
+  guint8 old_day;
+  guint8 old_month;
+  g_return_val_if_fail (GTK_IS_CALENDAR (calendar), 
+			FALSE);
+  g_return_val_if_fail (g_date_valid (date), 
+			FALSE);
+  old_day = calendar->selected_day;
+  old_month = calendar->month;
+  calendar->month = g_date_get_month (date) - 1;
+  calendar->year = g_date_get_year (date);
+  calendar_compute_days (calendar);
+  calendar->selected_day = g_date_get_day (date);
+
+  if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
+    calendar_invalidate_day_num (calendar, 
+				 g_date_get_day (date));
+
+  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));
+
+  if (old_day != calendar->selected_day)
+    g_signal_emit(calendar,
+		  gtk_calendar_signals[DAY_SELECTED_SIGNAL],
+		  0);
+  if (old_month != calendar->month)
+    g_signal_emit(calendar,
+		  gtk_calendar_signals[MONTH_CHANGED_SIGNAL],
+		  0);
+
+  gtk_widget_queue_draw (GTK_WIDGET (calendar));
+
+  return TRUE;
+}
+
+/**
+ * gtk_calendar_get_gdate:
+ * @calendar: a #GtkCalendar
+ * @date: location to store the date
+ *
+ * Obtains the selected date from a #GtkCalendar.
+ *
+ * Since: 2.12
+ **/
+void
+gtk_calendar_get_gdate	(GtkCalendar *calendar, 
+			 GDate       *date)
+{
+  g_return_if_fail(GTK_IS_CALENDAR(calendar));
+  g_return_if_fail(date != NULL);
+  
+  g_date_set_dmy(date,
+		 calendar->selected_day,
+		 calendar->month+1,
+		 calendar->year);
+}
+
+/**
  * gtk_calendar_freeze:
  * @calendar: a #GtkCalendar
  * 
