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

Отработанное время:
Продуктивное время:
Bug 3092 - delphi apps minimize/restore   Make a simular bug
Summary: delphi apps minimize/restore
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Окна / фокус / перерисовка (show other bugs)
Version: 1.0.9
Hardware: PC Mandriva
: P3 major
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact:
URL:
Whiteboard:
Keywords:
: 1669 (view as bug list)
Depends on:
Blocks: 42 3995 5618
  Show dependency treegraph
 
In work:
Reported: 2008-12-08 19:44 MSK by alexander barakin
Modified: 2010-05-27 12:57 MSD (History)
7 users (show)

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


Attachments
скриншоты и вывод xprop (12.34 KB, application/x-gtar)
2010-11-18 03:58 MSK, alexander barakin
Details
тестовое приложение с исходниками (209.68 KB, application/x-gtar)
2010-11-18 03:58 MSK, alexander barakin
Details

Note You need to log in before you can comment on or make changes to this bug.
Description alexander barakin 2008-12-08 19:44:11 MSK
Created attachment 957 [details]
скриншоты и вывод xprop

после сворачивания/разворачивания окна:
1. пропадает кнопка minimize (сравните скриншоты 001.jpg и 002.jpg).
2. ровно по центру экрана появляется дополнительное окно (003.jpg).
3. если растянуть это дополнительное окно, то видно, что на нём кнопка minimize — присутствует (004.jpg).

программа после разворачивания становится полностью неработоспособной.
тестировавшиеся программы собраны в delphi7.

установлена mandriva:
$ cat /etc/release
Mandriva Linux release 2009.0 (Official) for i586

kde:
$ konqueror --version
Qt: 3.3.8b
KDE: 3.5.10
Konqueror: 3.5.10

wine:
$ rpm -qa|grep wine
wine-1.0.9-eter36mdv
libwine-1.0.9-eter36mdv

приложены скриншоты и вывод команды xprop для отображенных на скриншоте окон.
Comment 1 alexander barakin 2008-12-08 21:03:12 MSK
Created attachment 958 [details]
тестовое приложение с исходниками

тестовое приложение с исходниками.
Comment 2 Денис Баранов 2009-01-08 14:55:29 MSK
Ошибка подтвердилась на текущей сборке.
При чем при нажатии на кнопку появляется окно, но сворачивая и разворачивая такого же результата не удалось достигнуть, как с главным. Видимо окно особенное.

Бутылка: bugs/3092.
Comment 3 Vitaly Lipatov 2009-01-20 14:35:41 MSK
Повышаю приоритет, касается многих программ на Delphi.
Comment 4 Илья Шпигорь 2009-01-21 17:52:29 MSK
Этот же баг в багзиле winehq:

http://bugs.winehq.org/show_bug.cgi?id=15069
Comment 5 Илья Шпигорь 2009-01-22 17:54:46 MSK
Выложил патч.

Это решение Paul Romanyszyn - откатиться обратно до использования ShowWindow вместо посылки сообщения WM_SYSCOMMAND.

Проблема в том, что для delphi программ, помимо окон форм, существует окно приложения (TApplication). Это окно является owner'ом по отношению ко всем формам. Оно перехватывает WM_SYSCOMMAND и обрабатывает по своему. Как только это происходит - создается X окно для TApplication (это и есть дополнительное окно).

Можно было бы попробовать реализовать поведение TApplication как в windows, но KDE и Gnome ведут в этом случае себя немного по-разному.В KDE у окна с owner'ом нет кнопки minimize, а в Gnome эта кнопка есть. Не совсем понятно - это проблема KDE или wine.
Без этого патча в Gnome окно формы вообще не поднимается - только окно приложения.

Думаю, проще будет обойти перехват WM_SYSCOMMAND окном приложения TApplication.
Comment 6 Анатолий Лютин 2009-01-23 11:26:34 MSK
(In reply to comment #5)
> Выложил патч.
> 
> 
> Проблема в том, что для delphi программ, помимо
> окон форм, существует окно приложения
> (TApplication). Это окно является owner'ом по
> отношению ко всем формам. Оно
> перехватывает WM_SYSCOMMAND и обрабатывает по
> своему. Как только это происходит -
> создается X окно для TApplication (это и есть
> дополнительное окно).

Значит при создании дочерних окон посылается WM_SYSCOMMAND, надо пересмотреть тесты.
Замена WM_SYSCOMMAND на ShowWindow, по-моему не оправдана, так как совершает над окнами гораздо больше действий (проверка флагов, позиционирование, проверка видимости), чем реакция на  WM_SYSCOMMAND.

> В KDE у
> окна с owner'ом нет кнопки minimize, а в Gnome эта
> кнопка есть.

Gnome просто больше придерживается стандартов, чем KDE, насколько я знаю, и  поэтому когда wine по стандарту говорить оси "сделай кнопку", Gnome делает, а KDE имеет свой взгляд на это (поэтому, кстати, с KDE больше проблем, связанных с выставлением фокуса ввода).

> Не совсем понятно - это
> проблема KDE или wine.

С одной стороны KDE, с другой Wine. Но больше KDE.

> Без этого патча в Gnome окно формы вообще не
> поднимается - только окно приложения.

Логично.

> Думаю, проще будет обойти перехват WM_SYSCOMMAND
> окном приложения TApplication.

Потом эта бага всплывёт опять, когда придётся поддерживать какое-нибудь важное Delphi приложение, а из-за такого перехвата там не будет работать половина виджетов :)))

Comment 7 Илья Шпигорь 2009-01-26 10:15:18 MSK
*** Bug 1669 has been marked as a duplicate of this bug. ***
Comment 8 Andrey Vusik 2009-01-30 14:01:11 MSK
Сборка 40/17
Заявленной проблемы нет.
Comment 9 Виталий Перов 2010-05-27 12:57:46 MSD
Откатил патч:
commit d3d60abdb3ee1aa215177e863997f4fb5cd86f28
Author: Ilya Shpigor <shpigor@etersoft.ru>
Date:   Thu Jan 22 17:57:16 2009 +0300

    winex11.drv: Revert to using ShowWindow instead WM_SYSCOMMAND sending in handle_wm_state_notify (eterbug #3092)

Патч переделать не сложно, но думаю, что стоит сначала проверить оригинальную версию.
Том добавлено условие, при котором вместо
SendMessageW( data->hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0 );
вызывается 
ShowWindow( data->hwnd, SW_RESTORE );

Возможно это и есть корректное решение баги