container: freeze notifies during add and remove
authorHenry Wilkes <hwilkes@igalia.com>
Mon, 2 Mar 2020 12:23:07 +0000 (12:23 +0000)
committerHenry Wilkes <hwilkes@igalia.com>
Mon, 16 Mar 2020 14:19:52 +0000 (14:19 +0000)
commit74ae0ba5dfec3e873ec6467e67b267b5a9f2de61
tree0aaf6e09554aa511fa347f21aec253347717c4f8
parent3af38e171942b991e1a4e962ab5895b3d63980cc
container: freeze notifies during add and remove

Hold the notify signals for the container and the children until after
the child has been fully added or removed.

After the previous commit, this was used to ensure that the
notify::priority signal was sent for children of a clip *after* the
child-removed signal. This stopped being the case when the code in
->child_removed was moved to ->remove_child (the latter is called before
the child-removed signal is emitted, whilst the former is called
afterwards). Rather than undo this move of code, which was necessary to
ensure that ->add_child was always reversed, the notify::priority signal
is now simply delayed until after removing the child has completed. This
was done for all notify signals, as well as in the add method, to ensure
consistency.

This allows the test_clips.py test_signal_order_when_removing_effect to
pass.

Also make subclasses take a copy of the list of the children before
setting the start and duration, since this can potentially re-order the
children (if they have the SET_SIMPLE flag set).
ges/ges-clip.c
ges/ges-container.c
ges/ges-group.c
tests/check/ges/clip.c