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

Отработанное время:
Продуктивное время:
Bug 2806 - 1C 7.7+Wine неверная реализация модальности окон.   Make a simular bug
Summary: 1C 7.7+Wine неверная реализация модальности окон.
Status: CLOSED LATER
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Окна / фокус / перерисовка (show other bugs)
Version: 1.0.9
Hardware: PC Linux
: P4 normal
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 3000
  Show dependency treegraph
 
In work:
Reported: 2008-11-02 14:41 MSK by Антон Азанов (Djelf)
Modified: 2014-09-11 18:43 MSK (History)
4 users (show)

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


Attachments
Тест открытия форм в обычном или модальном режиме в 1С (58.50 KB, application/octet-stream)
2010-11-18 03:58 MSK, Антон Азанов (Djelf)
Details

Note You need to log in before you can comment on or make changes to this bug.
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
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.