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

Отработанное время:
Продуктивное время:
Bug 3995 - Теряется изображение после смены рабочего стола   Make a simular bug
Summary: Теряется изображение после смены рабочего стола
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Окна / фокус / перерисовка (show other bugs)
Version: unspecified
Hardware: PC All
: P4 minor
Target Milestone: ---
Assignee: Константин Кондратюк
QA Contact: Andrey Vusik
URL:
Whiteboard:
Keywords:
Depends on: 3092 5157
Blocks: 5101 42
  Show dependency treegraph
 
In work:
Reported: 2009-06-02 17:16 MSD by Денис Баранов
Modified: 2011-09-16 10:31 MSK (History)
3 users (show)

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


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Денис Баранов 2009-06-02 17:16:23 MSD
Есть ряд очень полезных программ которые запускают базы 1с в
удобном виде. Но у всех этих программ под вайном есть одна общая
проблема - при смене рабочего стола изображение внутри окна
теряется и приходится закрывать программу и открывать заново.
Пример такой программы:
/var/ftp/pvt/Windows/Testing/RT/10420/1cstarter.zip
Бутылка: 
rt/10420

Проблема поддтвердилась. Грешил на compiz, но с metacity анологично.
Comment 1 Илья Шпигорь 2009-06-26 13:00:52 MSD
Проблема в дефолтных Delphi приложениях не проявляется. 

Очевидно ошибка связана с обработкой сообщения WM_PAINT приложением. Необходимо выяснить какие именно действия происходят при отрисовке. Отправил письмо автору Starter 1C с просьбой это прояснить.
Comment 2 Константин Кондратюк 2009-07-08 11:14:14 MSD
Ломающий перерисовку коммит в оригинальном 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
Comment 3 Илья Шпигорь 2009-07-10 10:24:44 MSD
Выложил группу патчей.

Как известно, 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 режиме.
Comment 4 Денис Баранов 2009-07-16 12:04:56 MSD
Принято.
WINE@Etersoft eter26/eter19
Comment 5 Виталий Перов 2010-04-29 18:25:34 MSD
Откатил патч:
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’
Comment 6 Константин Кондратюк 2011-09-12 18:33:23 MSK
Не воспроизводится.

Бутылка: 1c/starter
WINE@Etersoft 1.0 SQL 1.3.27/1.7.1-eter1.12/3
Comment 7 Andrey Vusik 2011-09-15 20:08:24 MSK
принято