При вызове диалога настроек (правая кнопка мыши -> свойства), если нажимать на кнопки клавиатуры (при этом не должно быть фокуса в edit-ах) и одновременно попробывать переключиться на друную вкладку - консоль вешается.
Посе совершенных действий получаем бесконечный цикл сообщений типа: ace:message:SPY_EnterMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE sent from self wp=00000041 lp=0034f3f0 trace:message:SPY_ExitMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE returned 00002040 trace:message:SPY_EnterMessage (0x10036) L"&Маленький" message [0100] WM_KEYDOWN dispatched wp=00000041 lp=001e0001 trace:message:SPY_ExitMessage (0x10036) L"&Маленький" message [0100] WM_KEYDOWN returned 00000000 trace:message:SPY_EnterMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE sent from self wp=00000061 lp=0034f3f0 trace:message:SPY_ExitMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE returned 00002040 trace:message:SPY_EnterMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x10036) L"&Маленький" message [0087] WM_GETDLGCODE returned 00002040 trace:message:SPY_EnterMessage (0x10036) L"&Маленький" message [000d] WM_GETTEXT sent from self wp=00000080 lp=0034f2a0 trace:message:SPY_EnterMessage (0x10036) DefWindowProc32: WM_GETTEXT [000d] wp=00000080 lp=0034f2a0 trace:message:SPY_ExitMessage (0x10036) DefWindowProc32: WM_GETTEXT [000d] returned 0000000a trace:message:SPY_ExitMessage (0x10036) L"&Маленький" message [000d] WM_GETTEXT returned 0000000a trace:message:SPY_EnterMessage (0x10038) L"&Средний" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x10038) L"&Средний" message [0087] WM_GETDLGCODE returned 00002040 trace:message:SPY_EnterMessage (0x10038) L"&Средний" message [000d] WM_GETTEXT sent from self wp=00000080 lp=0034f2a0 trace:message:SPY_EnterMessage (0x10038) DefWindowProc32: WM_GETTEXT [000d] wp=00000080 lp=0034f2a0 trace:message:SPY_ExitMessage (0x10038) DefWindowProc32: WM_GETTEXT [000d] returned 00000008 trace:message:SPY_ExitMessage (0x10038) L"&Средний" message [000d] WM_GETTEXT returned 00000008 trace:message:SPY_EnterMessage (0x1003a) L"&Большой" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x1003a) L"&Большой" message [0087] WM_GETDLGCODE returned 00002040 trace:message:SPY_EnterMessage (0x1003a) L"&Большой" message [000d] WM_GETTEXT sent from self wp=00000080 lp=0034f2a0 trace:message:SPY_EnterMessage (0x1003a) DefWindowProc32: WM_GETTEXT [000d] wp=00000080 lp=0034f2a0 trace:message:SPY_ExitMessage (0x1003a) DefWindowProc32: WM_GETTEXT [000d] returned 00000008 trace:message:SPY_ExitMessage (0x1003a) L"&Большой" message [000d] WM_GETTEXT returned 00000008 trace:message:SPY_EnterMessage (0x1003c) L"Управление" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x1003c) L"Управление" message [0087] WM_GETDLGCODE returned 00000100 trace:message:SPY_EnterMessage (0x1003c) L"Управление" message [000d] WM_GETTEXT sent from self wp=00000080 lp=0034f2a0 trace:message:SPY_EnterMessage (0x1003c) DefWindowProc32: WM_GETTEXT [000d] wp=00000080 lp=0034f2a0 trace:message:SPY_ExitMessage (0x1003c) DefWindowProc32: WM_GETTEXT [000d] returned 0000000a trace:message:SPY_ExitMessage (0x1003c) L"Управление" message [000d] WM_GETTEXT returned 0000000a trace:message:SPY_EnterMessage (0x1003e) L"Всплывающее мен" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x1003e) L"Всплывающее мен" message [0087] WM_GETDLGCODE returned 00000100 trace:message:SPY_EnterMessage (0x1003e) L"Всплывающее мен" message [000d] WM_GETTEXT sent from self wp=00000080 lp=0034f2a0 trace:message:SPY_EnterMessage (0x1003e) DefWindowProc32: WM_GETTEXT [000d] wp=00000080 lp=0034f2a0 trace:message:SPY_ExitMessage (0x1003e) DefWindowProc32: WM_GETTEXT [000d] returned 00000010 trace:message:SPY_ExitMessage (0x1003e) L"Всплывающее мен" message [000d] WM_GETTEXT returned 00000010 trace:message:SPY_EnterMessage (0x10040) L"&Сtrl" message [0087] WM_GETDLGCODE sent from self wp=00000000 lp=00000000 trace:message:SPY_ExitMessage (0x10040) L"&Сtrl" message [0087] WM_GETDLGCODE returned 00002000 trace:message:SPY_EnterMessage (0x10040) L"&Сtrl" message [000d] WM_GETTEXT sent from self wp=00
Проблема кроется в том, что к Tab-у в wineconsole начинает бесконечно приходить сообщение WM_GETDLGCODE.
В первом приближении зацикливается в : BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg ) case WM_KEYDOWN: dlgCode = SendMessageW( msg->hwnd, WM_GETDLGCODE, msg->wParam, (LPARAM)msg ); if (dlgCode & DLGC_WANTMESSAGE) break; switch(msg->wParam) { case VK_TAB:
Проблема в BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg ) При попадании в case WM_SYSCHAR при вызове DIALOG_IsAccelerator tab-у снова посылается сообщение GETDLGCODE и так до бесконечности.
Починил. Если у нас DLGC_WANTCHARS, то прерываем цикл. Т.к. если WM_GETDLGCODE будет послан tab - который находится в модальном диалоге, то будет зацикливание.
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.