4ef8fa4
diff -ru planner-0.14.4.orig/data/glade/task-date-widget.glade planner-0.14.4/data/glade/task-date-widget.glade
4ef8fa4
--- planner-0.14.4.orig/data/glade/task-date-widget.glade	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/data/glade/task-date-widget.glade	2009-12-03 11:07:46.000000000 +0000
4ef8fa4
@@ -25,10 +27,12 @@
4ef8fa4
       <property name="spacing">6</property>
4ef8fa4
 
4ef8fa4
       <child>
4ef8fa4
-	<widget class="GtkCalendar" id="schedule_calendar">
4ef8fa4
+	<widget class="Custom" id="schedule_calendar">
4ef8fa4
 	  <property name="visible">True</property>
4ef8fa4
-	  <property name="can_focus">True</property>
4ef8fa4
-	  <property name="display_options">GTK_CALENDAR_SHOW_HEADING|GTK_CALENDAR_SHOW_DAY_NAMES|GTK_CALENDAR_SHOW_WEEK_NUMBERS</property>
4ef8fa4
+	  <property name="creation_function">create_schedule_calendar</property>
4ef8fa4
+	  <property name="int1">0</property>
4ef8fa4
+	  <property name="int2">0</property>
4ef8fa4
+	  <property name="last_modification_time">Thu, 03 Dec 2009 11:07:42 GMT</property>
4ef8fa4
 	</widget>
4ef8fa4
 	<packing>
4ef8fa4
 	  <property name="padding">0</property>
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-calendar.c planner-0.14.4/src/planner-calendar.c
4ef8fa4
--- planner-0.14.4.orig/src/planner-calendar.c	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-calendar.c	2009-12-03 12:00:44.000000000 +0000
4ef8fa4
@@ -2782,5 +2782,38 @@
4ef8fa4
 	}
4ef8fa4
 }	
4ef8fa4
 
