Created attachment 830 [details] Скриншот В 1с77 при загрузке базы если открыть выбор пользователя, а затем перетащить окно авторизации - вкладка выбора остаётся на месте.
Проверял 2 раза локально и в бутылке (через нх)
В винде после перетаскивания эта вкладка пропадает.
Проблема проявляется не только в окне авторизации, но и в других, которые имеют выпадающее окно выбора.
*** Bug 2651 has been marked as a duplicate of this bug. ***
Выложил патч. Получилось несколько косвенное решение: При нажатии на caption X-ового окна DefWinProc ловит сообщение WM_CANCELMODE, в котором происходит проверка, есть ли среди видимых окно класса "ComboLBox" (выпадающий список). Если есть, то происходит сброс фокуса с возвратом его текущему окну. В результате такого переключения фокуса, выпадающий список становится невидимым.
Попробую найти более оптимальное решение.
Тут наверное лучше оперировать не с фокусом, а с захватом (Capture)
Выложил патч. Следует заметить, что бага проявляется не только в 1с, но и в других приложениях (например, в Компасе). Новое решение заклячается в следующем: При нажатии на caption X-ового окна, вызывается ф-ция X11DRV_FocusOut (которая и посылает сообщение WM_CANCELMODE). В эту ф-цию добавлена проверка - есть среди созданных окно класса "ComboLBox". Если есть, ему посылаются сообщения WM_LBUTTONDOWN и WM_LBUTTONUP с текущими координатами. В результате контрол понимает, что нажали не по нему и сворачивается. К сожалению, не получилось использовать capture, как советовал Толя. Т.к. иногда (например в Компасе) выпадающий список не захватывает мышь, т.е. GetCapture возвращает NULL. К тому же, выпадающий список никак не реагирует на изменение capture.
(In reply to comment #8) > Выложил патч. > > Следует заметить, что бага проявляется не > только в 1с, но и в других приложениях > (например, в Компасе). Тогда почему в этом патче добавлена проверка на etersoft_1version? Быть может, не проверять?
(In reply to comment #8) > Выложил патч. > > Следует заметить, что бага проявляется не > только в 1с, но и в других приложениях > (например, в Компасе). > > Новое решение заклячается в следующем: > > При нажатии на caption X-ового окна, вызывается > ф-ция X11DRV_FocusOut (которая и посылает > сообщение WM_CANCELMODE). В эту ф-цию добавлена > проверка - есть среди созданных окно класса > "ComboLBox". Если есть, ему посылаются сообщения > WM_LBUTTONDOWN и WM_LBUTTONUP с текущими координатами. В > результате контрол понимает, что нажали не > по нему и сворачивается. > > К сожалению, не получилось использовать > capture, как советовал Толя. Т.к. иногда > (например в Компасе) выпадающий список не > захватывает мышь, т.е. GetCapture возвращает NULL. > К тому же, выпадающий список никак не > реагирует на изменение capture. > Хм, а msg тесты на такое поведение есть? Может просмотрев их получится сделать нормально? Как я понимаю проблема только в etersoft сборке?
(In reply to comment #8) > К сожалению, не получилось использовать > capture, как советовал Толя. Т.к. иногда > (например в Компасе) выпадающий список не > захватывает мышь, т.е. GetCapture возвращает NULL. > К тому же, выпадающий список никак не > реагирует на изменение capture. > Да, наверное это не поможет. Просто захват часто используют контролы, которые сделаны в виде выпадающего списка (например календарь, самописные контролы, VCL)
Привил конфликты, вызванные данным патчем. Немного изменился файл winex11.drv/event.c Надо на всякий случай проверить не появилась ли бага.
(In reply to comment #12) > Привил конфликты, вызванные данным патчем. > Немного изменился файл winex11.drv/event.c > Надо на всякий случай проверить не > появилась ли бага. > Проблемы нет. 1.0.12-eter2/1
Прошу прощения, забыл сказать, что изменения касаются только eterhack, и в 1.0.12 их не будет никогда. Надо проверять либо на текущей версии eterhack либо ждать сборки 1.0.13
1.7.0-eter2/4 Проблемы нет ни в gnome ни в kde