Summary: | Меню в 1С 8.0 | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Константин Кондратюк <kondratyuk> |
Component: | Графика GDI / DIB / GDIPLUS | Assignee: | Анатолий Лютин <vostok> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | normal | ||
Priority: | P5 | CC: | baraka, lav |
Version: | 1.0.8 | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 437, 150, 766, 777, 2808, 7468 |
Description
Константин Кондратюк
2007-08-31 15:05:20 MSD
Cинтезировал. В оригинальном Вайне такая же проблема. Проблема в том, что GetMenu() при переводе мышкой на соседнее меню возвращает не его дескриптор, а null. Нашёл основную проблему. Во-первых:когда отключено управление окнами менеджером, то всё работает. Во-вторых: главный глюк - когда нажимаешься на меню в 1с 8.0, то от главного окна уходит свойство активности и фокус, и поэтому меню не может найти соседнее. Из-за этого меню похоже и жило в 1.0.7 своей жизнью. А null возвращает и при запуске под 1.0.7. Значит в 1с реализована нестандартное поведение меню. Пока исправил так, чтобы при создании всплывающего окна (через create_whole_window) не вызвалась set_initial_wm_hints(). Теперь при переключении одного меню на другое всё нормально, но 1с-ка мигает как новогодняя ёлка, т.к. уходит статус activate. Проблема в том, меню в 1с 8.0 создаётяс отдельным окном, т.е. меню реализованно не средствами WinApi, а обрабатывается внутри 1с. Из-за этого и проблема с миганием - т.к. создаётся отдельное окно (когда кликаем на любую кнопку меню) wine передаёт управление этому окну оконному менеджеру из-за этого к нему уходит и фокус и активность, а должен уходить только фокус. Из-за этого и проблема с тем, что меню "живёт своей жизнью". Возможный вариант решения - запретить wine управлять такими окнами. Исправил проблему с переключением активности окна. Сейчас ситуация такая же как в 1.0.7n, правда я откатил не все изменения сделанные вайновцами, а только те строчки, что критичны для нас. Меню опять работает само по себе, надо будет детально разобраться и закрыть эту багу, главное то, что есть функциональность. Формирую пока патч. Предыдущая версия влияла на 1с7.0. Исправил. Ещё этот патч влияет на поведение меню в 1с.7.7 - начинает жить "своей" жизнью. Влияние оказывал не этот патч,а user32-focus-manage.c. Создал патч, который убирает проблему, которая была в 1.0.7n (winex11.drv-event-menu.patch). Прикладываю в лист. Ошибку закрываю. Влияние оказывал не этот патч,а user32-focus-manage.c. Создал патч, который убирает проблему, которая была в 1.0.7n (winex11.drv-event-menu.patch). Прикладываю в лист. Ошибку закрываю. Благодаря Джулиарду на новых исходниках эта бага снова с нами. Единсвенная ошибка что пока осталось - это мигание. Вывод из-под управления - не вариант, т.к. отваливает хак на 150 багу. Конечно жаль, что у нас такие проблемы с обработкой окон x-овым драйвером. Исправил по-другому хак к 150 ошибке (более корректно). Теперь можно вывести окна меню из-под управления. Во вторник всё проверю, пересмотрю патчи и закрою багу. Обновился до новых исходников, меню в 1с 8.0/8.1 работает вполне сносно - никуда не пропадает, открываются все подпункты, ничего особо не мигает. Замечен только один баг - когда открываем второй подпункт - уходит активность из окна, хотя фокус остатаётся. Поэтому считаю, что багу можно закрыть. Все необходимые патчи в patches-list вроде приложил. |