Created attachment 25 [details] тестовая база 1С для проверки работы фокуса
функция в 1С ОткрытьФормуМодально(); или OpenFormModal ();
Похоже фокус остаётся на нажатой кнопке в модальном окне и пропадает вместе с её удалением.
поскольку модальное окошко имеет шапку не KDE, а WINE'а, я думаю, что проблема в реализации библиотеки mfc42.dll (mfc40.dll).
mfc40 никак не используется
Написать человеку когда исправим. http://www.unixforum.org/lofiversion/index.php/t22209.html
Подтверждаю для 1.0.5
Т.к. занимаюсь этим перевешиваю на себя.
В конфигурации, которую предоставил Саша переодически окну возвращается фокус. Буду сравнивать.
Написал тест(MDI),который открывает такие же окна. Полностью синтезирует ошибку и найдена интересноая особенность: если окно не двигать, а сразу закрыть, то фокус вернётся, если его немного подвигать, то фокус в 95% случаев не возвращается).
Засада, исправил так, что в моём тесте стабильно всё возвращается, а Сашином тесте только окну родителю =(
Принудительно возвращаю фокус окну-родителю и корневому окну. В данной конфигурации работает, правда иногда и Корневого окна полоска не перекрашивается (когда приобретает фокус), но фокус возвращается туда, куда надо - факт. Закрываю. Патч в нашем cvs.
подтверждаю, работает, фокус возвращается.
В сборке 36/14 на KDE 3.5 ошибка вновь воспроизводится
*** Bug 73 has been marked as a duplicate of this bug. ***
*** Bug 2938 has been marked as a duplicate of this bug. ***
Похоже, баги #2938, #165, #73 заключаются в одной и той же проблеме - передаче X-ового фокуса не enabled окну. Для решения этой проблемы в 1с7 надо приложить патч из рассылки: winex11.drv: Skip checking to window disabled for X set focus (eterbug #2938 #2845)
commit ec7a545407eebfadf6a70d525958518555666917 Author: Ilya Shpigor <shpigor@etersoft.ru> Date: Thu Nov 27 10:16:26 2008 +0300 winex11.drv: Skip checking to window disabled for X set focus (eterbug #2938 #2845) diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index bc86414..ad825f9 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -465,12 +465,7 @@ static inline BOOL can_activate_window( HWND hwnd ) if (!(style & WS_VISIBLE)) return FALSE; if ((style & (WS_POPUP|WS_CHILD)) == WS_CHILD) return FALSE; if (hwnd == GetDesktopWindow()) return FALSE; - - LOADETER_FUNC(etersoft_1version); - if ( etersoft_1version && (etersoft_1version() == 8) ) - return TRUE; - else - return !(style & WS_DISABLED); + return TRUE; }