d8bacba
diff -ru planner-0.14.5.orig/src/planner-calendar.c planner-0.14.5/src/planner-calendar.c
d8bacba
--- planner-0.14.5.orig/src/planner-calendar.c	2010-03-16 11:18:21.000000000 +0000
d8bacba
+++ planner-0.14.5/src/planner-calendar.c	2010-04-13 13:07:42.000000000 +0100
4aa014f
@@ -291,7 +291,7 @@
4aa014f
 static void planner_calendar_paint_main	    (GtkWidget *widget);
4aa014f
 
4aa014f
 static void planner_calendar_select_and_focus_day (PlannerCalendar *calendar,
4aa014f
-					      guint        day);
4aa014f
+					      guint        day, gboolean multiselect);
4aa014f
 
4aa014f
 static void planner_calendar_paint_arrow	(GtkWidget    *widget,
4aa014f
 					 guint	       arrow);
4aa014f
@@ -305,6 +305,10 @@
4aa014f
 					 gint	       column);
4aa014f
 static gint top_y_for_row		(PlannerCalendar  *calendar,
4aa014f
 					 gint	       row);
4aa014f
+static void planner_calendar_append_select_day (PlannerCalendar *calendar,
4aa014f
+												guint         day);
4aa014f
+static void planner_calendar_deselect_days (PlannerCalendar *calendar);
4aa014f
+
4aa014f
 
4aa014f
 static char    *default_abbreviated_dayname[7];
4aa014f
 static char    *default_monthname[12];
4aa014f
@@ -492,7 +496,7 @@
4aa014f
 	for (i=0;i<14;i++)
4aa014f
 		calendar->mark_colors[i] = tango_palette[i];
4aa014f
 
4aa014f
-	calendar->selected_day = tm->tm_mday;
4aa014f
+	calendar->selected_days = g_list_append(NULL, GINT_TO_POINTER(tm->tm_mday));
d8bacba
 
d8bacba
 	calendar->display_flags = ( PLANNER_CALENDAR_SHOW_HEADING |
4aa014f
 				    PLANNER_CALENDAR_SHOW_DAY_NAMES );
4aa014f
@@ -669,6 +673,24 @@
4aa014f
 }
4aa014f
 
4aa014f
 static void
4aa014f
+planner_reset_selected_days (PlannerCalendar *calendar, gint month_len)
4aa014f
+{
4aa014f
+    GList *entry, *old_selected_days;
4aa014f
+
4aa014f
+    old_selected_days = g_list_copy (calendar->selected_days);
4aa014f
+    planner_calendar_deselect_days(calendar);
4aa014f
+    for (entry = old_selected_days; entry; entry = g_list_next(entry))
4aa014f
+    {
4aa014f
+        gint selected_day = GPOINTER_TO_INT (entry->data);
4aa014f
+        if (month_len < selected_day)
4aa014f
+            planner_calendar_append_select_day(calendar, month_len);
4aa014f
+        else
4aa014f
+            planner_calendar_append_select_day(calendar, selected_day);
4aa014f
+    }
4aa014f
+    g_list_free (old_selected_days);
4aa014f
+}
4aa014f
+
4aa014f
+static void
4aa014f
 planner_calendar_set_month_prev (PlannerCalendar *calendar)
4aa014f
 {
4aa014f
 	gint month_len;
4aa014f
@@ -696,17 +718,7 @@
4aa014f
 		       planner_calendar_signals[MONTH_CHANGED_SIGNAL],
4aa014f
 		       0);
d8bacba
 
4aa014f
-	if (month_len < calendar->selected_day)
4aa014f
-	{
4aa014f
-		calendar->selected_day = 0;
4aa014f
-		planner_calendar_select_day (calendar, month_len);
4aa014f
-	}
4aa014f
-	else
4aa014f
-	{
4aa014f
-		if (calendar->selected_day < 0)
4aa014f
-			calendar->selected_day = calendar->selected_day + 1 + month_length[leap (calendar->year)][calendar->month + 1];
4aa014f
-		planner_calendar_select_day (calendar, calendar->selected_day);
4aa014f
-	}
4aa014f
+	planner_reset_selected_days (calendar, month_len);
4aa014f
 
