Bug 3967

Summary: Окно 1с в wine@etersoft всегда на переднем плане
Product: WINE@Etersoft Reporter: Боренко Денис <denis>
Component: Окна / фокус / перерисовкаAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact: Денис Баранов <baraka>
Severity: normal    
Priority: P3 CC: kondratyuk, lav, shpigor
Version: 1.0.10   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3768, 3024, 3589, 7469    
Attachments: Пример обработки

Description Боренко Денис 2009-05-21 07:26:15 MSD
1С запускается нормально.
Запускаю длительную обработку. Через несколько секунд окно 1С становится always on top. Захожу в меню окна, снимаю галку и через несколько секунд галка опять возвращается и окно поднимается на передний план.
Замечено, что установка галки происходит в момент обновления содержимого окна. Галочка "Разрешить менеджеру окон управлять окнами Wine" в wincfg стоит.
Наблюдается и в compiz и в metacity.
Как показывает опрос -- случай не единичный:
http://unixforum.org/index.php?showtopic=93047
Система ubuntu 9.04 wine 21/15
Comment 1 Илья Шпигорь 2009-05-21 10:44:44 MSD
Версия 1с у Вас 7 и среда рабочего стола - Gnome?
Comment 2 Боренко Денис 2009-05-21 10:49:55 MSD
Да, все именно так.
Comment 3 Илья Шпигорь 2009-05-21 10:58:02 MSD
Не могли бы Вы прислать пример обработки в виде .ert файла, при которой проявляется данная проблема?
Comment 4 Боренко Денис 2009-05-21 11:40:10 MSD
Created attachment 1193 [details]
Пример обработки
Comment 5 Боренко Денис 2009-05-21 11:44:02 MSD
На локальной базе добиться не смог (возможно потому, что слишком быстро выполняется), по cifs наблюдается железно, можно просто смотреть в меню окна -- галка сама появляется и исчезает.
Обработка используется в бухгалтерии. Нужно выбрать длительный период и нажать кнопку "Книга покупок". Время обработки должно быть не менее минуты, а то можно не поймать эффект.
Пока экспериментировал заметил, что свойство окна не просто ставится, оно через 5-10 сек и снимается само.
Comment 6 Илья Шпигорь 2009-05-21 13:57:06 MSD
Вообще-то, то что wine пытается установить флаг always on top - это нормально. С помощью этого решается бага #3768, когда необходимо поднять на передний план окно другого процесса.

Не понятно почему этот флаг устанавливается при обработке. По идее, это должно происходит только при передачи фокуса X-овому окну. Снятие флага должно происходить при потере фокуса.
Comment 7 Боренко Денис 2009-05-21 14:07:53 MSD
(In reply to comment #6)
> Вообще-то, то что wine пытается установить
> флаг always on top - это нормально. С помощью
> этого решается бага #3768, когда необходимо
> поднять на передний план окно другого
> процесса.

А нельзя сделать ключ/переменную окружения отключающую выставление этого флага?
Приведенная бага -- одна из многих из чехарды с окнами. Просто ее мне удалось локализовать и повторить.
Есть еще куча всяких. Например при попытке переключиться мышью на окно лежащее за 1С фокус иногда фокус переходит, а 1С наверху. Пока по заголовку или меню нужного приложения не щелкнешь приложение наверх не поднимается.
Или вот когда печатаешь. Вылетает окно "Печатается" с кнопкой "Отменить" -- и всегда поднимает окно 1С наверх.
Вообще -- стало плохо. 
И фиг с ним с отладчиком и конфигуратором. В обычном режиме работать стало не удобно.

Comment 8 Константин Кондратюк 2009-05-21 14:13:14 MSD
(In reply to comment #7)
> И фиг с ним с отладчиком и конфигуратором. В
> обычном режиме работать стало не удобно.

Мне тоже кажется, что фокус в последнее время очень навязчиво работает, выдвигая окна приложения тогда, когда их совсем не ждёшь.
Comment 9 Денис Баранов 2009-05-22 18:54:08 MSD
(In reply to comment #7)
> Или вот когда печатаешь. Вылетает окно
> "Печатается" с кнопкой "Отменить" -- и всегда
> поднимает окно 1С наверх.
Делал долгую обработку, после завершения она выдала маленькое окошечко что завершилась, окошко на передний план поднялось, но самой 1С было не видно. Как только нажал ОК, то главное окно тоже поднялось.
Comment 10 Илья Шпигорь 2009-05-27 12:09:19 MSD
Удалось воспроизвести в бутылке похожую ситуацию:

1) бутылка 1c77/1c7727
2) открыть обработку C:\tmp\speedtest3.ert
3) "Сформировать" и переключится на другое X-овое окно

Результат - по окончании формирования отчета окно 1с поднимается на передний план.
Comment 11 Боренко Денис 2009-05-27 15:12:46 MSD
У меня наблюдается не только по окончанию обработки, но и в процессе. Причем, если включен visual bell видно, что окно мигает в момент подъема.
Хорошо наблюдать на сетевой базе, если в обработке идет интенсивное обращение к данным.
Comment 12 Илья Шпигорь 2009-06-03 10:34:57 MSD
Выложил патч.

Проблема заключается в том, что 1с в процессе обработки может передавать фокус между своими mdi и popup окнами. В результате X-овое окно приложение также получает фокус. Вероятно, именно по этой передаче и происходит постоянное поднятие окна приложения.

Решение заключается в добавлении флага, который взводится если окно Wine потеряло фокус и активно другое X-овое окно. Пока флаг взведен попытки Wine передать X-овый фокус своему окну и поднять его игнорируются. Флаг сбрасывается как только любое окно Wine получает фокус.
Comment 13 Боренко Денис 2009-06-03 11:01:17 MSD
> любое окно Wine получает фокус.

Мне кажется, плохое решение. Ибо также задолбало постоянное состязание запущеных 1с между собой. 
Может предусмотреть возможность отключения механизма подъема окон? Реально он нужен только в конфигураторе.
PS. Последнее время бага уже более чем достала...

Comment 14 Илья Шпигорь 2009-06-03 11:31:40 MSD
Хорошо. Тогда можно сделать так - по умолчанию этот механизм подъема отключен. Если кому-то он очень понадобится, его можно будет включить переменной окружения. 
Comment 15 Боренко Денис 2009-06-03 11:36:10 MSD
Шоколадно.
Comment 16 Илья Шпигорь 2009-06-03 13:39:54 MSD
Выложил TRY 2 патча.

Теперь чтобы включить механизм подъема окон необходимо задать переменную среды WINEENABLERAISE. Запуск программы будет выглядеть например так:

WINEENABLERAISE=1 wine 1cv7.exe
Comment 17 Денис Баранов 2010-04-15 10:19:10 MSD
Принято.
WINE@Etersoft 1.0.12 eter5/eter4