[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