Bug 2806

Summary: 1C 7.7+Wine неверная реализация модальности окон.
Product: WINE@Etersoft Reporter: Антон Азанов (Djelf) <aae>
Component: Окна / фокус / перерисовкаAssignee: Илья Шпигорь <shpigor>
Status: CLOSED LATER QA Contact:
Severity: normal    
Priority: P4 CC: DjSpiker, kondratyuk, lav, vostok
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3000    
Attachments: Тест открытия форм в обычном или модальном режиме в 1С

Description Антон Азанов (Djelf) 2008-11-02 14:41:31 MSK
Created attachment 859 [details]
Тест открытия форм в обычном или модальном режиме в 1С

wine@etersoft 1.0.8, 1.0.9; gnome, xfce4, без управления менеджером окон; 1c 7.7

Разбираясь с http://bugs.etersoft.ru/show_bug.cgi?id=2729 сделал тестовую обработку к 1С, которая запускает сама себя в обычном или монопольном режиме и выводит в каком режиме форма была запущена, что позволило определить различие в текущей реализации модальных окон.

В WinXP после открытия модальной формы любые формы начинают открываются модально, вне зависимости от режима в котором их вызвали, что позволяет сохранять логику в последовательном открытии форм (ООМОМОО->ООМММММ /О-обычная,М-модальная/).

В Wine это правило распространяется только на одну форму открытую после модальной, все последующие (даже модальные формы и служебные) открываются в обычном режиме, что позволяет нарушать логику в заполнении форм, в некоторых случаях игнорировать ошибки, вопросы и предупреждения 1С, выводить несколько предупреждений и вопросов и т.п. (ООМОМОО->ООММООО).
Comment 1 Илья Шпигорь 2008-12-01 14:57:34 MSK
Похоже что, после открытия второй модальной формы, все последующие создаются дочерними по отношению к первой. В результате, блокируется только переход на первую форму, а переключение между всеми остальными проходит.

Проблема в том, что родителя для модальной формы задает сама 1С и не совсем понятно как она это делает. Во всяком случае, wine только делает то что говорит ему 1C. Хотя возможно что 1С ориентируется на какие-нибудь параметры модальных окон, которые wine задает не так как windows.
Comment 2 Илья Шпигорь 2008-12-01 15:58:39 MSK
Странно, что 1с вызывает CreateDialogIndirectParamA для создания модальных окон. 

В MSDN говориться:
The CreateDialogIndirectParam function creates a modeless dialog box from a dialog box template in memory.

Т.е. эта функция, как раз, создает немодальное окно. Хотя, в Windows это окно не передает фокус, пока не будет уничтожено. Возможно, фокусом управляет сам 1с.
Comment 3 Илья Шпигорь 2008-12-03 13:21:53 MSK
В результате тестирования не в 1с, а на WinAPI выяснилось, что wine ведет себя так же как windows в следующих случаях:

Если модальное окно является owner'ом нескольких не модальных окон - переключение между ними возможно.

Если модальное окно является owner'ом нескольких модальных окон - переключение между ними возможно.

Если модальное окно является owner'ом не модального окона - переключение на окно-owner возможно.

Если модальное окно является owner'ом модального окона - переключение на окно-owner не возможно.
Comment 4 Илья Шпигорь 2008-12-03 13:54:54 MSK
В общем, возникает два вопроса:

   1. Почему 1С создает не модальные окна, называя их модальными (ф-ция  CreateDialogIndirectParamA)?
   2. Почему 1С задает одного и того же родителя всем "модальным окнам"?
Comment 5 Анатолий Лютин 2009-02-19 13:01:26 MSK
(In reply to comment #4)
> В общем, возникает два вопроса:
> 
>    1. Почему 1С создает не модальные окна,
> называя их модальными (ф-ция 
> CreateDialogIndirectParamA)?

Есть мысль, что это оптимизация - загрузить в память шаблоны (они слишком часто используются), создавать окно по шаблону из памяти и потом колдовать над стилями, чтобы оно было похоже на модальное. Для 1с 7.7 такое поведение может считаться нормальным.

>    2. Почему 1С задает одного и того же
> родителя всем "модальным окнам"?
> 

1. Возможно так делает MFC в MDI режиме, надо проверить.
2. Чтобы фокус гарантированно возвращался главному окну 1с (предположение).
Comment 6 Илья Шпигорь 2009-11-25 12:35:03 MSK
Решение проблемы пока откладываем. 

Если есть или появятся критические проблемы связанные с поведением модальных окон в стандартных конфигурациях, просьба написать здесь и переоткрыть багу. Желательно привести примеры.
Comment 7 Vitaly Lipatov 2014-09-11 18:43:51 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.