[Wine-devel] [Wine-patches] [eterhack] comctl32: Fix tab control updating (eterbug #8398)
Dmitry Timoshkov
dtimoshkov на etersoft.ru
Пн Апр 30 12:28:59 MSK 2012
Vitaly Lipatov <lav на etersoft.ru> wrote:
> ГуральникСергей писал 29.04.2012 12:36:
> > Vitaly Lipatov писал 28.04.2012 19:51:
> >> Дмитрий, вы не могли бы сказать своё веское слово по поводу этого
> >> патча?
> >> Как я понимаю, оно уже приложен к репозиторию.
>
> Имеются следующие замечания:
> 1. По обратному адресу ГуральникСергей <serhio на office.etersoft.ru>
> Он должен выглядеть так: Сергей Гуральник <serhio на etersoft.ru>
> Просьба исправить профиль в RoundCube
> 2. Вы хронически отвечаете мне лично, а не в рассылку.
>
> > Предлагаю:
> > 1 Откатить данный патч.
> > 2 Добавить параметр в TAB_InvalidateTabArea():
> > static void TAB_InvalidateTabArea(const TAB_INFO *infoPtr, BOOL
> > fAll);
> > 3 В зависимости от значения флага использовать либо оригинальный,
> > оптимизированный вариант (практически во всех случаях), либо
> > объявлять недействительной всю область вкладок (при вызове из
> > TAB_DeleteItem()).
Если есть уверенность, что исправление (скорее всего) правильное, я бы
настойчиво рекомендовал пропускать его через фильтр wine-patches на winehq.org.
Если такой уверенности нет, то подобные хаки или лучше делать специфическими
для конкретной программы, или не делать их вообще, т.к. на своем опыте работы
с проблемами перерисовки могу сказать, что возможные поломки (вызванные
этим хаком) крайне сложно диагностировать/исследовать/исправить. А учитывая,
что это не первый подобный хак, это создает ком, сложно диагностируемых
проблем.
Конкретно по этой проблеме (да и вообще по общему порядку решеия других):
1. надо постараться создать минимальный код, который воспроизводит данную
проблему
2. всегда есть возможность проверить в обработчике WM_PAINT текущий
прямоугольник отрисовки и сравнить его с ожидаемым.
3. проверить на ванильном wine, не вызвана ли данная проблема другими
хаками, влияющими на перерисовку окон (а такие имеюся во множестве).
4. только убедившись в том, что источник проблемы найден и диагностирован
начинать искать пути исправления.
5. обязательно выполнять 'make test' до и после исправления и убедиться,
что все тесты по прежнему выполняюся. Если есть хоть один сломанный тест,
это значит, что сломана какая-то программа, которая делает тоже самое, что
и этот тест.
5. помнить, что чем больше хаков добавляется, тем больше самых разных и порой
причудливых проблем создается для себя и того парня в будущем.
P.S.
Спасибо за прочтение стены текста выше :)
--
Dmitry.
Подробная информация о списке рассылки Wine-devel