Summary: | Гарант: Не прорисовывается checkbox | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Виталий Перов <vitperov> |
Component: | Окна / фокус / перерисовка | Assignee: | Илья Шпигорь <shpigor> |
Status: | CLOSED FIXED | QA Contact: | Andrey Vusik <night> |
Severity: | minor | ||
Priority: | P4 | CC: | baraka, lav, night, pav |
Version: | 1.0.9 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 769, 1074, 3932 |
Description
Виталий Перов
2008-08-08 14:37:35 MSD
В общем ошибку заценил.. Такое ощущение, что msi эту кнопку рисует под клиентским окном, т.к. spy его в wine не видит, а в WIndows без проблем. Стиль: 0x50032002 Проблема похоже в static-е ( SS_BITMAP ), он перерисовывает и закрывает собой этот checkbox, очень похоже на проблему с 1с 7.7 ( окно "О программе", когда там текст зарисовывался ). Выложил патч. Как писал Толя, проблема заключалась в bitmap static'e, который при отрисовке закрывал ранее нарисованный checkbox. Решение состоит в том, чтобы после отрисовки bitmap static'a посылать WM_PAINT тем контролам, которые перекрываются этим static'ом. Думаю, что решение, не требующее перебора окон, вряд ли существует. Дело в том, что bitmap static может рисоваться по WM_PAINT, посланными из приложения, поэтому отслеживать порядок отрисовки всех контролов окна бесполезно. С данным патчем ошибка не воспроизвелась. У текущего решения есть проблема - перестал работать установщик FineReader. Происходит постоянная перерисовка и приложение виснет. Патч надо доработать. Проблема текущего решения, заключается в том, что если static находится поверх како-нибудь контрола-родителя, то из-за посылки ему WM_PAINT по отрисовки static'a получается зацикливание. Выложил дополнение к патчу - [2/2]. Добавлена проверка на класс контрола, который необходимо перерисовать. Класс должен быть Button. Протестировать установку FineReader можно в бутылке fr/install. 40/17 С установкой FR проблемы не наблюдал При тестировании было замечено, что патчи на эту багу стали не нужны. Думаю имеет смысл их откатить, т.к. они приводят к лишней перерисовке контролов. Выложил 2 revert'а. Необходимо протестировать, что бага не воспроизводится на багфиксе 1.0.11. WINE@Etersoft 1.0 SQL 1.0.11-eter8.3/4 Not working! Выложил патч [TRY 2]. На самом деле, проблема в создании контролов msi диалога. Они перерисовываются в порядке обратном порядку создания. Т.е. если сначала создается Bitmap, а потом CheckBox, то они перерисовываются - CheckBox, затем Bitmap. Очевидно, что CheckBox в этом случае будет перекрываться Bitmap'ом. Порядок создания этих контролов определяется результатом SQL запроса к msi пакету в функции msi_dialog_fill_controls. Если в этот запрос добавить упорядочивание по типу, то тогда Bitmap'ы будут всегда создаваться в последнюю очередь (после контролов PushButton, CheckBox, Text). В этом случае они наверняка не будут ничего перекрывать. В windows порядок создания контролов отличается от wine'овского. Чтобы однозначно его установить надо написать тест. Принято. |