Can't we just add a flag in LyXAction to each dirtying lfun, and handle this in dispatch ?
We don't handle the dirty state cleverly in all sorts of circumstances anyway already. If we end up /wanting/ to do that for some cases, it would be relatively easy to do (limited_stack<2> for the dirty, and pop the state if nothing actually changed). regards john