есть у BBCB весьма нервирующий меня недочёт.
открываем документ, что-то там меняем, сохраняем документ, откатываем изменения. ящик теперь считает, что документ «чистый», в сохранении не нуждается: соответствующий пункт меню серенький. но это же очевидная неправда: документ на диске не соответствует тому, что мы видим! если такой документ закрыть — никто ничего не спросит, а на диске останется изменённый вариант.
проблема в том, что `StdSequencer.modLevel` жёстко заточен только на положительные значения: любое undo после его скидывания не отметит документ как грязный. но ведь это неверно! технически, если мы скинули флажок грязности, а потом отменили какое-то действие — то документ стал опять грязным.
я считаю, что флажку грязности следует разрешить меняться в обе стороны (то есть, становиться отрицательным). а чистым документ считается только при его нулевом значении. таким образом мы решаем проблему, которой я открыл этот пост, и делаем поведение системы более логичным: чистым документ будет только когда он ровно в том состоянии, когда флажок сбросили, а в любом другом он логично грязный.
p.s.: маленькая проблема будет с `SetDirty()` тогда: оно просто инрементирует счётчик. это получается неправильно. можно сделать хак: принудительно ставить флажок в `MAX(INTEGER)`. тогда за счёт переполнения у нас будет два миллиарда (ну, сколько там в signed int влазит) операций до того, как флажок станет нулём. считаем, что такая ситуация нереальна, и плюём на неё.
я себе в LC сделал такое изменение, посмотрим что сломается.
|