4aa014f
 	gtk_widget_queue_draw (GTK_WIDGET (calendar));
4aa014f
 	planner_calendar_thaw (calendar);
4aa014f
@@ -743,13 +755,7 @@
d8bacba
 
4aa014f
 	month_len = month_length[leap (calendar->year)][calendar->month + 1];
d8bacba
 
4aa014f
-	if (month_len < calendar->selected_day)
4aa014f
-	{
4aa014f
-		calendar->selected_day = 0;
4aa014f
-		planner_calendar_select_day (calendar, month_len);
4aa014f
-	}
4aa014f
-	else
4aa014f
-		planner_calendar_select_day (calendar, calendar->selected_day);
4aa014f
+	planner_reset_selected_days (calendar, month_len);
4aa014f
 
4aa014f
 	gtk_widget_queue_draw (GTK_WIDGET (calendar));
4aa014f
 	planner_calendar_thaw (calendar);
d8bacba
@@ -774,13 +780,7 @@
d8bacba
 
4aa014f
 	month_len = month_length[leap (calendar->year)][calendar->month + 1];
d8bacba
 
4aa014f
-	if (month_len < calendar->selected_day)
4aa014f
-	{
4aa014f
-		calendar->selected_day = 0;
4aa014f
-		planner_calendar_select_day (calendar, month_len);
4aa014f
-	}
4aa014f
-	else
4aa014f
-		planner_calendar_select_day (calendar, calendar->selected_day);
4aa014f
+	planner_reset_selected_days (calendar, month_len);
d8bacba
 
4aa014f
 	gtk_widget_queue_draw (GTK_WIDGET (calendar));
4aa014f
 	planner_calendar_thaw (calendar);
9e71dac
@@ -806,13 +806,7 @@
d8bacba
 
4aa014f
 	month_len = month_length[leap (calendar->year)][calendar->month + 1];
d8bacba
 
4aa014f
-	if (month_len < calendar->selected_day)
4aa014f
-	{
4aa014f
-		calendar->selected_day = 0;
4aa014f
-		planner_calendar_select_day (calendar, month_len);
4aa014f
-	}
4aa014f
-	else
4aa014f
-		planner_calendar_select_day (calendar, calendar->selected_day);
4aa014f
+	planner_reset_selected_days (calendar, month_len);
d8bacba
 
4aa014f
 	gtk_widget_queue_draw (GTK_WIDGET (calendar));
4aa014f
 	planner_calendar_thaw (calendar);
9e71dac
@@ -854,7 +848,7 @@
4aa014f
 		if (!GTK_WIDGET_HAS_FOCUS (widget))
4aa014f
 			gtk_widget_grab_focus (widget);
d8bacba
 
4aa014f
-		planner_calendar_select_and_focus_day (calendar, day);
4aa014f
+		planner_calendar_select_and_focus_day (calendar, day, event->state & GDK_CONTROL_MASK);
4aa014f
 
4aa014f
 	}
4aa014f
 	else if (event->type == GDK_2BUTTON_PRESS)
9e71dac
@@ -1791,6 +1785,7 @@
9e71dac
 	gint y_top;
4aa014f
 	gint y_loc;
4aa014f
 	gint focus_width;
4aa014f
+	gboolean is_selected_day;
4aa014f
 
4aa014f
 	PlannerCalendarPrivateData *private_data;
4aa014f
 	PangoLayout *layout;
9e71dac
@@ -1818,6 +1813,8 @@
d8bacba
 
4aa014f
 	day = calendar->day[row][col];
d8bacba
 
4aa014f
+	is_selected_day = (NULL != g_list_find(calendar->selected_days, GINT_TO_POINTER(day)));
4aa014f
+
4aa014f
 	x_left = left_x_for_column (calendar, col);
4aa014f
 	x_loc = x_left + private_data->day_width / 2 + private_data->max_day_char_width;
d8bacba
 
9e71dac
@@ -1846,7 +1843,7 @@
4aa014f
 		  private_data->day_width, day_height);
4aa014f
 		  }
4aa014f
 		*/
