- /*
- Hmm. We must set dir when solo, in order to get
- the rests collided to the right position
- */
- if ((unirhythm != SCM_BOOL_T) || (solo == SCM_BOOL_T)
- || ((unisilence == SCM_BOOL_T && previous_state != UNISON))
- || (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T
- && (unison != SCM_BOOL_T || solo_adue != SCM_BOOL_T)))
+ /* When in solo a due mode, and we have solo, every grob in
+ other thread gets annihilated, so we don't set dir.
+
+ Maybe that should be optional? */
+ if ((solo != SCM_BOOL_T && solo_adue == SCM_BOOL_T)
+
+ /* When not same rhythm, we set dir */
+ && (unirhythm != SCM_BOOL_T
+ /* When both have rests, but previously played something
+ different, we set dir */
+ || ((unisilence == SCM_BOOL_T && previous_state != UNISON))
+ /* When same rhythm, and split stems, but not same pitch
+ or not solo a du mode, we set dir */
+ || (unirhythm == SCM_BOOL_T && split_interval == SCM_BOOL_T
+ && (unison != SCM_BOOL_T || solo_adue != SCM_BOOL_T))))