Summary: | Теряется изображение после смены рабочего стола | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Денис Баранов <baraka> |
Component: | Окна / фокус / перерисовка | Assignee: | Константин Кондратюк <kondratyuk> |
Status: | CLOSED FIXED | QA Contact: | Andrey Vusik <night> |
Severity: | minor | ||
Priority: | P4 | CC: | kondratyuk, lav, vitperov |
Version: | unspecified | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All | ||
Whiteboard: | |||
Заявки RT: | 10420 | Связано с: | |
Дата напоминания: | |||
Bug Depends on: | 3092, 5157 | ||
Bug Blocks: | 42, 5101 |
Description
Денис Баранов
2009-06-02 17:16:23 MSD
Проблема в дефолтных Delphi приложениях не проявляется. Очевидно ошибка связана с обработкой сообщения WM_PAINT приложением. Необходимо выяснить какие именно действия происходят при отрисовке. Отправил письмо автору Starter 1C с просьбой это прояснить. Ломающий перерисовку коммит в оригинальном wine: 5785ee08d06db70d3e187cf31add2739b3a36b9e is first bad commit commit 5785ee08d06db70d3e187cf31add2739b3a36b9e Author: Alexandre Julliard <julliard@winehq.org> Date: Fri Feb 29 13:43:13 2008 +0100 winex11: Avoid accessing the internals of the window structure in the Map/UnmapNotify handlers. :040000 040000 2d868c84b12db5b1d781d4c12fccb435dab918b3 4fc6933ecbd26a7d0fa9ebfd3c9c8464862818b4 M dlls Выложил группу патчей. Как известно, Delphi приложения ведут себя при сворачивании очень хитро. У всех программ на Delphi есть окно класса TApplication (название по умолчанию). При запуске приложения - активируется одна из так называемых форм (окно класса TForm). На таскбаре появляется только эта форма. При сворачивании формы происходит несколько действий: 1) форма становится не видимой (перестает отображаться на таскбаре) 2) окно TApplication становится видимым и сворачивается (его как раз мы и видим на таскбаре вместо формы) После разворачивания окна все с точностью до наоборот: 1) TApplication становится не видимым 2) TForm снова показывается В результате этих манипуляций в wine TApplication остается видимым (см. багу #3092). При текущем решении этой проблемы (замены посылки WM_SYSCOMMAND на ShowWindow) изменются сообщения посылаемые TApplication и TForm (их становится меньше). Окно TApplication больше не становится видимым, но после сворачивания и разворачивания окна TForm в некоторых приложениях оно перестает перерисовываться. Решение заключается в откате патча на #3092 и хаке, который запрещает SetWindowPos для окон класса TApplication (этот класс может быть переименован, но во всех тестовых Delphi приложениях он есть) и блокирует попытки сделать невидимым окно TForm. Это приводит к тому, что TForm ведет себя как обычное виндовое окно, а TApplication вообще никогда не становится видимым. В не managed режиме этот хак ломает сворачивание, поэтому была добавлена функция X11DRV_IsWindowManaged - для проверки, находится ли окно в managed режиме. Принято. WINE@Etersoft eter26/eter19 Откатил патч: commit 987c657c359c40ef927b8ce879bff82ac765cd94 Author: Ilya Shpigor <shpigor@etersoft.ru> Date: Thu Jul 9 16:30:12 2009 +0400 user32: Don't hide the TForm windows on minimizing in Delphi applications (eterbug #3995) Проблема при компиляции: winpos.c: In function ‘SetWindowPos’: winpos.c:2063: error: ‘USER_DRIVER’ has no member named ‘pIsWindowManaged’ Не воспроизводится. Бутылка: 1c/starter WINE@Etersoft 1.0 SQL 1.3.27/1.7.1-eter1.12/3 принято |