d8bacba
-		if (calendar->selected_day == day)
4aa014f
+		if (is_selected_day) 
4aa014f
 		{
4aa014f
 			gdk_gc_set_foreground (gc, SELECTED_BG_COLOR (GTK_WIDGET (calendar)));
4aa014f
 			gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,
9e71dac
@@ -1859,7 +1856,7 @@
4aa014f
 					    private_data->day_width, day_height);
4aa014f
 		}
d8bacba
 
4aa014f
-		if (calendar->selected_day == day)
4aa014f
+		if (is_selected_day)
4aa014f
 			gdk_gc_set_foreground (gc, SELECTED_FG_COLOR (GTK_WIDGET (calendar)));
4aa014f
 		else
4aa014f
 			gdk_gc_set_foreground (gc, & (GTK_WIDGET (calendar)->style->fg[GTK_WIDGET_STATE (calendar)]));
9e71dac
@@ -1881,7 +1878,7 @@
4aa014f
 	{
d8bacba
 		gtk_paint_focus (widget->style,
4aa014f
 				 private_data->main_win,
d8bacba
-				 (calendar->selected_day == day)
9e71dac
+				 is_selected_day
9e71dac
 				 ? GTK_STATE_SELECTED : GTK_STATE_NORMAL,
4aa014f
 				 NULL, widget, "calendar-day",
d8bacba
 				 x_left, y_top,
9e71dac
@@ -2151,31 +2148,17 @@
4aa014f
 	return TRUE;
4aa014f
 }
4aa014f
 
4aa014f
-void
4aa014f
-planner_calendar_select_day (PlannerCalendar *calendar,
4aa014f
-			guint	      day)
4aa014f
+static void
4aa014f
+planner_calendar_append_select_day (PlannerCalendar *calendar,
4aa014f
+            guint         day)
4aa014f
 {
4aa014f
-	g_return_if_fail (PLANNER_IS_CALENDAR (calendar));
4aa014f
 	g_return_if_fail (day <= 31);
d8bacba
 
4aa014f
-	/* planner_calendar_compute_days (calendar); */
d8bacba
-
4aa014f
-	/* Deselect the old day */
4aa014f
-	if (calendar->selected_day > 0)
4aa014f
-	{
4aa014f
-		gint selected_day;
d8bacba
-
4aa014f
-		selected_day = calendar->selected_day;
4aa014f
-		calendar->selected_day = 0;
4aa014f
-		if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
4aa014f
-			planner_calendar_paint_day_num (GTK_WIDGET (calendar), selected_day);
4aa014f
-	}
d8bacba
-
4aa014f
-	calendar->selected_day = day;
d8bacba
-
4aa014f
 	/* Select the new day */
4aa014f
-	if (day != 0)
4aa014f
+	if (day != 0 && (NULL == g_list_find(calendar->selected_days, GINT_TO_POINTER(day))))
4aa014f
 	{
4aa014f
+		calendar->selected_days = g_list_append(calendar->selected_days, GINT_TO_POINTER(day));
4aa014f
+
4aa014f
 		if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
4aa014f
 			planner_calendar_paint_day_num (GTK_WIDGET (calendar), day);
4aa014f
 	}
9e71dac
@@ -2186,8 +2169,42 @@
4aa014f
 }
4aa014f
 
4aa014f
 static void
4aa014f
+planner_calendar_deselect_days (PlannerCalendar *calendar)
4aa014f
+{
4aa014f
+	g_return_if_fail (PLANNER_IS_CALENDAR (calendar));
4aa014f
+  
4aa014f
+	/* Deselect the old days */
4aa014f
+	if (calendar->selected_days)
4aa014f
+	{
4aa014f
+		GList* old_selected_days = calendar->selected_days;
4aa014f
+		GList* entry;
4aa014f
+
4aa014f
+		calendar->selected_days = NULL;
4aa014f
+      
4aa014f
+		for (entry = old_selected_days; entry; entry = g_list_next(entry))
4aa014f
+		{
4aa014f
+		    gint day = GPOINTER_TO_INT (entry->data);
4aa014f
+ 		    if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
4aa014f
+			    planner_calendar_paint_day_num (GTK_WIDGET (calendar), day);
4aa014f
+		}
4aa014f
+
4aa014f
+		g_list_free (old_selected_days);
4aa014f
+	}
4aa014f
+}
4aa014f
+
4aa014f
+void
4aa014f
+planner_calendar_select_day (PlannerCalendar *calendar,
4aa014f
+			guint	      day)
4aa014f
+{
4aa014f
+	g_return_if_fail (PLANNER_IS_CALENDAR (calendar));
4aa014f
+
4aa014f
+	planner_calendar_deselect_days (calendar);
4aa014f
+	planner_calendar_append_select_day(calendar, day);
4aa014f
+}
4aa014f
+
4aa014f
+static void
4aa014f
 planner_calendar_select_and_focus_day (PlannerCalendar *calendar,
4aa014f
-				  guint        day)
4aa014f
+				  guint        day, gboolean multiselect)
4aa014f
 {
4aa014f
 	gint old_focus_row = calendar->focus_row;
4aa014f
 	gint old_focus_col = calendar->focus_col;
9e71dac
@@ -2207,17 +2224,29 @@
4aa014f
 
4aa014f
 	if (old_focus_row != -1 && old_focus_col != -1)
4aa014f
 		planner_calendar_paint_day (GTK_WIDGET (calendar), old_focus_row, old_focus_col);
d8bacba
-
4aa014f
-	planner_calendar_select_day (calendar, day);
4aa014f
+ 
4aa014f
+	if (multiselect)
4aa014f
+	{
4aa014f
+		gboolean is_selected_day = (NULL != g_list_find (calendar->selected_days, GINT_TO_POINTER(day)));
4aa014f
+		if (!is_selected_day)
4aa014f
+			planner_calendar_append_select_day (calendar, day);
4aa014f
+		else if (g_list_length (calendar->selected_days) > 1)
4aa014f
+		{
4aa014f
+			calendar->selected_days = g_list_remove (calendar->selected_days, GINT_TO_POINTER(day));
4aa014f
+			if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
4aa014f
+				planner_calendar_paint_day_num (GTK_WIDGET (calendar), day);
4aa014f
+		}
4aa014f
+	}	
4aa014f
+	else
4aa014f
+		planner_calendar_select_day (calendar, day);
4aa014f
 }
