Bug 478

Summary: Вешается wineconsole в графическом режиме
Product: WINE@Etersoft Reporter: Анатолий Лютин <vostok>
Component: ОбщееAssignee: Анатолий Лютин <vostok>
Status: CLOSED FIXED QA Contact:
Severity: enhancement    
Priority: P5 CC: lav, vostok
Version: 1.0.6   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 584    

Description Анатолий Лютин 2007-02-18 17:22:37 MSK
При вызове диалога настроек (правая кнопка мыши -> свойства), если нажимать на кнопки клавиатуры (при этом не должно быть фокуса в edit-ах) и одновременно  попробывать переключиться на друную вкладку - консоль вешается.
Comment 1 Анатолий Лютин 2007-08-23 11:28:41 MSD
Посе совершенных действий получаем бесконечный цикл сообщений типа:
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
Comment 2 Анатолий Лютин 2007-08-23 12:44:49 MSD
Проблема кроется в том, что к Tab-у в wineconsole начинает бесконечно приходить сообщение WM_GETDLGCODE.
Comment 3 Анатолий Лютин 2007-08-23 13:07:40 MSD
В первом приближении зацикливается в :
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:
Comment 4 Анатолий Лютин 2007-08-23 15:32:37 MSD
Проблема в BOOL WINAPI IsDialogMessageW( HWND hwndDlg, LPMSG msg )

При попадании в case WM_SYSCHAR при вызове DIALOG_IsAccelerator tab-у снова посылается сообщение GETDLGCODE и так до бесконечности.
Comment 5 Анатолий Лютин 2007-08-23 15:53:19 MSD
Починил. Если у нас DLGC_WANTCHARS, то прерываем цикл. Т.к. если WM_GETDLGCODE будет послан tab - который находится в модальном диалоге, то будет зацикливание.
Comment 6 Vitaly Lipatov 2014-09-11 18:50:52 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.