Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 3024 - 1С81: не активизируется конфигуратор   Make a simular bug
Summary: 1С81: не активизируется конфигуратор
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Окна / фокус / перерисовка (show other bugs)
Version: 1.0.9
Hardware: PC All
: P4 minor
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact:
URL:
Whiteboard:
Keywords:
: 102 (view as bug list)
Depends on: 3967
Blocks: 1217 3589 3614 3645 3910 7469
  Show dependency treegraph
 
In work:
Reported: 2008-11-26 21:37 MSK by Денис Баранов
Modified: 2011-07-21 16:04 MSK (History)
6 users (show)

See Also:
Заявки RT: 9026
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Денис Баранов 2008-11-26 21:37:05 MSK
Если в конфигураторе поставить точки останова и запустить отладку
, то при останове на точке должно появляться окно конфигуратора - но оно не активно и остается на заднем плане.
Comment 1 Константин Кондратюк 2008-11-27 13:30:20 MSK
#2758 - похоже?
Comment 2 Илья Шпигорь 2008-12-03 14:42:49 MSK
Мало того что окно не активно и на заднем плане, оно вообще не отвечает. 
Comment 3 Илья Шпигорь 2008-12-03 17:09:11 MSK
Иногда при срабатывании точки останова, возникает ситуация, очень похожая на багу #3048 (пункт 17 - конфигуратор висит).
Comment 4 Константин Кондратюк 2008-12-04 10:24:23 MSK
*** Bug 102 has been marked as a duplicate of this bug. ***
Comment 5 Илья Шпигорь 2008-12-04 17:16:10 MSK
Здесь опять придется решать проблему подъема окна на передний план в Gnome. Все очень похоже на ситуацию с #1837. 

В идеале все будет происходить так:
Происходит останов, срабатывает SetForeground для конфигуратора, срабатывает X11DRV_SetFocus для него же и все. Окно конфигуратора имеет фокус, но остается на заднем плане.