4aa014f
 
4aa014f
-void
4aa014f
-planner_calendar_get_date (PlannerCalendar *calendar,
4aa014f
+GList*
4aa014f
+planner_calendar_get_dates (PlannerCalendar *calendar,
4aa014f
 		      guint	   *year,
4aa014f
-		      guint	   *month,
4aa014f
-		      guint	   *day)
4aa014f
+		      guint	   *month)
4aa014f
 {
4aa014f
-	g_return_if_fail (PLANNER_IS_CALENDAR (calendar));
4aa014f
+	g_return_val_if_fail (PLANNER_IS_CALENDAR (calendar), NULL);
d8bacba
 
4aa014f
 	if (year)
4aa014f
 		*year = calendar->year;
9e71dac
@@ -2225,8 +2254,7 @@
4aa014f
 	if (month)
4aa014f
 		*month = calendar->month;
d8bacba
 
4aa014f
-	if (day)
4aa014f
-		*day = calendar->selected_day;
4aa014f
+	return calendar->selected_days;
4aa014f
 }
4aa014f
 
4aa014f
 static gboolean
9e71dac
@@ -2519,11 +2547,16 @@
4aa014f
 static void
4aa014f
 planner_calendar_finalize (GObject *object)
4aa014f
 {
4aa014f
+        PlannerCalendar *calendar;
4aa014f
 	PlannerCalendarPrivateData *private_data;
4aa014f
+
4aa014f
+        calendar = PLANNER_CALENDAR (object);
4aa014f
 	private_data = PLANNER_CALENDAR_PRIVATE_DATA (object);
d8bacba
 
4aa014f
 	g_free (private_data);
d8bacba
 
4aa014f
+	g_list_free(calendar->selected_days);
d8bacba
+
4aa014f
 	if (G_OBJECT_CLASS (parent_class)->finalize)
4aa014f
 		(* G_OBJECT_CLASS (parent_class)->finalize) (object);
d8bacba
 }
9e71dac
@@ -2648,7 +2681,7 @@
4aa014f
 				planner_calendar_set_month_next (calendar);
