Bug 165

Summary: Потеря фокуса 1С 7.7 при закрытии модального окна
Product: WINE@Etersoft Reporter: Александр Пликус <pav>
Component: Окна / фокус / перерисовкаAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact: Vitaly Lipatov <lav>
Severity: normal    
Priority: P2 CC: andrey.chichak, baraka, ivan, kondratyuk, lav, leonid, vostok
Version: 1.0.3   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 492, 73, 101, 150, 166, 287, 760, 1916, 10708    
Attachments: тестовая база 1С для проверки работы фокуса

Description Александр Пликус 2006-06-22 14:00:04 MSD
 
Comment 1 Александр Пликус 2006-06-22 14:02:39 MSD
Created attachment 25 [details]
тестовая база 1С для проверки работы фокуса
Comment 2 Александр Пликус 2006-06-22 16:12:47 MSD
функция в 1С
ОткрытьФормуМодально();

или 
OpenFormModal ();
Comment 3 Vitaly Lipatov 2006-06-26 22:43:59 MSD
Похоже фокус остаётся на нажатой кнопке в модальном окне  и пропадает вместе с 
её удалением. 
Comment 4 Константин Петров 2006-07-27 12:49:31 MSD
поскольку модальное окошко имеет шапку не KDE, а WINE'а, я думаю, что проблема 
в реализации библиотеки mfc42.dll (mfc40.dll).
Comment 5 Vitaly Lipatov 2006-10-06 15:19:33 MSD
mfc40 никак не используется  
Comment 6 Vitaly Lipatov 2006-10-06 22:36:24 MSD
Написать человеку когда исправим.  
http://www.unixforum.org/lofiversion/index.php/t22209.html  
Comment 7 Константин Кондратюк 2006-12-13 16:16:19 MSK
Подтверждаю для 1.0.5
Comment 8 Анатолий Лютин 2007-03-17 12:24:08 MSK
Т.к. занимаюсь этим перевешиваю на себя.
Comment 9 Анатолий Лютин 2007-03-17 12:25:38 MSK
В конфигурации, которую предоставил Саша переодически окну возвращается фокус.
Буду сравнивать.
Comment 10 Анатолий Лютин 2007-04-07 17:34:53 MSD
Написал тест(MDI),который открывает такие же окна. Полностью синтезирует ошибку и найдена интересноая особенность: если окно не двигать, а сразу закрыть, то фокус вернётся, если его немного подвигать, то фокус в 95% случаев не возвращается).
Comment 11 Анатолий Лютин 2007-04-09 19:14:22 MSD
Засада, исправил так, что в моём тесте стабильно всё возвращается, а Сашином тесте  только окну родителю =(
Comment 12 Анатолий Лютин 2007-04-11 17:49:17 MSD
Принудительно возвращаю фокус окну-родителю и корневому окну. В данной конфигурации работает, правда иногда и Корневого окна полоска не перекрашивается (когда приобретает фокус), но фокус возвращается туда, куда надо - факт.
Закрываю. Патч в нашем cvs.
Comment 13 Синицын Иван 2007-04-13 17:32:41 MSD
подтверждаю, работает, фокус возвращается.
Comment 14 Leonid Shadevsky 2008-11-29 15:34:30 MSK
В сборке 36/14 на KDE 3.5 ошибка вновь воспроизводится
Comment 15 Илья Шпигорь 2008-12-01 10:03:39 MSK
*** Bug 73 has been marked as a duplicate of this bug. ***
Comment 16 Илья Шпигорь 2008-12-01 10:04:49 MSK
*** Bug 2938 has been marked as a duplicate of this bug. ***
Comment 17 Илья Шпигорь 2008-12-01 10:08:31 MSK
Похоже, баги #2938, #165, #73 заключаются в одной и той же проблеме - передаче X-ового фокуса не enabled окну. 

Для решения этой проблемы в 1с7 надо приложить патч из рассылки:

winex11.drv: Skip checking to window disabled for X set focus (eterbug #2938 #2845)
Comment 18 Vitaly Lipatov 2015-08-20 11:42:22 MSK
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;
 }