Bug 3344

Summary: Потеря X фокуса в не managed режиме в Gnome
Product: WINE@Etersoft Reporter: Илья Шпигорь <shpigor>
Component: Окна / фокус / перерисовкаAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P4 CC: baraka, kondratyuk, lav
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3040, 3305    

Description Илья Шпигорь 2009-01-21 13:43:33 MSK
В Gnome при не managed режиме после того, как окно имеющее X фокус (например MessageBox или всплывающее popup окно), становится невидимым или уничтожается приложение запущенное в wine теряет фокус ввода. 

В KDE с этим все впорядке. В не managed режиме тоже все нормально. 

Воспроизвести можно так:
- бутылка 1c77/1c77-27-OpenConf
- база "Зарплата+Кадры"
- Конфигуратор

Редактируем код какого-либо модуля, чтобы появилась подсказка. Выбираем какой-либо текст из подсказки. Текст вставляется, окно 1с теряет фокус.
Comment 1 Илья Шпигорь 2009-02-11 11:42:51 MSK
Выложил патч.

Проблема заключалась в том, что после передачи X-ового фокуса ввода окну, как только окно становилось не видимым или уничтожалось, Gnome передавал X фокус родителю этого окна (если запуск был из консоли то фокус уходил в нее). Поведение KDE в этом случае немного отличается - фокус родителю не передается и ошибки нет.

Проблема проявляется только в не managed режиме. В этом случае управление X фокусом осуществляет функция X11DRV_SetFocus.

Решение заключается в том, что как только приложение wine получило X фокус (в не managed режиме), все дальнейшие попытки его передать блокируются до тех пор, пока он остается у wine. На самом деле, если фокус оказывается у приложения wine, функций Windows API вполне достаточно для его передачи в пределах приложения и вмешательство X-ов не требуется.
Comment 2 Денис Баранов 2009-02-21 20:12:24 MSK
Принято.
eter42\eter18