4aa014f
 			}
4aa014f
 
4aa014f
-			planner_calendar_select_and_focus_day (calendar, day);
4aa014f
+			planner_calendar_select_and_focus_day (calendar, day, event->state & GDK_CONTROL_MASK);
d8bacba
 
d8bacba
 			planner_calendar_thaw (calendar);
4aa014f
 		}
9e71dac
@@ -2697,7 +2730,8 @@
4aa014f
 	GList        *daytypes;
4aa014f
 	gint         dayindex;
4aa014f
 
4aa014f
-	planner_calendar_get_date (calendar, &y, &m, &d);
4aa014f
+	y = calendar->year;
4aa014f
+	m = calendar->month;
4aa014f
 
4aa014f
 	g_object_get (mrp_calendar, "project", &project, NULL);
4aa014f
 
d8bacba
diff -ru planner-0.14.5.orig/src/planner-calendar-dialog.c planner-0.14.5/src/planner-calendar-dialog.c
d8bacba
--- planner-0.14.5.orig/src/planner-calendar-dialog.c	2010-03-16 11:18:21.000000000 +0000
d8bacba
+++ planner-0.14.5/src/planner-calendar-dialog.c	2010-04-13 12:53:04.000000000 +0100
4aa014f
@@ -823,9 +823,10 @@
4aa014f
 			     DialogData *data)
4aa014f
 {
4aa014f
 	MrpCalendar *calendar;
4aa014f
-	guint        y, m, d;
4aa014f
+	guint        y, m;
4aa014f
 	mrptime      t;
4aa014f
 	MrpDay      *day;
4aa014f
+	GList       *days, *entry;
4aa014f
 
4aa014f
 	calendar = cal_dialog_get_selected_calendar (GTK_TREE_VIEW (data->tree_view));
4aa014f
 
4aa014f
@@ -842,10 +843,12 @@
4aa014f
 		return;
4aa014f
 	}
d8bacba
 
4aa014f
-	planner_calendar_get_date (PLANNER_CALENDAR (data->calendar), &y, &m, &d);
4aa014f
-	t = mrp_time_compose (y, m + 1, d, 0, 0, 0);
4aa014f
-	/* mrp_calendar_set_days (calendar, t, day, (mrptime) -1); */
4aa014f
-	planner_cal_cmd_day_type (data->main_window, calendar, day, t);
4aa014f
+	days = planner_calendar_get_dates (PLANNER_CALENDAR (data->calendar), &y, &m);
4aa014f
+	for (entry = days; entry; entry = g_list_next(entry)) {
4aa014f
+		t = mrp_time_compose (y, m + 1, GPOINTER_TO_INT(entry->data), 0, 0, 0);
4aa014f
+		/* mrp_calendar_set_days (calendar, t, day, (mrptime) -1); */
4aa014f
+		planner_cal_cmd_day_type (data->main_window, calendar, day, t);
4aa014f
+	}
4aa014f
 }
4aa014f
 
4aa014f
 static void
d8bacba
@@ -944,6 +947,7 @@
4aa014f
 	GList       *ivals, *l;
4aa014f
 	MrpCalendar *calendar, *root;
4aa014f
 	PlannerCalendar  *calendar_widget;
4aa014f
+	GList       *days;
4aa014f
 	guint        y, m, d;
4aa014f
 	mrptime      t;
4aa014f
 	gint         i;
d8bacba
@@ -989,54 +993,66 @@
4aa014f
 
4aa014f
 	calendar_widget = PLANNER_CALENDAR (data->calendar);
d8bacba
 