4ef8fa4
+void
4ef8fa4
+planner_calendar_mark_days (PlannerCalendar         *calendar,
4ef8fa4
+		      MrpCalendar *mrp_calendar)
4ef8fa4
+{
4ef8fa4
+	guint        y, m, d;
4ef8fa4
+	MrpTime      *t;
4ef8fa4
+	mrptime      time;
4ef8fa4
+	MrpDay       *day;
4ef8fa4
 
4ef8fa4
+	planner_calendar_get_date (calendar, &y, &m, &d);
4ef8fa4
 
4ef8fa4
+	t = mrp_time2_new ();
4ef8fa4
+	mrp_time2_set_date (t, y, m+1, 1);
4ef8fa4
+	mrp_time2_set_time (t, 0, 0, 0);
4ef8fa4
+
4ef8fa4
+	for (d = 1; d <= 31; d++) {
4ef8fa4
+		time = mrp_time2_get_epoch (t);
4ef8fa4
+
4ef8fa4
+		day = mrp_calendar_get_day (mrp_calendar, time, TRUE);
4ef8fa4
+
4ef8fa4
+		if (day == mrp_day_get_nonwork ()) {
4ef8fa4
+			planner_calendar_mark_day (calendar,
4ef8fa4
+						   d,
4ef8fa4
+						   PLANNER_CALENDAR_MARK_SHADE);
4ef8fa4
+		}
4ef8fa4
+		else if (day == mrp_day_get_work ()) {
4ef8fa4
+			planner_calendar_mark_day (calendar,
4ef8fa4
+						   d,
4ef8fa4
+						   PLANNER_CALENDAR_MARK_NONE);
4ef8fa4
+		}
4ef8fa4
+
4ef8fa4
+		mrp_time2_add_days (t, 1);
4ef8fa4
+	}
4ef8fa4
+	mrp_time2_free (t);
4ef8fa4
+}
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-calendar-dialog.c planner-0.14.4/src/planner-calendar-dialog.c
4ef8fa4
--- planner-0.14.4.orig/src/planner-calendar-dialog.c	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-calendar-dialog.c	2009-12-03 11:31:26.000000000 +0000
4ef8fa4
@@ -876,10 +876,6 @@
4ef8fa4
 {
4ef8fa4
 	MrpCalendar *calendar;
4ef8fa4
 	PlannerCalendar  *calendar_widget;
4ef8fa4
-	guint        y, m, d;
4ef8fa4
-	MrpDay      *day;
4ef8fa4
-	MrpTime      *t;
4ef8fa4
-	mrptime      time;
4ef8fa4
 	
4ef8fa4
 	calendar = cal_dialog_get_selected_calendar (GTK_TREE_VIEW (data->tree_view));
4ef8fa4
 	if (!calendar) {
4ef8fa4
@@ -895,31 +891,7 @@
4ef8fa4
 	gtk_widget_set_sensitive (data->default_week_button, TRUE);
4ef8fa4
 	gtk_widget_set_sensitive (data->working_time_button, TRUE);
4ef8fa4
 
4ef8fa4
-	planner_calendar_get_date (calendar_widget, &y, &m, &d);
4ef8fa4
-
4ef8fa4
-	t = mrp_time2_new ();
4ef8fa4
-	mrp_time2_set_date (t, y, m+1, 1);
4ef8fa4
-	mrp_time2_set_time (t, 0, 0, 0);
4ef8fa4
-
4ef8fa4
-	for (d = 1; d <= 31; d++) {
4ef8fa4
-		time = mrp_time2_get_epoch (t);
4ef8fa4
-
4ef8fa4
-		day = mrp_calendar_get_day (calendar, time, TRUE);
4ef8fa4
-
4ef8fa4
-		if (day == mrp_day_get_nonwork ()) {
4ef8fa4
-			planner_calendar_mark_day (calendar_widget,
4ef8fa4
-						   d,
4ef8fa4
-						   PLANNER_CALENDAR_MARK_SHADE);
4ef8fa4
-		}
4ef8fa4
-		else if (day == mrp_day_get_work ()) {
4ef8fa4
-			planner_calendar_mark_day (calendar_widget,
4ef8fa4
-						   d,
4ef8fa4
-						   PLANNER_CALENDAR_MARK_NONE);
4ef8fa4
-		}
4ef8fa4
-
4ef8fa4
-		mrp_time2_add_days (t, 1);
4ef8fa4
-	}
4ef8fa4
-	mrp_time2_free (t);
4ef8fa4
+	planner_calendar_mark_days (calendar_widget, calendar);
4ef8fa4
 }
4ef8fa4
 
4ef8fa4
 static void
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-calendar.h planner-0.14.4/src/planner-calendar.h
4ef8fa4
--- planner-0.14.4.orig/src/planner-calendar.h	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-calendar.h	2009-12-03 12:00:03.000000000 +0000
4ef8fa4
@@ -31,6 +31,7 @@
4ef8fa4
 
4ef8fa4
 #include <gdk/gdk.h>
4ef8fa4
 #include <gtk/gtkwidget.h>
4ef8fa4
+#include <libplanner/mrp-calendar.h>
4ef8fa4
 
4ef8fa4
 #define PLANNER_TYPE_CALENDAR                  (planner_calendar_get_type ())
4ef8fa4
 #define PLANNER_CALENDAR(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLANNER_TYPE_CALENDAR, PlannerCalendar))
4ef8fa4
@@ -143,5 +144,8 @@
4ef8fa4
 				 guint               day,
4ef8fa4
 				 PlannerCalendarMarkType  type);
4ef8fa4
 
4ef8fa4
+void       planner_calendar_mark_days (PlannerCalendar         *calendar,
4ef8fa4
+				 MrpCalendar *mrp_calendar);
4ef8fa4
+
4ef8fa4
 
4ef8fa4
 #endif /* __PLANNER_CALENDAR_H__ */
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-task-date-widget.c planner-0.14.4/src/planner-task-date-widget.c
4ef8fa4
--- planner-0.14.4.orig/src/planner-task-date-widget.c	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-task-date-widget.c	2009-12-03 12:13:05.000000000 +0000
4ef8fa4
@@ -27,6 +27,7 @@
4ef8fa4
 #include "libplanner/mrp-task.h"
4ef8fa4
 #include "libplanner/mrp-paths.h"
4ef8fa4
 #include "planner-task-date-widget.h"
4ef8fa4
+#include "planner-calendar.h"
4ef8fa4
 
4ef8fa4
 typedef struct {
4ef8fa4
 	GtkWidget   *calendar;
4ef8fa4
@@ -35,6 +36,7 @@
4ef8fa4
 
4ef8fa4
 	mrptime            time;
4ef8fa4
 	MrpConstraintType  type;
4ef8fa4
+	MrpCalendar        *mrp_calendar;
4ef8fa4
 } PlannerTaskDateWidgetPriv;
4ef8fa4
 
4ef8fa4
 
