Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 2234 - Гарант: Не прорисовывается checkbox   Make a simular bug
Summary: Гарант: Не прорисовывается checkbox
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Окна / фокус / перерисовка (show other bugs)
Version: 1.0.9
Hardware: PC Linux
: P4 minor
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact: Andrey Vusik
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 769 1074 3932
  Show dependency treegraph
 
In work:
Reported: 2008-08-08 14:37 MSD by Виталий Перов
Modified: 2010-12-12 15:36 MSK (History)
4 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Виталий Перов 2008-08-08 14:37:35 MSD
При завершении мастера установки Гарант7 появляется финальный диалог. Там должен стоять checkbox слева от надписи "Запустить утилиту...".
Checkbox прорисовывается только если попасть в него мышкой.
При перекрытии этого окна другим окном checkbox опять пропадает

Пока работает только локальная версия Гарант7. Установку следует запускать через winexp
Comment 1 Анатолий Лютин 2008-08-12 11:16:01 MSD
В общем ошибку заценил..

Такое ощущение, что msi эту кнопку рисует под клиентским окном, т.к. spy его в wine не видит, а в WIndows без проблем.

Стиль: 0x50032002
Comment 2 Анатолий Лютин 2008-08-12 16:52:28 MSD
Проблема похоже в static-е ( SS_BITMAP ), он перерисовывает и закрывает собой этот checkbox, очень похоже на проблему с 1с 7.7 ( окно "О программе", когда там текст зарисовывался ).
Comment 3 Илья Шпигорь 2008-12-18 14:26:31 MSK
Выложил патч.

Как писал Толя, проблема заключалась в bitmap static'e, который при отрисовке закрывал ранее нарисованный checkbox.

Решение состоит в том, чтобы после отрисовки bitmap static'a посылать WM_PAINT тем контролам, которые перекрываются этим static'ом.

Думаю, что решение, не требующее перебора окон, вряд ли существует. Дело в том, что bitmap static может рисоваться по WM_PAINT, посланными из приложения, поэтому отслеживать порядок отрисовки всех контролов окна бесполезно.
Comment 4 Денис Баранов 2008-12-18 19:39:09 MSK
С данным патчем ошибка не воспроизвелась.
Comment 5 Илья Шпигорь 2009-01-12 10:57:35 MSK
У текущего решения есть проблема - перестал работать установщик FineReader. Происходит постоянная перерисовка и приложение виснет.

Патч надо доработать.
Comment 6 Илья Шпигорь 2009-01-12 12:02:09 MSK
Проблема текущего решения, заключается в том, что если static находится поверх како-нибудь контрола-родителя, то из-за посылки ему WM_PAINT по отрисовки static'a получается зацикливание.
Comment 7 Илья Шпигорь 2009-01-12 12:20:14 MSK
Выложил дополнение к патчу - [2/2].

Добавлена проверка на класс контрола, который необходимо перерисовать. Класс должен быть Button.

Протестировать установку FineReader можно в бутылке fr/install.
Comment 8 Andrey Vusik 2009-01-30 16:52:30 MSK
40/17
С установкой FR проблемы не наблюдал
Comment 9 Илья Шпигорь 2009-09-21 14:04:05 MSD
При тестировании было замечено, что патчи на эту багу стали не нужны.

Думаю имеет смысл их откатить, т.к. они приводят к лишней перерисовке контролов.

Выложил 2 revert'а.

Необходимо протестировать, что бага не воспроизводится на багфиксе 1.0.11.
Comment 10 Andrey Vusik 2009-09-24 19:33:54 MSD
WINE@Etersoft 1.0 SQL 1.0.11-eter8.3/4

Not working!
Comment 11 Илья Шпигорь 2009-09-25 13:31:26 MSD
Выложил патч [TRY 2].

На самом деле, проблема в создании контролов msi диалога. Они перерисовываются в порядке обратном порядку создания. Т.е. если сначала создается Bitmap, а потом CheckBox, то они перерисовываются - CheckBox, затем Bitmap. Очевидно, что CheckBox в этом случае будет перекрываться Bitmap'ом.

Порядок создания этих контролов определяется результатом SQL запроса к msi пакету в функции msi_dialog_fill_controls. Если в этот запрос добавить упорядочивание по типу, то тогда Bitmap'ы будут всегда создаваться в последнюю очередь (после контролов PushButton, CheckBox, Text). В этом случае они наверняка не будут ничего перекрывать.

В windows порядок создания контролов отличается от wine'овского. Чтобы однозначно его установить надо написать тест.
Comment 12 Andrey Vusik 2010-12-10 18:24:22 MSK
Принято.