Jani Tiainen wrote:
Bug 140536: Critical path broken
>>> Fixed: I just changed backpass to go through all child tasks if such exists. Seems to work with few testcases I made.
Bug 154253: Milestones shouldn't be able to have subtasks
Fixed. There is still possibilty to load file that has subtasks for milestones. (Faulty file attached)
Bug 151730: Toolbar buttons unavailable after indenting a task
Fixed:It actually destroyed selection and blocked selection change signal. If signal was unblocked it selected first (in reverse order I guess) item only.
Now it selects all items that were selected, despite the fact were they intended or not.
Indent/undent still works in a pretty unpredictable way when you have multiple tasks selected that are not grouped together. That should be fixed in the future so that you can't even try indent in such a cases.
Other notes:GUI should really reflect state of selections. Now it has many options available that is purely impossible, like indent/unindent in cases where it is not even possible. It looks like not polished.
This also sometimes creates unwanted indents/unindents if many tasks are selected...
Attachmets: Bugfix patch for bugs above, expanded testcase for bug 140536, faulty file for bug 154253.
-- Jani Tiainen
? bugfixes_200502060921.patch
? data/planner.desktop.in
Index: libplanner/mrp-task-manager.c
===================================================================
RCS file: /cvs/gnome/planner/libplanner/mrp-task-manager.c,v
retrieving revision 1.12
diff -B -u -b -r1.12 mrp-task-manager.c
--- libplanner/mrp-task-manager.c 4 Oct 2004 22:29:19 -0000 1.12
+++ libplanner/mrp-task-manager.c 6 Feb 2005 07:29:21 -0000
@@ -1744,18 +1744,34 @@
}
successors = imrp_task_peek_successors (task);
+
for (s = successors; s; s = s->next) {
MrpRelation *relation;
- MrpTask *successor;
+ MrpTask *successor, *child;
relation = s->data;
successor = mrp_relation_get_successor (relation);
+ child = mrp_task_get_first_child(successor);
+ if (child) {
+ /* If successor has childs go through them instead of successor itself*/
+ for (; child; child = mrp_task_get_next_sibling(child)) {
+ successor = child;
+
t2 = mrp_task_get_latest_start (successor) -
mrp_relation_get_lag (relation);
t1 = MIN (t1, t2);
}
+ } else {
+ /* No childs, check real successor */
+ t2 = mrp_task_get_latest_start (successor) -
+ mrp_relation_get_lag (relation);
+
+ t1 = MIN (t1, t2);
+ }
+
+ }
imrp_task_set_latest_finish (task, t1);
Index: src/planner-task-tree.c
===================================================================
RCS file: /cvs/gnome/planner/src/planner-task-tree.c,v
retrieving revision 1.46
diff -B -u -b -r1.46 planner-task-tree.c
--- src/planner-task-tree.c 13 Oct 2004 17:49:44 -0000 1.46
+++ src/planner-task-tree.c 6 Feb 2005 07:29:28 -0000
@@ -2900,7 +2900,9 @@
task = list->data;
new_parent = planner_gantt_model_get_indent_task_target (model, task);
- if (new_parent == NULL) {
+ if (new_parent == NULL ||
+ mrp_task_get_task_type(new_parent) == MRP_TASK_TYPE_MILESTONE) {
+ /* Toplevel item, or parent task would be milestone */
g_list_free (list);
return;
}
@@ -2918,6 +2920,7 @@
g_list_free (list);
indent_tasks = g_list_reverse (indent_tasks);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
for (l = indent_tasks; l; l = l->next) {
TaskCmdMove *cmd;
@@ -2938,17 +2941,13 @@
gtk_widget_destroy (dialog);
g_error_free (error);
}
- }
path = planner_gantt_model_get_path_from_task (PLANNER_GANTT_MODEL (model),
- indent_tasks->data);
-
- task_tree_block_selection_changed (tree);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
+ task);
gtk_tree_selection_select_path (selection, path);
- task_tree_unblock_selection_changed (tree);
gtk_tree_path_free (path);
+ }
g_list_free (indent_tasks);
}
@@ -3000,22 +2999,20 @@
g_list_free (list);
unindent_tasks = g_list_reverse (unindent_tasks);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
for (l = unindent_tasks; l; l = l->next) {
task = l->data;
task_cmd_move (tree, task, NULL, new_parent, FALSE, NULL);
- }
path = planner_gantt_model_get_path_from_task (PLANNER_GANTT_MODEL (model),
- unindent_tasks->data);
+ task);
- task_tree_block_selection_changed (tree);
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree));
gtk_tree_selection_select_path (selection, path);
- task_tree_unblock_selection_changed (tree);
gtk_tree_path_free (path);
+ }
g_list_free (unindent_tasks);
}
Attachment:
bug140536_test.planner
Description: application/planner
Attachment:
milestone_subtask_bug.planner
Description: application/planner