4ef8fa4
@@ -130,6 +132,29 @@
4ef8fa4
 	g_signal_emit (widget, signals[DATE_SELECTED], 0);
4ef8fa4
 }
4ef8fa4
 
4ef8fa4
+void
4ef8fa4
+planner_task_date_widget_set_mrp_calendar (PlannerTaskDateWidget *widget ,
4ef8fa4
+					   MrpCalendar *mrp_calendar)
4ef8fa4
+{
4ef8fa4
+	PlannerTaskDateWidgetPriv *priv;
4ef8fa4
+
4ef8fa4
+	priv = GET_PRIV (widget);
4ef8fa4
+
4ef8fa4
+	priv->mrp_calendar = mrp_calendar;
4ef8fa4
+}
4ef8fa4
+
4ef8fa4
+static void
4ef8fa4
+update_schedule_calendar_cb (PlannerCalendar *calendar_widget,
4ef8fa4
+                             	    PlannerTaskDateWidget *widget)
4ef8fa4
+{
4ef8fa4
+	PlannerTaskDateWidgetPriv *priv;
4ef8fa4
+
4ef8fa4
+	priv = GET_PRIV (widget);
4ef8fa4
+
4ef8fa4
+        if (priv->mrp_calendar)
4ef8fa4
+        	planner_calendar_mark_days (calendar_widget, priv->mrp_calendar);
4ef8fa4
+}
4ef8fa4
+
4ef8fa4
 static gboolean
4ef8fa4
 grab_on_window (GdkWindow *window,
4ef8fa4
 		guint32    time)
4ef8fa4
@@ -160,6 +185,7 @@
4ef8fa4
 	
4ef8fa4
 	type = planner_task_date_widget_get_constraint_type (widget);
4ef8fa4
 	gtk_widget_set_sensitive (priv->calendar, type != MRP_CONSTRAINT_ASAP);
4ef8fa4
+	update_schedule_calendar_cb (PLANNER_CALENDAR (priv->calendar), widget);
4ef8fa4
 
