+static void
+calendar_map_arrows (GtkCalendar *calendar)
+{
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+ gint i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (priv->arrow_win[i])
+ gdk_window_show (priv->arrow_win[i]);
+ }
+}
+
+static void
+calendar_unmap_arrows (GtkCalendar *calendar)
+{
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (calendar);
+ gint i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (priv->arrow_win[i])
+ gdk_window_hide (priv->arrow_win[i]);
+ }
+}
+
+static void
+gtk_calendar_map (GtkWidget *widget)
+{
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
+
+ GTK_WIDGET_CLASS (gtk_calendar_parent_class)->map (widget);
+
+ gdk_window_show (priv->main_win);
+
+ calendar_map_arrows (GTK_CALENDAR (widget));
+}
+
+static void
+gtk_calendar_unmap (GtkWidget *widget)
+{
+ GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
+
+ calendar_unmap_arrows (GTK_CALENDAR (widget));
+
+ gdk_window_hide (priv->main_win);
+
+ GTK_WIDGET_CLASS (gtk_calendar_parent_class)->unmap (widget);
+}
+