Quote:
jacadcaps wrote:
MUI has always required notifications to be set up so that they don't trigger each other.
Not really. There's a lot of code/programs which rely on not really documented TAG_IGNORE poking in internal MUI classes (but also some external ones) where in OM_SET they do "if (new_value == old_value) tag->ti_Tag = TAG_IGNORE).
Quote:
No check can reliably workaround that.
AROS MUI (Zune) internally detects notification loops in very simple way. The notfication nodes (each object has a list of notifications set up on it) has an "active" flag. When a notification is fired:
Code:
nnode->active = TRUE;
DoMethod(destobj, ...);
nnode->active = FALSE;
But before doing that, it checks if active is already TRUE. If so, it has detected notification loops and aborts.
I wonder what would break if MUI did that internally, too? As last resort notification-loop-prevention. One issue is that if a new program would rely on that, it would break in an older version of MUI that did not yet do that. Also it is not 100 % alternative to stupid TAG_IGNORE poking, because behaviour can still be slightly different, so it would still not allow you to get rid of stupid TAG_IGNORE poking in internal or external classes.