4aa014f
-	planner_calendar_get_date (calendar_widget, &y, &m, &d);
4aa014f
-	t = mrp_time_compose (y, m + 1, d, 0, 0, 0);
d8bacba
-
4aa014f
-	day = mrp_calendar_get_day (calendar, t, FALSE);
d8bacba
-
4aa014f
-	if (day == mrp_day_get_use_base ()) {
4aa014f
-		gtk_widget_set_sensitive (data->option_menu, FALSE);
d8bacba
+	days = planner_calendar_get_dates (calendar_widget, &y, &m);
d8bacba
 
4aa014f
-		gtk_toggle_button_set_active (
4aa014f
-			GTK_TOGGLE_BUTTON (data->base_radiobutton), TRUE);
4aa014f
-	} else {
4aa014f
+	if (g_list_length(days) > 1) {
4aa014f
+		/*allow multi-selection to control setting multiple days to the same type*/
4aa014f
 		gtk_widget_set_sensitive (data->option_menu, TRUE);
4aa014f
 
d8bacba
-		cal_dialog_option_menu_set_day (data->option_menu, day);
d8bacba
-
4aa014f
 		gtk_toggle_button_set_active (
4aa014f
-			GTK_TOGGLE_BUTTON (data->type_radiobutton), TRUE);
4aa014f
-	}
4aa014f
+				GTK_TOGGLE_BUTTON (data->type_radiobutton), TRUE);
4aa014f
 