В KDE ситуация лучше. Если в настройках поведения окон установить "Управление фокусом" на "нет" - после передачи фокуса окно поднимется.
Comment 6 Vitaly Lipatov 2008-12-04 19:52:02 MSK
Если в KDE есть возможность улучшить поведение настройками окон,
то надо найти в каком они файле и поставлять свои настройки
вместе с wine (или ставить их при wine --update), чтобы улучшить ситуацию.
Comment 7 Анатолий Лютин 2008-12-10 15:19:23 MSK
(In reply to comment #5)
> Здесь опять придется решать проблему
> подъема окна на передний план в Gnome. Все
> очень похоже на ситуацию с #1837. 
> 
> В идеале все будет происходить так:
> Происходит останов, срабатывает SetForeground
> для конфигуратора, срабатывает X11DRV_SetFocus
> для него же и все. Окно конфигуратора имеет
> фокус, но остается на заднем плане.
> 
> В KDE ситуация лучше. Если в настройках
> поведения окон установить "Управление
> фокусом" на "нет" - после передачи фокуса
> окно поднимется.
> 

Лучше смотреть работу функции SetActiveWindow в /user32/focus.c, при вызове этой функции конфигуратор должен перейти на передний план и получить активность+фокус.
Comment 8 Илья Шпигорь 2009-02-20 15:03:12 MSK
Выложил серию патчей.

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

Механизм работы вытаскивания окон наверх стал следующий. При вызове X11DRV_SetFocus окно вытаскивается наверх (через WS_EX_TOPMOST и update_net_wm_states), при этом предыдущее topmost окно сбрасывается в нормальное состояние. Если вызывается SetForegroundWindow для окна потока, отличного от текущего, то WS_EX_TOPMOST текущего окна сбрасывается, чтобы окно другого потока смогло корректно оказаться на переднем плане.

>Лучше смотреть работу функции SetActiveWindow в
>/user32/focus.c, при вызове этой функции
>конфигуратор должен перейти на передний
>план и получить активность+фокус.

Все правильно, но, к сожалению, Gnome не вытаскивает окно на передний план при передачи X фокуса (эту особенность разработчики Gnome признают).
Comment 9 Анатолий Лютин 2009-02-20 16:21:20 MSK
(In reply to comment #8)
> Все правильно, но, к сожалению, Gnome не
> вытаскивает окно на передний план при
> передачи X фокуса (эту особенность
> разработчики Gnome признают).
> 

Ну хорошо, возможно это правильно, но аналог свойства "активность" из Windows под Gnome есть?
Comment 10 Илья Шпигорь 2009-02-22 16:04:07 MSK
> Ну хорошо, возможно это правильно, но
> аналог свойства "активность" из Windows под Gnome
> есть?

Есть X-овый атом _NET_ACTIVE_WINDOW. По идее, он должен отвечать за активность окна. Но почему-то в wine он не используется.
Comment 11 Анатолий Лютин 2009-02-24 14:48:55 MSK
(In reply to comment #10)
> 
> Есть X-овый атом _NET_ACTIVE_WINDOW. По идее, он
> должен отвечать за активность окна. Но
> почему-то в wine он не используется.
> 
Прекрасно, а как Gnome ведёт себя когда окно получает этот атом? И есть ли отличие в поведении KDE? Возможно так будет легче вытаскивать окно на передний план. В том смысле, что активному окну по умолчанию должен передаваться фокус. Есть шанс, что под Gnome так и будет, а так же окно будет поверх других окон. 

То что в wine это не используется, не вижу ничего странного, т.к. часть user32, которая отвечает за интерфейс написана по принципу "вроде ведёт себя так же как и в Win, ну и чёрт с ним". Это и объясняет ещё то, почему одни и те же функции то и дело кочуют из user32 в winex11.drv и обратно. Архитектура работы с окнами ещё не продумана и разработчики то и дело перекидывают функциональность то на X, то на Wine.
Comment 12 Илья Шпигорь 2009-03-13 11:52:37 MSK
Проверил работу Gnome с атомом NET_ACTIVE_WINDOW. Он корректно активизирует X-овое окно и передает ему фокус ввода, но не всегда его поднимает на передний план. Т.е. после активации окна, предыдущее активированное этим атомом остается поверх него (эта проблема проявляется в 1с8).
Полагаю, работа с NET_WM_STATE_ABOVE атомом будет надежнее, т.к. он определяет положение окна в стеке уровней окон:

http://standards.freedesktop.org/wm-spec/1.3/ar01s07.html#STACKINGORDER
Comment 13 Анатолий Лютин 2009-03-13 15:43:57 MSK
(In reply to comment #12)
> Проверил работу Gnome с атомом NET_ACTIVE_WINDOW. Он
> корректно активизирует X-овое окно и
> передает ему фокус ввода, но не всегда его
> поднимает на передний план.
...
> Полагаю, работа с NET_WM_STATE_ABOVE атомом будет
> надежнее, т.к. он определяет положение окна
> в стеке уровней окон:

Хммм. может быть лучше снимать атом с того окна, которое выше, чем пытаться заместить его более приоритетным? Хотя не факт, что так правильно делать..
Comment 14 Илья Шпигорь 2009-06-03 13:42:58 MSD
В ходе решения баги #3967 возникли некоторые изменения. Теперь чтобы при запуске wine работали патчи на подъем окон разных процессов, необходимо задавать переменную окружения - WINEENABLERAISE. 

Запуск программы будет выглядеть например так:

WINEENABLERAISE=1 wine 1cv8.exe
Comment 15 Денис Баранов 2009-07-29 17:21:28 MSD
> Запуск программы будет выглядеть например
> так:
> 
> WINEENABLERAISE=1 wine 1cv8.exe
> 

Принято.
WINE@Etersoft 1.0.11 eter4/eter2(In reply to comment #14)