diff options
-rw-r--r-- | calendar/ChangeLog | 5 | ||||
-rw-r--r-- | calendar/gui/e-cal-model-tasks.c | 42 |
2 files changed, 43 insertions, 4 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index fdeb173ac3..7a5e44bb8f 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,8 @@ +2004-02-09 Kidd Wang <kidd.wang@sun.com> + + * gui/e-cal-model-tasks.c: (ecmt_set_value_at): refuse to update + the task info if due date is before start date. + 2004-02-05 JP Rosevear <jpr@ximian.com> * Convert the calendar_config_get_timezone and diff --git a/calendar/gui/e-cal-model-tasks.c b/calendar/gui/e-cal-model-tasks.c index 99c337905f..78ea87cf4d 100644 --- a/calendar/gui/e-cal-model-tasks.c +++ b/calendar/gui/e-cal-model-tasks.c @@ -710,6 +710,9 @@ ecmt_set_value_at (ETableModel *etm, int col, int row, const void *value) ECalModelTasksPrivate *priv; ECalModelComponent *comp_data; ECalModelTasks *model = (ECalModelTasks *) etm; + icaltimetype start_tt, due_tt; + ECellDateEditValue *dv; + GtkWidget *dialog; g_return_if_fail (E_IS_CAL_MODEL_TASKS (model)); @@ -718,15 +721,32 @@ ecmt_set_value_at (ETableModel *etm, int col, int row, const void *value) g_return_if_fail (col >= 0 && col < E_CAL_MODEL_TASKS_FIELD_LAST); g_return_if_fail (row >= 0 && row < e_table_model_row_count (etm)); + comp_data = e_cal_model_get_component_at (E_CAL_MODEL (model), row); + if (!comp_data) + return; + if (col < E_CAL_MODEL_FIELD_LAST) { + if (col == E_CAL_MODEL_FIELD_DTSTART) { + dv = (ECellDateEditValue *) value; + start_tt = dv->tt; + due_tt = icalcomponent_get_due (comp_data->icalcomp); + + if (icaltime_compare (start_tt, due_tt) > 0) { + dialog = gtk_message_dialog_new (NULL, 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("Due date is before start date!")); + g_signal_connect (dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); + gtk_widget_show (dialog); + + return; + } + } + E_TABLE_MODEL_CLASS (parent_class)->set_value_at (etm, col, row, value); return; } - comp_data = e_cal_model_get_component_at (E_CAL_MODEL (model), row); - if (!comp_data) - return; - switch (col) { case E_CAL_MODEL_TASKS_FIELD_COMPLETED : set_completed (model, comp_data, value); @@ -735,6 +755,20 @@ ecmt_set_value_at (ETableModel *etm, int col, int row, const void *value) set_complete (comp_data, value); break; case E_CAL_MODEL_TASKS_FIELD_DUE : + dv = (ECellDateEditValue *) value; + start_tt = icalcomponent_get_dtstart (comp_data->icalcomp); + due_tt = dv->tt; + + if (icaltime_compare (start_tt, due_tt) > 0) { + dialog = gtk_message_dialog_new (NULL, 0, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("Due date is before start date!")); + g_signal_connect (dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); + gtk_widget_show (dialog); + + return; + } set_due (comp_data, value); break; case E_CAL_MODEL_TASKS_FIELD_GEO : |