4aa014f
-	calendar = cal_dialog_get_selected_calendar (GTK_TREE_VIEW (data->tree_view));
4aa014f
+		gtk_widget_set_sensitive (data->apply_button, TRUE);
4aa014f
+	} else {
4aa014f
+		d = GPOINTER_TO_INT(days->data);
4aa014f
+		t = mrp_time_compose (y, m + 1, d, 0, 0, 0);
d8bacba
 
d8bacba
-	if (day == mrp_day_get_use_base ()) {
d8bacba
-		day = mrp_calendar_get_day (calendar, t, TRUE);
4aa014f
-	}
4aa014f
+		day = mrp_calendar_get_day (calendar, t, FALSE);
d8bacba
 
d8bacba
-	ivals = mrp_calendar_day_get_intervals (calendar, day, TRUE);
4aa014f
+		if (day == mrp_day_get_use_base ()) {
4aa014f
+			gtk_widget_set_sensitive (data->option_menu, FALSE);
4aa014f
+			
4aa014f
+			gtk_toggle_button_set_active (
4aa014f
+				GTK_TOGGLE_BUTTON (data->base_radiobutton), TRUE);
4aa014f
+		} else {
4aa014f
+			gtk_widget_set_sensitive (data->option_menu, TRUE);
4aa014f
+			
4aa014f
+			cal_dialog_option_menu_set_day (data->option_menu, day);
d8bacba
 
d8bacba
-	for (i = 0; i < 5; i++) {
d8bacba
-		gtk_entry_set_text (GTK_ENTRY (data->from_entry[i]), "");
d8bacba
-		gtk_entry_set_text (GTK_ENTRY (data->to_entry[i]), "");
d8bacba
-	}
d8bacba
+			gtk_toggle_button_set_active (
d8bacba
+				GTK_TOGGLE_BUTTON (data->type_radiobutton), TRUE);
d8bacba
+		}
d8bacba
 
4aa014f
-	for (l = ivals, i = 0; l && i < 5; l = l->next, i++) {
4aa014f
-		MrpInterval *ival;
4aa014f
-		mrptime      start, end;
4aa014f
-		gchar       *str;
4aa014f
+		calendar = cal_dialog_get_selected_calendar (GTK_TREE_VIEW (data->tree_view));
d8bacba
 
d8bacba
-		ival = l->data;
4aa014f
+		if (day == mrp_day_get_use_base ()) {
4aa014f
+			day = mrp_calendar_get_day (calendar, t, TRUE);
4aa014f
+		}
d8bacba
 
4aa014f
-		mrp_interval_get_absolute (ival, 0, &start, &end;;
4aa014f
+		ivals = mrp_calendar_day_get_intervals (calendar, day, TRUE);
d8bacba
 
4aa014f
-		str = mrp_time_format ("%H:%M", start);
4aa014f
-		gtk_entry_set_text (GTK_ENTRY (data->from_entry[i]), str);
4aa014f
-		g_free (str);
4aa014f
+		for (i = 0; i < 5; i++) {
4aa014f
+			gtk_entry_set_text (GTK_ENTRY (data->from_entry[i]), "");
4aa014f
+			gtk_entry_set_text (GTK_ENTRY (data->to_entry[i]), "");
4aa014f
+		}
d8bacba
 
4aa014f
-		str = mrp_time_format ("%H:%M", end);
4aa014f
-		gtk_entry_set_text (GTK_ENTRY (data->to_entry[i]), str);
4aa014f
-		g_free (str);
4aa014f
+		for (l = ivals, i = 0; l && i < 5; l = l->next, i++) {
4aa014f
+			MrpInterval *ival;
4aa014f
+			mrptime      start, end;
4aa014f
+			gchar       *str;
4aa014f
+			
4aa014f
+			ival = l->data;
4aa014f
+			
4aa014f
+			mrp_interval_get_absolute (ival, 0, &start, &end;;
4aa014f
+			
4aa014f
+			str = mrp_time_format ("%H:%M", start);
4aa014f
+			gtk_entry_set_text (GTK_ENTRY (data->from_entry[i]), str);
4aa014f
+			g_free (str);
4aa014f
+			
4aa014f
+			str = mrp_time_format ("%H:%M", end);
4aa014f
+			gtk_entry_set_text (GTK_ENTRY (data->to_entry[i]), str);
4aa014f
+			g_free (str);
4aa014f
+		}
4aa014f
 	}
4aa014f
 
4aa014f
 	g_signal_handlers_unblock_by_func (data->option_menu,
d8bacba
diff -ru planner-0.14.5.orig/src/planner-calendar.h planner-0.14.5/src/planner-calendar.h
d8bacba
--- planner-0.14.5.orig/src/planner-calendar.h	2010-03-16 11:18:21.000000000 +0000
d8bacba
+++ planner-0.14.5/src/planner-calendar.h	2010-04-13 12:53:04.000000000 +0100
4aa014f
@@ -61,7 +61,7 @@
d8bacba
 
4aa014f
 	gint month;
4aa014f
 	gint year;
4aa014f
-	gint selected_day;
4aa014f
+	GList* selected_days;
d8bacba
 
4aa014f
 	gint day_month[6][7];
4aa014f
 	gint day[6][7];
4aa014f
@@ -117,10 +117,9 @@
4aa014f
 void	   planner_calendar_display_options (PlannerCalendar		  *calendar,
4aa014f
 					 PlannerCalendarDisplayOptions flags);
4aa014f
 
d8bacba
-void	   planner_calendar_get_date	(PlannerCalendar *calendar,
4aa014f
+GList*	   planner_calendar_get_dates	(PlannerCalendar *calendar, 
4aa014f
 				 guint	     *year,
4aa014f
-				 guint	     *month,
4aa014f
-				 guint	     *day);
4aa014f
+				 guint	     *month);
4aa014f
 void	   planner_calendar_freeze		(PlannerCalendar *calendar);
4aa014f
 void	   planner_calendar_thaw		(PlannerCalendar *calendar);
4aa014f
 
d8bacba
diff -ru planner-0.14.5.orig/src/planner-task-date-widget.c planner-0.14.5/src/planner-task-date-widget.c
d8bacba
--- planner-0.14.5.orig/src/planner-task-date-widget.c	2010-03-16 11:18:21.000000000 +0000
d8bacba
+++ planner-0.14.5/src/planner-task-date-widget.c	2010-04-13 12:53:04.000000000 +0100
4aa014f
@@ -293,15 +293,16 @@
4aa014f
 planner_task_date_widget_get_date (PlannerTaskDateWidget *widget)
4aa014f
 {
4aa014f
 	PlannerTaskDateWidgetPriv *priv;
4aa014f
-	gint                       year, month, day;
4aa014f
+	gint                       year, month;
4aa014f
+	GList                     *days;
4aa014f
 
4aa014f
 	priv = GET_PRIV (widget);
d8bacba
 
d8bacba
-	planner_calendar_get_date (GTK_CALENDAR (priv->calendar),
4aa014f
-			       &year, &month, &day;;
4aa014f
+	days = planner_calendar_get_dates (PLANNER_CALENDAR (priv->calendar),
4aa014f
+			       &year, &month);
d8bacba
 
4aa014f
 	month++;
4aa014f
-	return mrp_time_compose (year, month, day, 0, 0, 0);
4aa014f
+	return mrp_time_compose (year, month, GPOINTER_TO_INT(days->data), 0, 0, 0);
4aa014f
 }
4aa014f
 
4aa014f
 void