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
Похоже что, после открытия второй модальной формы, все последующие создаются дочерними по отношению к первой. В результате, блокируется только переход на первую форму, а переключение между всеми остальными проходит. Проблема в том, что родителя для модальной формы задает сама 1С и не совсем понятно как она это делает. Во всяком случае, wine только делает то что говорит ему 1C. Хотя возможно что 1С ориентируется на какие-нибудь параметры модальных окон, которые wine задает не так как windows. Странно, что 1с вызывает CreateDialogIndirectParamA для создания модальных окон. В MSDN говориться: The CreateDialogIndirectParam function creates a modeless dialog box from a dialog box template in memory. Т.е. эта функция, как раз, создает немодальное окно. Хотя, в Windows это окно не передает фокус, пока не будет уничтожено. Возможно, фокусом управляет сам 1с. В результате тестирования не в 1с, а на WinAPI выяснилось, что wine ведет себя так же как windows в следующих случаях: Если модальное окно является owner'ом нескольких не модальных окон - переключение между ними возможно. Если модальное окно является owner'ом нескольких модальных окон - переключение между ними возможно. Если модальное окно является owner'ом не модального окона - переключение на окно-owner возможно. Если модальное окно является owner'ом модального окона - переключение на окно-owner не возможно. В общем, возникает два вопроса: 1. Почему 1С создает не модальные окна, называя их модальными (ф-ция CreateDialogIndirectParamA)? 2. Почему 1С задает одного и того же родителя всем "модальным окнам"? (In reply to comment #4) > В общем, возникает два вопроса: > > 1. Почему 1С создает не модальные окна, > называя их модальными (ф-ция > CreateDialogIndirectParamA)? Есть мысль, что это оптимизация - загрузить в память шаблоны (они слишком часто используются), создавать окно по шаблону из памяти и потом колдовать над стилями, чтобы оно было похоже на модальное. Для 1с 7.7 такое поведение может считаться нормальным. > 2. Почему 1С задает одного и того же > родителя всем "модальным окнам"? > 1. Возможно так делает MFC в MDI режиме, надо проверить. 2. Чтобы фокус гарантированно возвращался главному окну 1с (предположение). Решение проблемы пока откладываем. Если есть или появятся критические проблемы связанные с поведением модальных окон в стандартных конфигурациях, просьба написать здесь и переоткрыть багу. Желательно привести примеры. Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять. |