Сборка 20070830. Меню в 1С 8.0 живёт своей жизнью. При переключении окна 1С на другое, оно остаётся на экране, его пункты активны и работают. Также при перемещении курсора на соседнюю позицию (в строке главного меню) меню закрывается. Для того, чтобы открыть пункт, нужно нажать ещё раз. В 1.0.7 такого не было.
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). Прикладываю в лист. Ошибку закрываю.
Благодаря Джулиарду на новых исходниках эта бага снова с нами.
Единсвенная ошибка что пока осталось - это мигание.
Вывод из-под управления - не вариант, т.к. отваливает хак на 150 багу. Конечно жаль, что у нас такие проблемы с обработкой окон x-овым драйвером.
Исправил по-другому хак к 150 ошибке (более корректно). Теперь можно вывести окна меню из-под управления. Во вторник всё проверю, пересмотрю патчи и закрою багу.
Обновился до новых исходников, меню в 1с 8.0/8.1 работает вполне сносно - никуда не пропадает, открываются все подпункты, ничего особо не мигает. Замечен только один баг - когда открываем второй подпункт - уходит активность из окна, хотя фокус остатаётся. Поэтому считаю, что багу можно закрыть. Все необходимые патчи в patches-list вроде приложил.