При выходе из бухгалтерской конфигурации открывается окно подтверждения "Вы действительно хотите выйти?" В Windows оно не реагирует на Esc, в WINE - ESC действует "OK".
Наверное проблемы лежат рядом.
Вот код на языке 1С, формирующий вопрос: Если Вопрос("Закончить работу с программой?", "Да+Нет", 60)="Нет" Тогда СтатусВозврата(0); Возврат; КонецЕсли;
Created attachment 4 [details] Тест для проверки неадекватности окошка.
Да, в WINE нажатие Esc (как и крестика на окне) формирует код возврата функции Вопрос такой: "2 или 'Отмена' ('Cancel'), если нажата кнопка Отмена;" А, почти всё понятно: В виндах это окошко имеет крестик (X) заблокированным, и соответственно на Esc не реагирует.
Created attachment 7 [details] Исправление общей ошибки для Диалоговых окон шсправление общей ошибки для Диалоговых окон: При отсутсвии стиля WS_SYSMENU окно не должно реагировать на кнопку Escape.
Created attachment 8 [details] Исправление ошибки для MessageBox Диалоги MessageBox, в которых не используется кнопка Cancel (за исключением окна MB_OK) должны создаваться без флага WS_SYSMENU.
Зависимости от ошибки #34 нет.
Проверить соответствие кнопок на окне с оригиналом, исправить dialog_window1.patch
Проблема осталась в W@E 1.0.5 К сожалению, данное решение портит другие окна. Надо смотреть пристальнее.
Created attachment 81 [details] Отрубаем esc для окон где нет "Крестика"
Created attachment 82 [details] Снимаем "Крестик" с окон у которых в windows "Крестик" заблокирован
Теперь все вроде работает корректно. Нужны тесты.
Проблем вроде нет, но общее рассуждение такое: нельзя отключать реакцию на нажатие Esc (в любом случае он должен вызывать событие, потому на него может быть повешено любое действие). Другое дело что окно, которое не должно это делать, не должно реагировать на IDC_CANCEL. Проблема, описанная в баге 71, может вылезти непредсказуемо в каком-то месте.
Например, если в 1С создать документ, а потом нажать Esc, то откроется окно подтверждения. И в нём Esc уже не работает. А должен.
Пока не буду прикладывать исправление для этой баги. Сперва надо разобраться со всеми диалогами и в правильном месте сделать исправление. При таком важном исправлении нужно проверять _все_ диалоги. Да, и пора осваивать встроенную систему тестов в WINE.
Новый патч готов. Название:user32-msgbox-cross.patch