4ef8fa4
 	/* A bit hackish. Grab focus on the popup widget again when the combo
4ef8fa4
 	 * has been used, since focus is transferred to the combo when it's
4ef8fa4
@@ -170,6 +196,22 @@
4ef8fa4
 	}
4ef8fa4
 }
4ef8fa4
 
4ef8fa4
+GtkWidget *
4ef8fa4
+create_schedule_calendar (gchar *name,
4ef8fa4
+		          gchar *string1, gchar *string2,
4ef8fa4
+		          gint int1, gint int2)
4ef8fa4
+{
4ef8fa4
+	GtkWidget *ret;
4ef8fa4
+
4ef8fa4
+	ret = planner_calendar_new ();
4ef8fa4
+
4ef8fa4
+	planner_calendar_display_options ( PLANNER_CALENDAR (ret),
4ef8fa4
+		PLANNER_CALENDAR_SHOW_HEADING | PLANNER_CALENDAR_SHOW_DAY_NAMES |
4ef8fa4
+		PLANNER_CALENDAR_SHOW_WEEK_NUMBERS | PLANNER_CALENDAR_WEEK_START_MONDAY );
4ef8fa4
+
4ef8fa4
+	return ret;
4ef8fa4
+}
4ef8fa4
+
4ef8fa4
 static void
4ef8fa4
 task_date_widget_setup (PlannerTaskDateWidget *widget)
4ef8fa4
 {
4ef8fa4
@@ -182,6 +224,8 @@
4ef8fa4
 
4ef8fa4
 	priv = GET_PRIV (widget);
4ef8fa4
 
4ef8fa4
+	priv->mrp_calendar = NULL;
4ef8fa4
+
4ef8fa4
 	vbox = gtk_vbox_new (FALSE, 0);
4ef8fa4
 	gtk_container_add (GTK_CONTAINER (widget), vbox);
4ef8fa4
 
4ef8fa4
@@ -224,6 +268,10 @@
4ef8fa4
 			  G_CALLBACK (task_date_day_selected_double_click_cb),
4ef8fa4
 			  widget);
4ef8fa4
 
4ef8fa4
+	g_signal_connect (priv->calendar, "month_changed", 
4ef8fa4
+			  G_CALLBACK (update_schedule_calendar_cb),
4ef8fa4
+			  widget);
4ef8fa4
+
4ef8fa4
         gtk_widget_show_all (vbox);
4ef8fa4
 }
4ef8fa4
 
4ef8fa4
@@ -239,8 +287,8 @@
4ef8fa4
 		return;
4ef8fa4
 	}
4ef8fa4
 
4ef8fa4
-	gtk_calendar_select_month (GTK_CALENDAR (priv->calendar), month - 1, year);
4ef8fa4
-	gtk_calendar_select_day (GTK_CALENDAR (priv->calendar), day);
4ef8fa4
+	planner_calendar_select_month (PLANNER_CALENDAR (priv->calendar), month - 1, year);
4ef8fa4
+	planner_calendar_select_day (PLANNER_CALENDAR (priv->calendar), day);
4ef8fa4
 }
4ef8fa4
 
4ef8fa4
 mrptime
4ef8fa4
@@ -251,7 +299,7 @@
4ef8fa4
 
4ef8fa4
 	priv = GET_PRIV (widget);
4ef8fa4
 	
4ef8fa4
-	gtk_calendar_get_date (GTK_CALENDAR (priv->calendar),
4ef8fa4
+	planner_calendar_get_date (PLANNER_CALENDAR (priv->calendar),
4ef8fa4
 			       &year, &month, &day;;
4ef8fa4
 	
4ef8fa4
 	month++;
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-task-date-widget.h planner-0.14.4/src/planner-task-date-widget.h
4ef8fa4
--- planner-0.14.4.orig/src/planner-task-date-widget.h	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-task-date-widget.h	2009-12-03 12:00:18.000000000 +0000
4ef8fa4
@@ -22,6 +22,7 @@
4ef8fa4
 #define __PLANNER_TASK_DATE_WIDGET_H__
4ef8fa4
 
4ef8fa4
 #include <gtk/gtktogglebutton.h>
4ef8fa4
+#include <libplanner/mrp-calendar.h>
4ef8fa4
 
4ef8fa4
 #define PLANNER_TYPE_TASK_DATE_WIDGET            (planner_task_date_widget_get_type ())
4ef8fa4
 #define PLANNER_TASK_DATE_WIDGET(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLANNER_TYPE_TASK_DATE_WIDGET, PlannerTaskDateWidget))
4ef8fa4
@@ -50,5 +51,7 @@
4ef8fa4
 void              planner_task_date_widget_set_constraint_type (PlannerTaskDateWidget *widget,
4ef8fa4
 								MrpConstraintType      type);
4ef8fa4
 MrpConstraintType planner_task_date_widget_get_constraint_type (PlannerTaskDateWidget *widget);
4ef8fa4
+void              planner_task_date_widget_set_mrp_calendar    (PlannerTaskDateWidget *widget ,
4ef8fa4
+								MrpCalendar *calendar);
4ef8fa4
 
4ef8fa4
 #endif /* __PLANNER_TASK_DATE_WIDGET_H__ */
4ef8fa4
diff -ru planner-0.14.4.orig/src/planner-task-dialog.c planner-0.14.4/src/planner-task-dialog.c
4ef8fa4
--- planner-0.14.4.orig/src/planner-task-dialog.c	2009-12-03 10:50:00.000000000 +0000
4ef8fa4
+++ planner-0.14.4/src/planner-task-dialog.c	2009-12-03 12:01:17.000000000 +0000
4ef8fa4
@@ -2276,6 +2276,8 @@
4ef8fa4
 {
4ef8fa4
 	GtkWidget     *widget;
4ef8fa4
 	MrpConstraint *constraint;
4ef8fa4
+	MrpProject    *project;
4ef8fa4
+	MrpCalendar   *calendar;
4ef8fa4
 
4ef8fa4
 	widget = planner_task_date_widget_new ();
4ef8fa4
 
4ef8fa4
@@ -2284,6 +2286,12 @@
4ef8fa4
 	planner_task_date_widget_set_constraint_type (PLANNER_TASK_DATE_WIDGET (widget),
4ef8fa4
 						      constraint->type);
4ef8fa4
 
4ef8fa4
+	g_object_get (data->task, "project", &project, NULL);
4ef8fa4
+	calendar = mrp_project_get_calendar (project);
4ef8fa4
+
4ef8fa4
+	planner_task_date_widget_set_mrp_calendar (PLANNER_TASK_DATE_WIDGET (widget),
4ef8fa4
+					           calendar);
4ef8fa4
+
4ef8fa4
 	if (constraint->type != MRP_CONSTRAINT_ASAP) {
4ef8fa4
 		planner_task_date_widget_set_date (PLANNER_TASK_DATE_WIDGET (widget),
4ef8fa4
 						   constraint->time);