* A function was being deleted instead of another, causing trouble
later.
* I'd forgotten to move the code for the tasks_move() function from the
temporary script it was in.
Moving a subtask to its grandparent, or making a task a sub-task of one
of its siblings, didn't work as expected. While the icons were being
updated correctly, the task didn't appear in the right location. That
was because, while the cached structure was being updated, the task
itself wasn't.
The previous implementation of sub-tasks did not work as expected: it
was possible to mark sub-tasks as completed before the parent task's
dependencies were satisfied. In addition, it was impossible to retrieve
a task's path from the database without running a recursive query.
Full paths to sub-tasks added to views, since it is now possible to
obtain them.
In addition to normal dependencies, the application now supports
sub-tasks. Sub-tasks can be added into any existing task (including
other sub-tasks, Inception-style).
Dependencies can only be added between global tasks, or between
sub-tasks of the same task. It is no longer possible to mark a task as
finished if it has incomplete sub-tasks, and conversedly, it is not
possible to reactivate a sub-task if its parent is marked as completed.
A pair of buttons allowing tasks to be moved up and down in the task
hierarachy have been added.