View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001832 | Far Manager | Plugins API | public | 2011-07-10 23:55 | 2015-08-09 14:26 |
Reporter | Maximus | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | assigned | Resolution | reopened | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001832: Проблема FarNameToInputRecord / FarInputRecordToName | ||||
Description | Результат функций не соответствует друг-другу. "MsWheelUp" -> INPUT_RECORD -> "Break" | ||||
Steps To Reproduce | { INPUT_RECORD r = {}; LPCWSTR pszKey = L"MsWheelUp"; BOOL b1 = FarNameToInputRecord(pszKey, &r); wchar_t szDbg[128] = {}; size_t nDbgSize = FarInputRecordToName(&r, szDbg, ARRAYSIZE(szDbg)); int nCmp = lstrcmpi(pszKey, szDbg); _ASSERTE(b1 && nDbgSize && (nCmp==0)); } | ||||
Tags | No tags attached. | ||||
Build | 2241 | ||||
|
"RAltF" -> INPUT_RECORD -> "AltF" "RCtrlR" -> INPUT_RECORD -> "CtrlR" |
|
Ндя... с MsWheelUp (и еже с ним) прикольно получается. особенно если учесть, что MsWheelUp это мышиное событие, а FarNameToInputRecord все гонит в KEY_EVENT :-) |
|
проверь: http://skirda-file.googlecode.com/files/mantis%230001832.7z |
|
Хм, стало немного лучше. Похоже, FarNameToInputRecord теперь отрабатывает правильно. Но! Опять проверяя пару FarNameToInputRecord ==> FarInputRecordToName Получаем следующее "MsWheelUp" ==> "" (\x01) "RAltF" ==> "AltF" "RAltBS" ==> "AltBS" "RCtrlR" ==> "CtrlR" "CtrlBreak" ==> "Break" Исходники фара пока не патчил, это на собранном бинарнике из mantis#0001832.7z |
|
> Опять проверяя пару FarNameToInputRecord ==> FarInputRecordToName приаттач сюда "готовую проверялку"... |
|
|
|
Keyboard.110731.diff (14,947 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 6491) +++ keyboard.cpp (working copy) @@ -504,10 +504,15 @@ Rec->Event.KeyEvent.wVirtualScanCode = MapVirtualKey(Rec->Event.KeyEvent.wVirtualKeyCode,MAPVK_VK_TO_VSC); //BUGBUG - Rec->Event.KeyEvent.uChar.UnicodeChar=MapVirtualKey(Rec->Event.KeyEvent.wVirtualKeyCode,MAPVK_VK_TO_CHAR);; + Rec->Event.KeyEvent.uChar.UnicodeChar=MapVirtualKey(Rec->Event.KeyEvent.wVirtualKeyCode,MAPVK_VK_TO_CHAR); //BUGBUG - Rec->Event.KeyEvent.dwControlKeyState=(dwControlState&PKF_SHIFT?SHIFT_PRESSED:0)|(dwControlState&PKF_ALT?LEFT_ALT_PRESSED:0)|(dwControlState&PKF_CONTROL?LEFT_CTRL_PRESSED:0); + Rec->Event.KeyEvent.dwControlKeyState= + (dwControlState&PKF_SHIFT?SHIFT_PRESSED:0)| + (dwControlState&PKF_ALT?LEFT_ALT_PRESSED:0)| + (dwControlState&PKF_RALT?RIGHT_ALT_PRESSED:0)| + (dwControlState&PKF_RCONTROL?RIGHT_CTRL_PRESSED:0)| + (dwControlState&PKF_CONTROL?LEFT_CTRL_PRESSED:0); } } @@ -1946,13 +1951,19 @@ int TranslateKeyToVK(int Key,int &VirtKey,int &ControlState,INPUT_RECORD *Rec) { - DWORD FKey =Key&0x0003FFFF; - DWORD FShift=Key&0x7F000000; // ������ ��� ���������� � ����� ���! + WORD EventType=KEY_EVENT; + + DWORD FKey =Key&KEY_END_SKEY; + DWORD FShift=Key&KEY_CTRLMASK; + VirtKey=0; - ControlState=(FShift&KEY_SHIFT?PKF_SHIFT:0)| - (FShift&KEY_ALT?PKF_ALT:0)| - (FShift&KEY_CTRL?PKF_CONTROL:0); + ControlState=(FShift&KEY_SHIFT?PKF_SHIFT:0)| + (FShift&KEY_ALT?PKF_ALT:0)| + (FShift&KEY_RALT?PKF_RALT:0)| + (FShift&KEY_RCTRL?PKF_RCONTROL:0)| + (FShift&KEY_CTRL?PKF_CONTROL:0); + bool KeyInTable=false; size_t i; for (i=0; i < ARRAYSIZE(Table_KeyToVK); i++) @@ -1967,8 +1978,11 @@ if (!KeyInTable) { - if ((FKey>='0' && FKey<='9') || (FKey>='A' && FKey<='Z')) + // TODO: KEY_ALTDIGIT + if ((FKey>=L'0' && FKey<=L'9') || (FKey>=L'A' && FKey<=L'Z')) VirtKey=FKey; + //else if (FKey > KEY_VK_0xFF_BEGIN && FKey < KEY_VK_0xFF_END) + // VirtKey=FKey-KEY_FKEY_BEGIN; else if (FKey > KEY_FKEY_BEGIN && FKey < KEY_END_FKEY) VirtKey=FKey-KEY_FKEY_BEGIN; else if (FKey && FKey < WCHAR_MAX) @@ -1984,34 +1998,129 @@ } } else - VirtKey=FKey; + { + VirtKey=FKey; + switch (FKey) + { + case KEY_MSWHEEL_UP: + case KEY_MSWHEEL_DOWN: + case KEY_MSWHEEL_LEFT: + case KEY_MSWHEEL_RIGHT: + case KEY_MSLCLICK: + case KEY_MSRCLICK: + case KEY_MSM1CLICK: + case KEY_MSM2CLICK: + case KEY_MSM3CLICK: + EventType=MOUSE_EVENT; + break; + } + } } - if (Rec && VirtKey) + /* TODO: + KEY_CTRLALTSHIFTPRESS + KEY_CTRLALTSHIFTRELEASE + KEY_RCTRLALTSHIFTPRESS + KEY_RCTRLALTSHIFTRELEASE + */ + + + if (Rec) { - Rec->EventType=KEY_EVENT; - Rec->Event.KeyEvent.bKeyDown=1; - Rec->Event.KeyEvent.wRepeatCount=1; - Rec->Event.KeyEvent.wVirtualKeyCode=VirtKey; - Rec->Event.KeyEvent.wVirtualScanCode = MapVirtualKey(Rec->Event.KeyEvent.wVirtualKeyCode,MAPVK_VK_TO_VSC); + Rec->EventType=EventType; - Rec->Event.KeyEvent.uChar.UnicodeChar=Key>WCHAR_MAX?0:Key; + switch (EventType) + { + case KEY_EVENT: + { + if (VirtKey) + { + Rec->Event.KeyEvent.bKeyDown=1; + Rec->Event.KeyEvent.wRepeatCount=1; + Rec->Event.KeyEvent.wVirtualKeyCode=VirtKey; + Rec->Event.KeyEvent.wVirtualScanCode = MapVirtualKey(Rec->Event.KeyEvent.wVirtualKeyCode,MAPVK_VK_TO_VSC); - // ���� ����� � Shift-������� ������, ������ �� ControlState - Rec->Event.KeyEvent.dwControlKeyState= - (FShift&KEY_SHIFT?SHIFT_PRESSED:0)| - (FShift&KEY_ALT?LEFT_ALT_PRESSED:0)| - (FShift&KEY_CTRL?LEFT_CTRL_PRESSED:0)| - (FShift&KEY_RALT?RIGHT_ALT_PRESSED:0)| - (FShift&KEY_RCTRL?RIGHT_CTRL_PRESSED:0); + Rec->Event.KeyEvent.uChar.UnicodeChar=Key>WCHAR_MAX?0:Key; - DWORD ExtKey[]={KEY_PGUP,KEY_PGDN,KEY_END,KEY_HOME,KEY_LEFT,KEY_UP,KEY_RIGHT,KEY_DOWN,KEY_INS,KEY_DEL,KEY_NUMENTER}; - for (i=0; i < ARRAYSIZE(ExtKey); i++) - if(FKey == ExtKey[i]) + // ���� ����� � Shift-������� ������, ������ �� ControlState + Rec->Event.KeyEvent.dwControlKeyState= + (FShift&KEY_SHIFT?SHIFT_PRESSED:0)| + (FShift&KEY_ALT?LEFT_ALT_PRESSED:0)| + (FShift&KEY_CTRL?LEFT_CTRL_PRESSED:0)| + (FShift&KEY_RALT?RIGHT_ALT_PRESSED:0)| + (FShift&KEY_RCTRL?RIGHT_CTRL_PRESSED:0); + + DWORD ExtKey[]={KEY_PGUP,KEY_PGDN,KEY_END,KEY_HOME,KEY_LEFT,KEY_UP,KEY_RIGHT,KEY_DOWN,KEY_INS,KEY_DEL,KEY_NUMENTER}; + for (i=0; i < ARRAYSIZE(ExtKey); i++) + if(FKey == ExtKey[i]) + { + Rec->Event.KeyEvent.dwControlKeyState|=ENHANCED_KEY; + break; + } + } + break; + } + + case MOUSE_EVENT: { - Rec->Event.KeyEvent.dwControlKeyState|=ENHANCED_KEY; + DWORD ButtonState=0; + DWORD EventFlags=0; + + switch (FKey) + { + case KEY_MSWHEEL_UP: + ButtonState=MAKELONG(0,120); + EventFlags|=MOUSE_WHEELED; + break; + case KEY_MSWHEEL_DOWN: + ButtonState=MAKELONG(0,(WORD)(short)-120); + EventFlags|=MOUSE_WHEELED; + break; + case KEY_MSWHEEL_RIGHT: + ButtonState=MAKELONG(0,120); + EventFlags|=MOUSE_HWHEELED; + break; + case KEY_MSWHEEL_LEFT: + ButtonState=MAKELONG(0,(WORD)(short)-120); + EventFlags|=MOUSE_HWHEELED; + break; + + case KEY_MSLCLICK: + ButtonState=FROM_LEFT_1ST_BUTTON_PRESSED; + break; + case KEY_MSRCLICK: + ButtonState=RIGHTMOST_BUTTON_PRESSED; + break; + case KEY_MSM1CLICK: + ButtonState=FROM_LEFT_2ND_BUTTON_PRESSED; + break; + case KEY_MSM2CLICK: + ButtonState=FROM_LEFT_3RD_BUTTON_PRESSED; + break; + case KEY_MSM3CLICK: + ButtonState=FROM_LEFT_4TH_BUTTON_PRESSED; + break; + } + + Rec->Event.MouseEvent.dwButtonState=ButtonState; + Rec->Event.MouseEvent.dwEventFlags=EventFlags; + Rec->Event.MouseEvent.dwControlKeyState= + (FShift&KEY_SHIFT?SHIFT_PRESSED:0)| + (FShift&KEY_ALT?LEFT_ALT_PRESSED:0)| + (FShift&KEY_CTRL?LEFT_CTRL_PRESSED:0)| + (FShift&KEY_RALT?RIGHT_ALT_PRESSED:0)| + (FShift&KEY_RCTRL?RIGHT_CTRL_PRESSED:0); + Rec->Event.MouseEvent.dwMousePosition.X=IntKeyState.MouseX; + Rec->Event.MouseEvent.dwMousePosition.Y=IntKeyState.MouseY; break; } + case WINDOW_BUFFER_SIZE_EVENT: + break; + case MENU_EVENT: + break; + case FOCUS_EVENT: + break; + } } return VirtKey; @@ -2110,7 +2219,7 @@ { _SVS(CleverSysLog Clev(L"CalcKeyCode")); _SVS(SysLog(L"CalcKeyCode -> %s| RealKey=%d *NotMacros=%d",_INPUT_RECORD_Dump(rec),RealKey,(NotMacros?*NotMacros:0))); - UINT CtrlState=rec->Event.KeyEvent.dwControlKeyState; + UINT CtrlState=(rec->EventType==MOUSE_EVENT)?rec->Event.MouseEvent.dwControlKeyState:rec->Event.KeyEvent.dwControlKeyState; UINT ScanCode=rec->Event.KeyEvent.wVirtualScanCode; UINT KeyCode=rec->Event.KeyEvent.wVirtualKeyCode; WCHAR Char=rec->Event.KeyEvent.uChar.UnicodeChar; @@ -2121,7 +2230,7 @@ // CtrlState&=~0x80000000; - if (!(rec->EventType==KEY_EVENT || rec->EventType == FARMACRO_KEY_EVENT)) + if (!(rec->EventType==KEY_EVENT || rec->EventType == FARMACRO_KEY_EVENT || rec->EventType == MOUSE_EVENT)) return(KEY_NONE); if (!RealKey) @@ -2134,8 +2243,59 @@ IntKeyState.RightShiftPressed=(CtrlState & SHIFT_PRESSED); } - DWORD Modif=(IntKeyState.CtrlPressed?KEY_CTRL:0)|(IntKeyState.AltPressed?KEY_ALT:0)|(IntKeyState.ShiftPressed?KEY_SHIFT:0); + DWORD Modif; + if (IntKeyState.CtrlPressed && !IntKeyState.AltPressed && !IntKeyState.ShiftPressed) + Modif=(IntKeyState.RightCtrlPressed?KEY_RCTRL:KEY_CTRL); + else if (!IntKeyState.CtrlPressed && IntKeyState.AltPressed && !IntKeyState.ShiftPressed) + Modif=(IntKeyState.RightAltPressed?KEY_RALT:KEY_ALT); + else if (!IntKeyState.CtrlPressed && !IntKeyState.AltPressed && IntKeyState.ShiftPressed) + Modif=KEY_SHIFT; + else + Modif=(IntKeyState.CtrlPressed?KEY_CTRL:0)|(IntKeyState.AltPressed?KEY_ALT:0)|(IntKeyState.ShiftPressed?KEY_SHIFT:0); + DWORD ModifAlt=(IntKeyState.RightAltPressed?KEY_RALT:(IntKeyState.AltPressed?KEY_ALT:0)); + DWORD ModifCtrl=(IntKeyState.RightCtrlPressed?KEY_RCTRL:(IntKeyState.CtrlPressed?KEY_CTRL:0)); + if (rec->EventType==MOUSE_EVENT) + { + if (!(rec->Event.MouseEvent.dwEventFlags==MOUSE_WHEELED || rec->Event.MouseEvent.dwEventFlags==MOUSE_HWHEELED || rec->Event.MouseEvent.dwEventFlags==0)) + { + return(KEY_NONE); + } + + if (rec->Event.MouseEvent.dwEventFlags==MOUSE_WHEELED) + { + if (((short)(HIWORD(rec->Event.MouseEvent.dwButtonState))) > 0) + return(Modif|KEY_MSWHEEL_UP); + else if (((short)(HIWORD(rec->Event.MouseEvent.dwButtonState))) < 0) + return(Modif|KEY_MSWHEEL_DOWN); + } + else if (rec->Event.MouseEvent.dwEventFlags==MOUSE_HWHEELED) + { + if (((short)(HIWORD(rec->Event.MouseEvent.dwButtonState))) > 0) + return(Modif|KEY_MSWHEEL_RIGHT); + else if (((short)(HIWORD(rec->Event.MouseEvent.dwButtonState))) < 0) + return(Modif|KEY_MSWHEEL_LEFT); + } + else if (rec->Event.MouseEvent.dwEventFlags==0) + { + switch (rec->Event.MouseEvent.dwButtonState) + { + case FROM_LEFT_1ST_BUTTON_PRESSED: + return(Modif|KEY_MSLCLICK); + case RIGHTMOST_BUTTON_PRESSED: + return(Modif|KEY_MSRCLICK); + case FROM_LEFT_2ND_BUTTON_PRESSED: + return(Modif|KEY_MSM1CLICK); + case FROM_LEFT_3RD_BUTTON_PRESSED: + return(Modif|KEY_MSM2CLICK); + case FROM_LEFT_4TH_BUTTON_PRESSED: + return(Modif|KEY_MSM3CLICK); + } + } + + return(KEY_NONE); + } + if (rec->Event.KeyEvent.wVirtualKeyCode >= 0xFF && RealKey) { //VK_?=0x00FF, Scan=0x0013 uChar=[U=' ' (0x0000): A=' ' (0x00)] Ctrl=0x00000120 (casac - EcNs) @@ -2925,7 +3085,7 @@ else if (KeyCode == VK_CANCEL && IntKeyState.CtrlPressed && !IntKeyState.AltPressed && !IntKeyState.ShiftPressed) { CtrlObject->Macro.SendDropProcess(); - return KEY_BREAK; + return(ModifCtrl|KEY_BREAK); } /* ------------------------------------------------------------- */ @@ -2938,52 +3098,52 @@ return(KEY_CTRL0+KeyCode-'0'); if (KeyCode>='A' && KeyCode<='Z') - return(KEY_CTRL+KeyCode); + return(ModifCtrl+KeyCode); switch (KeyCode) { case VK_OEM_COMMA: - return(KEY_CTRLCOMMA); + return(ModifCtrl|KEY_COMMA); case VK_OEM_PERIOD: return(KEY_CTRLDOT); case VK_OEM_2: - return(KEY_CTRLSLASH); + return(ModifCtrl|KEY_SLASH); case VK_OEM_4: - return(KEY_CTRLBRACKET); + return(ModifCtrl|KEY_BRACKET); case VK_OEM_5: - return(KEY_CTRLBACKSLASH); + return(KEY_CTRLBACKSLASH); //BUGBUG: �� ���� ModifCtrl ������, ���� �� ������� ����� ��������� Ctrl\ ... case VK_OEM_6: - return(KEY_CTRLBACKBRACKET); + return(ModifCtrl|KEY_BACKBRACKET); case VK_OEM_7: - return(KEY_CTRL+'\''); // KEY_QUOTE + return(ModifCtrl+'\''); // KEY_QUOTE case VK_MULTIPLY: - return(KEY_CTRL|KEY_MULTIPLY); + return(ModifCtrl|KEY_MULTIPLY); case VK_DIVIDE: - return(KEY_CTRL|KEY_DIVIDE); + return(ModifCtrl|KEY_DIVIDE); case VK_PAUSE: if (CtrlState&ENHANCED_KEY) - return KEY_CTRL|KEY_NUMLOCK; + return ModifCtrl|KEY_NUMLOCK; CtrlObject->Macro.SendDropProcess(); return KEY_BREAK; case VK_SLEEP: - return KEY_CTRL|KEY_STANDBY; + return ModifCtrl|KEY_STANDBY; case VK_SNAPSHOT: - return KEY_CTRL|KEY_PRNTSCRN; + return ModifCtrl|KEY_PRNTSCRN; case VK_OEM_102: // <> \| - return KEY_CTRL|KEY_BACKSLASH; + return ModifCtrl|KEY_BACKSLASH; } if (Opt.ShiftsKeyRules) //??? switch (KeyCode) { case VK_OEM_3: - return(KEY_CTRL+'`'); + return(ModifCtrl+'`'); case VK_OEM_MINUS: - return(KEY_CTRL+'-'); + return(ModifCtrl+'-'); case VK_OEM_PLUS: - return(KEY_CTRL+'='); + return(ModifCtrl+'='); case VK_OEM_1: - return(KEY_CTRL+KEY_SEMICOLON); + return(ModifCtrl+KEY_SEMICOLON); } if (KeyCode) @@ -2999,7 +3159,7 @@ if (!RealKey && KeyCode==VK_CONTROL) return KEY_NONE; - return(KEY_CTRL+KeyCode); + return(ModifCtrl+KeyCode); } } @@ -3013,60 +3173,60 @@ switch (KeyCode) { case VK_OEM_3: - return(KEY_ALT+'`'); + return(ModifAlt+'`'); case VK_OEM_MINUS: //if(WaitInFastFind) // return(KEY_ALT+KEY_SHIFT+'_'); //else - return(KEY_ALT+'-'); + return(ModifAlt+'-'); case VK_OEM_PLUS: - return(KEY_ALT+'='); + return(ModifAlt+'='); case VK_OEM_5: - return(KEY_ALT+KEY_BACKSLASH); + return(ModifAlt+KEY_BACKSLASH); case VK_OEM_6: - return(KEY_ALT+KEY_BACKBRACKET); + return(ModifAlt+KEY_BACKBRACKET); case VK_OEM_4: - return(KEY_ALT+KEY_BRACKET); + return(ModifAlt+KEY_BRACKET); case VK_OEM_7: - return(KEY_ALT+'\''); + return(ModifAlt+'\''); case VK_OEM_1: - return(KEY_ALT+KEY_SEMICOLON); + return(ModifAlt+KEY_SEMICOLON); case VK_OEM_2: - return(KEY_ALT+KEY_SLASH); + return(ModifAlt+KEY_SLASH); case VK_OEM_102: // <> \| - return KEY_ALT+KEY_BACKSLASH; + return ModifAlt+KEY_BACKSLASH; } switch (KeyCode) { case VK_OEM_COMMA: - return(KEY_ALTCOMMA); + return(ModifAlt|KEY_COMMA); case VK_OEM_PERIOD: - return(KEY_ALTDOT); + return(ModifAlt|KEY_DOT); case VK_DIVIDE: //if(WaitInFastFind) // return(KEY_ALT+KEY_SHIFT+'/'); //else - return(KEY_ALT|KEY_DIVIDE); + return(ModifAlt|KEY_DIVIDE); case VK_MULTIPLY: // if(WaitInFastFind) // return(KEY_ALT+KEY_SHIFT+'*'); // else - return(KEY_ALT|KEY_MULTIPLY); + return(ModifAlt|KEY_MULTIPLY); case VK_PAUSE: - return(KEY_ALT+KEY_PAUSE); + return(ModifAlt+KEY_PAUSE); case VK_SLEEP: - return KEY_ALT|KEY_STANDBY; + return ModifAlt|KEY_STANDBY; case VK_SNAPSHOT: - return KEY_ALT|KEY_PRNTSCRN; + return ModifAlt|KEY_PRNTSCRN; } if (Char) { if (!Opt.ShiftsKeyRules || WaitInFastFind > 0) - return KEY_ALT|Upper(Char); + return ModifAlt|Upper(Char); else if (WaitInMainLoop) - return KEY_ALT|Char; + return ModifAlt|Char; } if (ProcessCtrlCode) @@ -3080,7 +3240,7 @@ if (!RealKey && KeyCode==VK_MENU) return KEY_NONE; - return(KEY_ALT+KeyCode); + return(ModifAlt+KeyCode); } if (IntKeyState.ShiftPressed) |
|
|
|
Патч в первом приближении готов (в довесок к тому, что ты выложил). Проблемы пока остались, например с кнопками: "Shift-" (или "Shift_") - возвращают "None" "RAltShift-" - возвращает "AltShift_". |
|
Мыль тут... может пора ввести принудительное различие на Ctrl/RCtrl, Alt/RAlt? |
|
Кажется, так и нужно. Пока что "неразличимыми" остались только комбинации с более чем одним модификатором. То есть лучше получить, например, "RAltRCtrl1" вместо "AltCtrl1". И, может быть, для удобства в самом фаре не менять системные комбинации типа "AltIns", "Ctrl." и т.п. |
|
> "Shift-" - возвращают "None" это оттого, что '-' воспринимается как VK_OEM_MINUS: Shift -> |"VK_OEM_MINUS" [189/0x00BD]|KEY_EVENT_RECORD: Dn, 1, Vk="VK_OEM_MINUS" [189/0x00BD], Scan=0x000C uChar=[U=' ' (0x0000): A=' ' (0x00)] Ctrl=0x00000010 (caSac - ecns) (Widowed)| > (или "Shift_") Shift -> |"VK_????" [445/0x01BD]|KEY_EVENT_RECORD: Dn, 1, Vk="VK_????" [445/0x01BD], Scan=0x0000 uChar=[U=' ' (0x0000): A=' ' (0x00)] Ctrl=0x00000010 (caSac - ecns) (Widowed)| > "RAltShift-" - возвращает "AltShift_" Здесь опять же "VK_OEM_MINUS", но кроме всего прочего, если посмотришь на CalcKeyCode(), то там везде идет KEY_ALT, но нету KEY_RALT! AltShift -> |"VK_OEM_MINUS" [189/0x00BD]|KEY_EVENT_RECORD: Dn, 1, Vk="VK_OEM_MINUS" [189/0x00BD], Scan=0x000C uChar=[U=' ' (0x0000): A=' ' (0x00)] Ctrl=0x00000011 (caSAc - ecns) (Widowed)| |
|
Для "if (IntKeyState.ShiftPressed)" наверное имеет смысл: case VK_OEM_MINUS: return KEY_SHIFT|KEY_SUBTRACT; case VK_OEM_PLUS: return KEY_SHIFT|KEY_ADD; Хотя тут сложности: "Shift-" это что? "Shift" и "-" на цифровой клаве или "-" на основной? |
|
Хотя, лажа получается... а кто из "-" делает VK_OEM_MINUS? |
|
"-" на цифровой это VK_SUBTRACT. А в фаре это "Subtract". Так что кнопка "-_" это действительно OEM... |
|
Походу, еще вопросы возникли 1. Для чего вставлен вот этот кусок? Зачем он CtrlPressed сбрасывает? Вместо "CtrlAlt0" получается "Alt0" O_O if ((CtrlState & 9)==9) { if (Char) return Char; else IntKeyState.CtrlPressed=0; } 2. Поддержка различия RAlt/Alt и RCtrl/Ctrl это наверное хорошо. Но это и макросы заденет. MacroLib, например, позволяет задавать разные макросы на Alt[Буква] и RAlt[Буква]. Причем, если макрос на RAlt[Буква] явно не назначен - выполняется назначенный на Alt[Буква]. Думаю, что нужно идти по этому пути. 3. Нажать Ctrl. Ctrl. AltShift- В окне ввода комбинации получаем невнятное "AltShiftƽ". Очевидно, я этого не нажимал. Чего там лучше крутить - я пока не понял. |
|
С Shift-ом не понятно... "Shift=" это (KEY_SHIFT|'=') или '+'? Вообще, та же непонятка для всей цифробуквенной клавиатуры |
|
"Shift-" Я так думаю, что здесь нужно просто "_", без Shift. > if ((CtrlState & 9)==9) блин, валишь :-) Этот кусок кода (7 строк) со времен Рошала не трогался - наверное у него спрашивать надо (но наврядли он вспомнит). Этот кусок может относится к мастдаю, хотя... ХЗ. Попробуй его закомментить и посмотри на работу :-) > Но это и макросы заденет. Согласен (и не только макросы - много чего придется продублировать в самом коде ФАР), но, как мне кажется, оно того стоит. > Думаю, что нужно идти по этому пути. Разумно. > Нажать Ctrl. Ctrl. AltShift- Хмм.. TranslateKeyToVK() ... VirtKey=VkKeyScan(static_cast<WCHAR>(FKey)); ... Здесь получаем VirtKey = 0x1BD... Наверное нужно проверить на > 0xFF, но что тогда делать в этом случае? |
|
"VkKeyScan... ...If the function succeeds, the low-order byte of the return value contains the virtual-key code and the high-order byte contains the shift state,..." :-) |
|
> if ((CtrlState & 9)==9) 9 - это, типа, LEFT_CTRL_PRESSED|RIGHT_ALT_PRESSED. Какое-то очень сильное колдунство. |
|
а то! в обчем пока 2122, а там видно будет. Пока вот так: "Shift-" (или "Shift_") ==> "_" "RAltShift-" - возвращает "AltShift_". |
|
|
|
Патч по безобразиям с RCtrl/RAlt выложен. Резюме: если за "правыми" комбинациями ранее не было зарезервировано каких-либо действия - фар реагирует на них так же как на "левые". Изыски типа ПравыйCtrlЛевыйAlt+что-то - специально никак не обрабатываются (в смысле замен Правый->Левый не производится). В макросах, как и везде, если на "правую" комбинацию ничего специально не было повешено - реагируем так же как на "левую". |
|
В двух местах int TreeList::ProcessKey(int Key) int FolderTree::ProcessKey(int Key) нашел странность: поиск с Alt-ом. Везде вроде бы Key<=65535 а там Key<=255. Править пока не стал, но наверное надо на 65535 заменить? |
|
build 2127 |
|
> В макросах, как и везде, если на "правую" комбинацию ничего специально не было повешено - реагируем так же как на "левую". если на левой что-то висит - повесить на правую невозможно, только перезаписать. Причём в диалоге подтверждения перезаписи утверждается, что макрос висит на правой, что не так. |
|
|
|
1. теперь можно повесить и на правую 2. немного форматирования 3. неиспользуемая KeyMacro::GetRecordSize убрана под "#if 0" |
|
build 2132 |
|
Macro.110809.diff (362 bytes)
Index: macro.cpp =================================================================== --- macro.cpp (revision 6539) +++ macro.cpp (working copy) @@ -7230,10 +7230,12 @@ { if (MacroLIB) { + int KeyParam=Key; for (int I=0; I < 2; ++I) { int Pos,Len; MacroRecord *MPtr=nullptr; + Key=KeyParam; if (CheckMode == -1) { |
|
В области Common вместо "правого" выполнялся "левый" макрос |
|
build 2140 |
|
Отвалился правый CtrlShiftDot при записи макроса. |
|
RCtrlShiftDot.diff (2,292 bytes)
Index: macro.cpp =================================================================== --- macro.cpp (revision 6615) +++ macro.cpp (working copy) @@ -757,7 +757,9 @@ if (Recording) // ���� �����? { - if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot) // ������� ���� ������? + // ������� ���� ������? + if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot + || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot) { _KEYMACRO(CleverSysLog Clev(L"MACRO End record...")); DWORD MacroKey; @@ -774,7 +776,8 @@ // ������� �������� �� �������� // ���� ������, �� �� ����� ������ ������ ���������. //if (MacroKey != (DWORD)-1 && (Key==KEY_CTRLSHIFTDOT || Recording==2) && RecBufferSize) - if (MacroKey != (DWORD)-1 && (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot && RecBufferSize) + if (MacroKey != (DWORD)-1 && RecBufferSize + && ((unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot)) { if (!GetMacroSettings(MacroKey,Flags)) MacroKey=(DWORD)-1; @@ -894,7 +897,9 @@ return FALSE; } } - else if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot) // ����� ������? + // ����� ������? + else if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot + || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot) { _KEYMACRO(CleverSysLog Clev(L"MACRO Begin record...")); @@ -914,7 +919,7 @@ // ��� ������ - � ������ ������� �������� ���... // � ����������� �� ����, �� ���� ����� ������, �������� ���� ����� (Ctrl-. // � �������� ������� ����) ��� �������� (Ctrl-Shift-. - ��� ������� ����� �������) - Recording=((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot) ? MACROMODE_RECORDING_COMMON:MACROMODE_RECORDING; + Recording=((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot) ? MACROMODE_RECORDING_COMMON:MACROMODE_RECORDING; if (RecBuffer) xf_free(RecBuffer); |
|
вернул RCtrlShiftDot |
|
где config.hpp? и "?" пропустил в "Recording=((unsigned int)Key==Opt.Macro.Ke..." :-) |
|
Да, config.?pp что-то потерялся. А про "?" - не понял, все на месте вроде. |
|
RCtrlShiftDot2.diff (4,629 bytes)
Index: config.cpp =================================================================== --- config.cpp (revision 6615) +++ config.cpp (working copy) @@ -74,7 +74,9 @@ string strKeyNameConsoleDetachKey; static const wchar_t szCtrlDot[]=L"Ctrl."; +static const wchar_t szRCtrlDot[]=L"RCtrl."; static const wchar_t szCtrlShiftDot[]=L"CtrlShift."; +static const wchar_t szRCtrlShiftDot[]=L"RCtrlShift."; // KeyName const wchar_t NKeyColors[]=L"Colors"; @@ -938,15 +940,21 @@ string strKeyNameFromCfg; GeneralCfg->GetValue(NKeyKeyMacros,L"KeyRecordCtrlDot",strKeyNameFromCfg,szCtrlDot); - if ((Opt.Macro.KeyMacroCtrlDot=KeyNameToKey(strKeyNameFromCfg)) == (DWORD)-1) Opt.Macro.KeyMacroCtrlDot=KEY_CTRLDOT; + GeneralCfg->GetValue(NKeyKeyMacros,L"KeyRecordRCtrlDot",strKeyNameFromCfg,szRCtrlDot); + if ((Opt.Macro.KeyMacroRCtrlDot=KeyNameToKey(strKeyNameFromCfg)) == (DWORD)-1) + Opt.Macro.KeyMacroRCtrlDot=KEY_RCTRLDOT; + GeneralCfg->GetValue(NKeyKeyMacros,L"KeyRecordCtrlShiftDot",strKeyNameFromCfg,szCtrlShiftDot); - if ((Opt.Macro.KeyMacroCtrlShiftDot=KeyNameToKey(strKeyNameFromCfg)) == (DWORD)-1) Opt.Macro.KeyMacroCtrlShiftDot=KEY_CTRLSHIFTDOT; + GeneralCfg->GetValue(NKeyKeyMacros,L"KeyRecordRCtrlShiftDot",strKeyNameFromCfg,szRCtrlShiftDot); + if ((Opt.Macro.KeyMacroRCtrlShiftDot=KeyNameToKey(strKeyNameFromCfg)) == (DWORD)-1) + Opt.Macro.KeyMacroRCtrlShiftDot=KEY_RCTRL|KEY_SHIFT|KEY_DOT; + Opt.EdOpt.strWordDiv = Opt.strWordDiv; FileList::ReadPanelModes(); Index: config.hpp =================================================================== --- config.hpp (revision 6615) +++ config.hpp (working copy) @@ -446,8 +446,8 @@ { int MacroReuseRules; // ������� �� ��� �������� ����������� ��������� ����� DWORD DisableMacro; // �������� /m ��� /ma ��� /m.... - DWORD KeyMacroCtrlDot; // �� KEY_CTRLDOT - DWORD KeyMacroCtrlShiftDot; // �� KEY_CTRLSHIFTDOT + DWORD KeyMacroCtrlDot, KeyMacroRCtrlDot; // �� KEY_CTRLDOT/KEY_RCTRLDOT + DWORD KeyMacroCtrlShiftDot, KeyMacroRCtrlShiftDot; // �� KEY_CTRLSHIFTDOT/KEY_RCTRLSHIFTDOT int CallPluginRules; // 0 - ���������� ������ ��� ����� �������, 1 - ������� ������ (�����!) string strMacroCONVFMT; // ������ ������������� double � ������ string strDateFormat; // �� $Date Index: macro.cpp =================================================================== --- macro.cpp (revision 6615) +++ macro.cpp (working copy) @@ -757,7 +757,9 @@ if (Recording) // ���� �����? { - if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot) // ������� ���� ������? + // ������� ���� ������? + if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot + || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot) { _KEYMACRO(CleverSysLog Clev(L"MACRO End record...")); DWORD MacroKey; @@ -774,7 +776,8 @@ // ������� �������� �� �������� // ���� ������, �� �� ����� ������ ������ ���������. //if (MacroKey != (DWORD)-1 && (Key==KEY_CTRLSHIFTDOT || Recording==2) && RecBufferSize) - if (MacroKey != (DWORD)-1 && (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot && RecBufferSize) + if (MacroKey != (DWORD)-1 && RecBufferSize + && ((unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot)) { if (!GetMacroSettings(MacroKey,Flags)) MacroKey=(DWORD)-1; @@ -894,7 +897,9 @@ return FALSE; } } - else if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot) // ����� ������? + // ����� ������? + else if ((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot + || (unsigned int)Key==Opt.Macro.KeyMacroCtrlShiftDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlShiftDot) { _KEYMACRO(CleverSysLog Clev(L"MACRO Begin record...")); @@ -914,7 +919,7 @@ // ��� ������ - � ������ ������� �������� ���... // � ����������� �� ����, �� ���� ����� ������, �������� ���� ����� (Ctrl-. // � �������� ������� ����) ��� �������� (Ctrl-Shift-. - ��� ������� ����� �������) - Recording=((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot) ? MACROMODE_RECORDING_COMMON:MACROMODE_RECORDING; + Recording=((unsigned int)Key==Opt.Macro.KeyMacroCtrlDot || (unsigned int)Key==Opt.Macro.KeyMacroRCtrlDot) ? MACROMODE_RECORDING_COMMON:MACROMODE_RECORDING; if (RecBuffer) xf_free(RecBuffer); |
|
build 2166 |
|
Keyboard.110927.diff (3,065 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 6730) +++ keyboard.cpp (working copy) @@ -2113,7 +2113,7 @@ } else { - Rec->Event.KeyEvent.wVirtualKeyCode = 0; + Rec->Event.KeyEvent.wVirtualKeyCode = VirtKey = 0; Rec->Event.KeyEvent.wVirtualScanCode = 0; } Rec->Event.KeyEvent.uChar.UnicodeChar=FKey > WCHAR_MAX?0:FKey; @@ -2952,7 +2952,7 @@ _SVS(if (KeyCode!=VK_CONTROL && KeyCode!=VK_MENU) SysLog(L"CtrlAlt -> |%s|%s|",_VK_KEY_ToName(KeyCode),_INPUT_RECORD_Dump(rec))); if (KeyCode>='A' && KeyCode<='Z') - return(Modif+KeyCode); + return Modif|KeyCode; if (Opt.ShiftsKeyRules) //??? switch (KeyCode) @@ -3010,7 +3010,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3034,7 +3034,7 @@ } if (!WaitInMainLoop && KeyCode>='A' && KeyCode<='Z') - return(Modif+KeyCode); + return Modif|KeyCode; if (Opt.ShiftsKeyRules) //??? switch (KeyCode) @@ -3097,7 +3097,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3160,7 +3160,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3203,23 +3203,23 @@ _SVS(if (KeyCode!=VK_CONTROL) SysLog(L"Ctrl -> |%s|%s|",_VK_KEY_ToName(KeyCode),_INPUT_RECORD_Dump(rec))); if (KeyCode>='0' && KeyCode<='9') - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; if (KeyCode>='A' && KeyCode<='Z') - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; switch (KeyCode) { case VK_OEM_COMMA: return(ModifCtrl|KEY_COMMA); case VK_OEM_PERIOD: - return(KEY_CTRLDOT); + return(ModifCtrl|KEY_DOT); case VK_OEM_2: return(ModifCtrl|KEY_SLASH); case VK_OEM_4: return(ModifCtrl|KEY_BRACKET); case VK_OEM_5: - return(KEY_CTRLBACKSLASH); //BUGBUG: �� ���� ModifCtrl ������, ���� �� ������� ����� ��������� Ctrl\ ... + return(ModifCtrl|KEY_BACKSLASH); case VK_OEM_6: return(ModifCtrl|KEY_BACKBRACKET); case VK_OEM_7: @@ -3267,8 +3267,11 @@ if (!RealKey && KeyCode==VK_CONTROL) return KEY_NONE; - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; } + + if (Char) + return ModifCtrl|Char; } /* ------------------------------------------------------------- */ @@ -3348,7 +3351,8 @@ if (!RealKey && KeyCode==VK_MENU) return KEY_NONE; - return(ModifAlt+KeyCode); + if (KeyCode) + return ModifAlt|KeyCode; } if (IntKeyState.ShiftPressed) @@ -3385,5 +3389,7 @@ } + if (Char && (ModifAlt || ModifCtrl)) + return Modif|Char; return Char?Char:KEY_NONE; } |
|
И еще раз. |
|
Keyboard.110929.diff (4,553 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 6736) +++ keyboard.cpp (working copy) @@ -1432,11 +1432,6 @@ (CtrlState&RIGHT_CTRL_PRESSED?KEY_RCTRL:0)| (CtrlState&LEFT_ALT_PRESSED?KEY_ALT:0)| (CtrlState&RIGHT_ALT_PRESSED?KEY_RALT:0); - ClearStruct(*rec); - rec->Event.KeyEvent.wVirtualKeyCode=VK_F24+(CalcKey==KEY_MSWHEEL_UP?2:1); - rec->Event.KeyEvent.dwControlKeyState=CtrlState; - rec->Event.KeyEvent.bKeyDown=TRUE; - rec->EventType = KEY_EVENT; } // ��������� �������������� �������� (NT>=6) @@ -1449,11 +1444,6 @@ (CtrlState&RIGHT_CTRL_PRESSED?KEY_RCTRL:0)| (CtrlState&LEFT_ALT_PRESSED?KEY_ALT:0)| (CtrlState&RIGHT_ALT_PRESSED?KEY_RALT:0); - ClearStruct(*rec); - rec->Event.KeyEvent.wVirtualKeyCode=VK_F24+(CalcKey==KEY_MSWHEEL_RIGHT?4:3); - rec->Event.KeyEvent.dwControlKeyState=CtrlState; - rec->Event.KeyEvent.bKeyDown=TRUE; - rec->EventType = KEY_EVENT; } if (rec->EventType==MOUSE_EVENT && (!ExcludeMacro||ProcessMouse) && CtrlObject && (ProcessMouse || !(CtrlObject->Macro.IsRecording() || CtrlObject->Macro.IsExecuting()))) @@ -2113,7 +2103,7 @@ } else { - Rec->Event.KeyEvent.wVirtualKeyCode = 0; + Rec->Event.KeyEvent.wVirtualKeyCode = VirtKey = 0; Rec->Event.KeyEvent.wVirtualScanCode = 0; } Rec->Event.KeyEvent.uChar.UnicodeChar=FKey > WCHAR_MAX?0:FKey; @@ -2662,15 +2652,6 @@ /* ------------------------------------------------------------- */ switch (KeyCode) { - case VK_F24+1: - return Modif|KEY_MSWHEEL_DOWN; - case VK_F24+2: - return Modif|KEY_MSWHEEL_UP; - case VK_F24+3: - return Modif|KEY_MSWHEEL_LEFT; - case VK_F24+4: - return Modif|KEY_MSWHEEL_RIGHT; - case VK_INSERT: case VK_NUMPAD0: @@ -2952,7 +2933,7 @@ _SVS(if (KeyCode!=VK_CONTROL && KeyCode!=VK_MENU) SysLog(L"CtrlAlt -> |%s|%s|",_VK_KEY_ToName(KeyCode),_INPUT_RECORD_Dump(rec))); if (KeyCode>='A' && KeyCode<='Z') - return(Modif+KeyCode); + return Modif|KeyCode; if (Opt.ShiftsKeyRules) //??? switch (KeyCode) @@ -3010,7 +2991,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3034,7 +3015,7 @@ } if (!WaitInMainLoop && KeyCode>='A' && KeyCode<='Z') - return(Modif+KeyCode); + return Modif|KeyCode; if (Opt.ShiftsKeyRules) //??? switch (KeyCode) @@ -3097,7 +3078,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3160,7 +3141,7 @@ return(KEY_NONE); if (KeyCode) - return(Modif+KeyCode); + return Modif|KeyCode; } /* ------------------------------------------------------------- */ @@ -3203,23 +3184,23 @@ _SVS(if (KeyCode!=VK_CONTROL) SysLog(L"Ctrl -> |%s|%s|",_VK_KEY_ToName(KeyCode),_INPUT_RECORD_Dump(rec))); if (KeyCode>='0' && KeyCode<='9') - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; if (KeyCode>='A' && KeyCode<='Z') - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; switch (KeyCode) { case VK_OEM_COMMA: return(ModifCtrl|KEY_COMMA); case VK_OEM_PERIOD: - return(KEY_CTRLDOT); + return(ModifCtrl|KEY_DOT); case VK_OEM_2: return(ModifCtrl|KEY_SLASH); case VK_OEM_4: return(ModifCtrl|KEY_BRACKET); case VK_OEM_5: - return(KEY_CTRLBACKSLASH); //BUGBUG: �� ���� ModifCtrl ������, ���� �� ������� ����� ��������� Ctrl\ ... + return(ModifCtrl|KEY_BACKSLASH); case VK_OEM_6: return(ModifCtrl|KEY_BACKBRACKET); case VK_OEM_7: @@ -3267,8 +3248,11 @@ if (!RealKey && KeyCode==VK_CONTROL) return KEY_NONE; - return(ModifCtrl+KeyCode); + return ModifCtrl|KeyCode; } + + if (Char) + return ModifCtrl|Char; } /* ------------------------------------------------------------- */ @@ -3348,7 +3332,8 @@ if (!RealKey && KeyCode==VK_MENU) return KEY_NONE; - return(ModifAlt+KeyCode); + if (KeyCode) + return ModifAlt|KeyCode; } if (IntKeyState.ShiftPressed) @@ -3385,5 +3370,7 @@ } + if (Char && (ModifAlt || ModifCtrl)) + return Modif|Char; return Char?Char:KEY_NONE; } |
|
и еще |
|
прокомментируй последний патч. что дает? зачем удалено "case VK_F24+1:" и еже с ним (в CalcKeyCode)? |
|
Событие - мышиное. Тогда какого фига его преобразовывать в клавиатурное?. Ладно бы внутри фара, но это кривое событие дальше в плагины лезет. Вобщем, удалять пережитки тяжелого прошлого... |
|
...а в замен? прочее проанализаировал? |
|
KeyCode (KEY_WHEEL_UP и т.п.) же возвращается. F24+N был только в KeyEvent.VirtualKey (чего быть для мыши не должно). Макрос назначенный на CtrlMsWheelUp сработал. Что еще проверить? |
|
а как быть с 0001736 ? (см. комментарий к build 2038) |
|
Я там не вижу ни билда 2038, ни комментариев к нему. Может ты про 1946? |
|
Если ты про akey, то все akey отрабатывают на MsWheelUp (как с Ctrl/Shift/Alt, так и без) отрабатывают нормально. Как в самом фаре, так и в макролибе. |
|
Вот, желающие могут потестить http://conemu-maximus5.googlecode.com/files/far3.2212bis.x86.x64.7z |
|
manager.111005.diff (592 bytes)
Index: manager.cpp =================================================================== --- manager.cpp (revision 6753) +++ manager.cpp (working copy) @@ -706,7 +706,7 @@ if (EndLoop) return; - if (LastInputRecord.EventType==MOUSE_EVENT) + if (LastInputRecord.EventType==MOUSE_EVENT && !(Key==KEY_MSWHEEL_UP || Key==KEY_MSWHEEL_DOWN || Key==KEY_MSWHEEL_RIGHT || Key==KEY_MSWHEEL_LEFT)) { // ��������� ���� ��������, �.�. LastInputRecord ����� �������� �������� �� ���� �������� ProcessMouse MOUSE_EVENT_RECORD mer=LastInputRecord.Event.MouseEvent; |
|
довесок к предыдущему патчу - не срабатывало колесо в панелях (и еще где может). других глюков пока не выявлено |
|
я имел в виду changelog#build 2038 - там описано для чего это делалось. т.е. хочешь сказать, что сейчас этот код лишний (с учетом твоих двух последних патчей?) |
|
да, лишний. макрос msgbox(akey(0),MsWheelDown) показывает 131076 131076 что и требуется |
|
build 2214 |
|
Keyboard.111008.diff (357 bytes)
--- keyboard.cpp (revision 6756) +++ keyboard.cpp (working copy) @@ -2103,7 +2103,7 @@ } else { - Rec->Event.KeyEvent.wVirtualKeyCode = VirtKey = 0; + Rec->Event.KeyEvent.wVirtualKeyCode = 0; Rec->Event.KeyEvent.wVirtualScanCode = 0; } Rec->Event.KeyEvent.uChar.UnicodeChar=FKey > WCHAR_MAX?0:FKey; |
|
В 2214 у меня отвалился ввод букв в русской раскладке в одном из плагинов (там DI_USERCONTROL). Проверка показала, что при нажатии букв в русской раскладке в диалоговую процедуру вообще ничего не приходит. Методом перебора изменений в keyboard.cpp нашёл то, которое мешает. Патч приложен. |
|
хмм... ну вы пока определитесь, кто у кого что удаляет... ...после консенсуса выкатывайте патч. |
|
не помню, зачем VirtKey обнуляется, но похоже, что "Keyboard.111008.diff" надо принять. |
|
build 2215 |
|
2215 - в вышеупомянутом плагине стало ОК. |
|
Keyboard.111010.diff (538 bytes)
Index: plclass.cpp =================================================================== --- plclass.cpp (revision 6753) +++ plclass.cpp (working copy) @@ -267,7 +267,7 @@ static BOOL WINAPI KeyNameToInputRecord(const wchar_t *Name,INPUT_RECORD* RecKey) { int Key=KeyNameToKeyW(Name); - return Key > 0?(KeyToInputRecord(Key,RecKey)>=0?TRUE:FALSE):FALSE; + return Key > 0?(KeyToInputRecord(Key,RecKey)!=0?TRUE:FALSE):FALSE; } #define GetPluginNumber(Id) (CtrlObject?CtrlObject->Plugins.PluginGuidToPluginNumber(*Id):-1) |
|
вспомнил, зачем VirtKey сбрасывался, хоть и некорректно. новый патчик |
|
build 2216 |
|
прежде чем убирать какое-то шаманство, нужно думать. |
|
1. ты о чем вообще? 2. почему у "шаманства" в коде нет комментарий "зачем"? |
|
шаманство не я писал. комментарий я добавил. но как бы очевидно, что если проверяется LCtrl+RAlt, а именно это генерится при вводе символов через RAlt, то это как минимум связано, не? |
|
После комментария становится понятно, но было не очевидно. Это ведь не во всех раскладках такие финты происходят. Может я действительно нажал LCtrl+RAlt+E? Ну, раз так, получается что про LCtrl+RAlt можно забыть, все комбинации с этими модификаторами вылетают. |
|
AltGr sometimes fails. |
|
AltGr1.diff (1,185 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 8321) +++ keyboard.cpp (working copy) @@ -895,6 +895,8 @@ if (rec->EventType==KEY_EVENT) { + static bool bForceAltGr = false; + if (!rec->Event.KeyEvent.bKeyDown) { was_repeat = false; @@ -904,8 +906,21 @@ { was_repeat = (last_pressed_keycode == rec->Event.KeyEvent.wVirtualKeyCode); last_pressed_keycode = rec->Event.KeyEvent.wVirtualKeyCode; + + if (rec->Event.KeyEvent.wVirtualKeyCode == VK_MENU) + { + // ��������� � AltGr (��������� ����������) + bForceAltGr = (rec->Event.KeyEvent.wVirtualScanCode == 0) + && ((rec->Event.KeyEvent.dwControlKeyState & 0x1F) == 0x0A); + } } + if (bForceAltGr && (rec->Event.KeyEvent.dwControlKeyState & 0x1F) == 0x0A) + { + rec->Event.KeyEvent.dwControlKeyState &= ~LEFT_ALT_PRESSED; + rec->Event.KeyEvent.dwControlKeyState |= RIGHT_ALT_PRESSED; + } + DWORD CtrlState=rec->Event.KeyEvent.dwControlKeyState; //_SVS(if(rec->EventType==KEY_EVENT)SysLog(L"[%d] if(rec->EventType==KEY_EVENT) >>> %s",__LINE__,_INPUT_RECORD_Dump(rec))); |
|
Очередное колдунство. В некоторых случаях (Win8 & Onscreen keyboard) нажатие "AltGr+^" и "a" не приводит к ожидаемому результату - Far отрабатывает "AltGr+^" как Ctrl+Alt+]. |
|
TODO: Осталось починить, чтобы при вводе "AltGr+^" и "a" в панелях не всплывал QSearch. Он не должен появляться при нажатии "Dead key". |
|
>TODO: Вроде бы это уже выходит за рамки тикета? Не пора ли закрыть? |
|
С одиночными нажатиями модификаторов как-то странно сейчас: NameToInputRecord предполагает нажатие. InputRecordToName предполагает отпускание. В результате: far.InputRecordToName(far.NameToInputRecord"Shift")==nil И отдельная проблема: нет защиты от некорректных данных. Например: far.InputRecordToName(far.NameToInputRecord"LShift")=="t" |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-07-10 23:55 | Maximus | New Issue | |
2011-07-11 00:08 | Maximus | Note Added: 0007267 | |
2011-07-24 08:32 | vskirdin | Note Added: 0007304 | |
2011-07-26 15:19 | vskirdin | Note Added: 0007324 | |
2011-07-26 15:19 | vskirdin | Assigned To | => vskirdin |
2011-07-26 15:19 | vskirdin | Status | new => assigned |
2011-07-27 16:03 | Maximus | Note Added: 0007328 | |
2011-07-27 16:09 | Maximus | Note Edited: 0007328 | |
2011-07-27 17:06 | vskirdin | Note Added: 0007329 | |
2011-07-27 17:49 | Maximus | File Added: KeyTest.7z | |
2011-08-01 00:55 | Maximus | File Added: Keyboard.110731.diff | |
2011-08-01 00:58 | Maximus | File Added: KeyTest.2.7z | |
2011-08-01 01:01 | Maximus | Note Added: 0007341 | |
2011-08-01 07:19 | vskirdin | Note Added: 0007342 | |
2011-08-01 07:45 | Maximus | Note Added: 0007343 | |
2011-08-01 11:09 | vskirdin | Note Added: 0007344 | |
2011-08-01 11:23 | vskirdin | Note Added: 0007345 | |
2011-08-01 11:38 | vskirdin | Note Added: 0007346 | |
2011-08-01 11:46 | Maximus | Note Added: 0007347 | |
2011-08-01 11:47 | Maximus | Note Added: 0007348 | |
2011-08-01 11:49 | Maximus | Note Edited: 0007347 | |
2011-08-01 11:56 | Maximus | Note Added: 0007349 | |
2011-08-01 12:23 | vskirdin | Note Added: 0007350 | |
2011-08-01 12:25 | vskirdin | Note Added: 0007351 | |
2011-08-01 12:34 | DrKnS | Note Added: 0007352 | |
2011-08-01 12:43 | vskirdin | Note Added: 0007353 | |
2011-08-03 22:02 | Maximus | File Added: Keys110803.diff.7z | |
2011-08-03 22:05 | Maximus | Note Added: 0007396 | |
2011-08-03 22:07 | Maximus | Note Added: 0007397 | |
2011-08-04 00:14 | vskirdin | Note Added: 0007401 | |
2011-08-04 00:14 | vskirdin | Status | assigned => feedback |
2011-08-04 09:21 | DrKnS | Note Added: 0007402 | |
2011-08-04 19:51 | Maximus | File Added: Macro.110804.diff.7z | |
2011-08-04 19:53 | Maximus | Note Added: 0007403 | |
2011-08-04 19:53 | Maximus | Status | feedback => assigned |
2011-08-05 09:12 | vskirdin | Note Added: 0007404 | |
2011-08-05 09:12 | vskirdin | Status | assigned => feedback |
2011-08-09 15:25 | Maximus | File Added: Macro.110809.diff | |
2011-08-09 15:26 | Maximus | Note Added: 0007433 | |
2011-08-09 15:26 | Maximus | Status | feedback => assigned |
2011-08-09 20:22 | vskirdin | Note Added: 0007434 | |
2011-08-09 20:22 | vskirdin | Status | assigned => feedback |
2011-08-19 11:56 | DrKnS | Note Added: 0007498 | |
2011-08-25 00:32 | Maximus | File Added: RCtrlShiftDot.diff | |
2011-08-25 00:32 | Maximus | Note Added: 0007517 | |
2011-08-25 00:32 | Maximus | Status | feedback => assigned |
2011-08-25 06:58 | vskirdin | Note Added: 0007518 | |
2011-08-25 06:58 | vskirdin | Status | assigned => feedback |
2011-08-25 07:50 | Maximus | Note Added: 0007519 | |
2011-08-25 07:50 | Maximus | Status | feedback => assigned |
2011-08-25 07:50 | Maximus | File Added: RCtrlShiftDot2.diff | |
2011-08-25 08:31 | vskirdin | Note Added: 0007521 | |
2011-08-25 08:31 | vskirdin | Status | assigned => feedback |
2011-09-27 06:37 | Maximus | File Added: Keyboard.110927.diff | |
2011-09-27 06:37 | Maximus | Note Added: 0007753 | |
2011-09-27 06:37 | Maximus | Status | feedback => assigned |
2011-09-29 13:17 | Maximus | File Added: Keyboard.110929.diff | |
2011-09-29 13:18 | Maximus | Note Added: 0007759 | |
2011-09-30 12:55 | vskirdin | Note Added: 0007781 | |
2011-09-30 12:56 | vskirdin | Note Edited: 0007781 | |
2011-09-30 15:41 | Maximus | Note Added: 0007788 | |
2011-09-30 17:23 | vskirdin | Note Added: 0007789 | |
2011-09-30 20:00 | Maximus | Note Added: 0007790 | |
2011-09-30 20:09 | vskirdin | Note Added: 0007791 | |
2011-09-30 22:24 | Maximus | Note Added: 0007793 | |
2011-09-30 22:38 | Maximus | Note Added: 0007794 | |
2011-10-01 00:11 | Maximus | Note Added: 0007795 | |
2011-10-02 06:09 | Maximus | Note Edited: 0007795 | |
2011-10-05 19:52 | Maximus | Note Edited: 0007795 | |
2011-10-05 19:55 | Maximus | File Added: manager.111005.diff | |
2011-10-05 19:56 | Maximus | Note Added: 0007831 | |
2011-10-06 07:05 | vskirdin | Note Added: 0007836 | |
2011-10-06 13:00 | Maximus | Note Added: 0007840 | |
2011-10-06 13:08 | vskirdin | Note Added: 0007841 | |
2011-10-06 13:08 | vskirdin | Status | assigned => feedback |
2011-10-08 17:20 | shmuel | File Added: Keyboard.111008.diff | |
2011-10-08 17:40 | shmuel | Note Added: 0007847 | |
2011-10-08 19:22 | vskirdin | Note Added: 0007848 | |
2011-10-08 20:27 | Maximus | Status | feedback => assigned |
2011-10-08 22:56 | Maximus | Note Added: 0007851 | |
2011-10-09 12:33 | vskirdin | Note Added: 0007852 | |
2011-10-09 12:33 | vskirdin | Status | assigned => feedback |
2011-10-09 13:06 | shmuel | Note Added: 0007853 | |
2011-10-10 13:44 | Maximus | File Added: Keyboard.111010.diff | |
2011-10-10 13:45 | Maximus | Note Added: 0007855 | |
2011-10-10 13:45 | Maximus | Status | feedback => assigned |
2011-10-10 14:22 | vskirdin | Note Added: 0007856 | |
2011-10-10 14:22 | vskirdin | Status | assigned => feedback |
2011-10-21 23:32 | zg | Note Added: 0007948 | |
2011-10-22 08:49 | Maximus | Note Added: 0007949 | |
2011-10-22 08:49 | Maximus | Status | feedback => assigned |
2011-10-22 08:55 | zg | Note Added: 0007950 | |
2011-10-22 11:07 | Maximus | Note Added: 0007951 | |
2011-10-22 11:08 | Maximus | Note Edited: 0007951 | |
2011-12-23 11:13 | alexy | Build | => 2241 |
2011-12-23 11:13 | alexy | Status | assigned => closed |
2011-12-23 11:13 | alexy | Resolution | open => fixed |
2011-12-23 11:13 | alexy | Fixed in Version | => 3.0 |
2012-08-15 10:41 | 2useven10 | Relationship added | related to 0002135 |
2012-08-16 20:44 | Maximus | Note Added: 0009488 | |
2012-08-16 20:44 | Maximus | Status | closed => feedback |
2012-08-16 20:44 | Maximus | Resolution | fixed => reopened |
2012-08-16 20:45 | Maximus | File Added: AltGr1.diff | |
2012-08-16 20:49 | Maximus | Note Added: 0009489 | |
2012-08-16 20:49 | Maximus | Status | feedback => assigned |
2012-08-16 20:52 | Maximus | Note Added: 0009490 | |
2013-04-25 21:53 | 2useven10 | Relationship added | related to 0002397 |
2015-05-12 09:58 | JohnDoe | Note Added: 0013651 | |
2015-08-09 14:26 | JohnDoe | Note Added: 0013752 |