View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002070 | Far Manager | Plugins API | public | 2012-04-11 23:41 | 2013-02-28 08:03 |
Reporter | Maximus | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Summary | 0002070: Ошибка обротки ProcessConsoleInputInfo | ||||
Description | Если плагин запретил обработку события, то GetInputRecord возвращает KEY_NONE. Но! Далее по коду используется сам INPUT_RECORD*, а его плагину менять не дают. 1. Почему плагину не дают менять INPUT_RECORD? Может все-таки дать такую возможность? А то как-то через ж.. получается: http://conemu-maximus5.googlecode.com/svn/trunk/QSearchSwitch/QSearchSwitch.cpp 2. Как минимум, при возврате KEY_NONE фар должен сам почикать rec. | ||||
Tags | No tags attached. | ||||
Build | 2621 | ||||
|
120412.diff (285 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 7862) +++ keyboard.cpp (working copy) @@ -649,6 +649,8 @@ Key=KEY_NONE; } } + if (Key==KEY_NONE) + KeyToInputRecord(Key, rec); return Key; } |
|
Keyboard.v2.diff (679 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 7867) +++ keyboard.cpp (working copy) @@ -636,6 +636,7 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool AllowSynchro) { DWORD Key = __GetInputRecord(rec,ExcludeMacro,ProcessMouse,AllowSynchro); + bool Halt=false; if (Key) { @@ -646,9 +647,15 @@ if (WaitInMainLoop) Info.Flags|=PCIF_FROMMAIN; if (CtrlObject->Plugins->ProcessConsoleInput(&Info)) - Key=KEY_NONE; + Halt=true; + } } + if (Halt) + { + Key=KEY_NONE; + KeyToInputRecord(Key, rec); + } return Key; } |
|
Предыдущий патч неправильный (т.к. KEY_NONE для LBtnDblClk) обновлен |
|
И вопрос по теме. Есть два события: KEY_GOTFOCUS и KEY_KILLFOCUS. Для обоих - это 0-ой KeyEvent. Фигня какая-то... В принципе, плагину может быть интересно реагировать на эти события, только для них надо сплодить уникальный Event. Не? |
|
Как то негоже постить баги по пока несуществующему функционалу... :-) Про "фокус". Если ты про кусок кода "if (rec->EventType==FOCUS_EVENT)", то там может быть ошибка, ошибка для нынешнего кода. Ранее предполагалось, что FOCUS_EVENT превратится в нулевой KEY_EVENT (читай "левый"), но с обработкой этого события и корректным возвратом CalcKey из GetInputRecord(). Про "уникальный" - это какой? Что-то отличное от FOCUS_EVENT? А зачем? Чем FOCUS_EVENT не угодил? |
|
Keyboard.v3.diff (1,042 bytes)
Index: keyboard.cpp =================================================================== --- keyboard.cpp (revision 7880) +++ keyboard.cpp (working copy) @@ -636,6 +636,7 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool AllowSynchro) { DWORD Key = __GetInputRecord(rec,ExcludeMacro,ProcessMouse,AllowSynchro); + bool Halt=false; if (Key) { @@ -646,9 +647,15 @@ if (WaitInMainLoop) Info.Flags|=PCIF_FROMMAIN; if (CtrlObject->Plugins->ProcessConsoleInput(&Info)) - Key=KEY_NONE; + Halt=true; + } } + if (Halt) + { + Key=KEY_NONE; + KeyToInputRecord(Key, rec); + } return Key; } @@ -970,8 +977,6 @@ PressedLastTime=0; Console.ReadInput(rec, 1, ReadCount); CalcKey=rec->Event.FocusEvent.bSetFocus?KEY_GOTFOCUS:KEY_KILLFOCUS; - ClearStruct(*rec); - rec->EventType=KEY_EVENT; //���� ���� ��� ���� �������� � ������� ������� � �.�. ����� ������ ������ if (CalcKey == KEY_GOTFOCUS) RestoreConsoleWindowRect(); |
|
ага, похоже что так |
|
Если баги не постить - функционал так и останется "несуществующим"... а пора бы уже, не? |
|
Попробуй сам плотно взяться за эту тему :-) Тебе проще этот кусок АПИ отработать... |
|
build 2621 |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-04-11 23:41 | Maximus | New Issue | |
2012-04-11 23:41 | Maximus | File Added: 120412.diff | |
2012-04-12 15:33 | Maximus | File Added: Keyboard.v2.diff | |
2012-04-12 15:35 | Maximus | Note Added: 0008881 | |
2012-04-12 15:38 | Maximus | Note Added: 0008882 | |
2012-04-16 07:44 | vskirdin | Relationship added | parent of 0001687 |
2012-04-16 07:49 | vskirdin | Note Added: 0008905 | |
2012-04-16 13:17 | Maximus | File Added: Keyboard.v3.diff | |
2012-04-16 13:21 | Maximus | Note Added: 0008907 | |
2012-04-16 13:23 | Maximus | Note Added: 0008908 | |
2012-04-17 11:41 | vskirdin | Note Added: 0008928 | |
2012-04-18 07:23 | vskirdin | Note Added: 0008945 | |
2012-04-18 07:23 | vskirdin | Assigned To | => vskirdin |
2012-04-18 07:23 | vskirdin | Status | new => feedback |
2013-02-28 08:03 | vskirdin | Build | => 2621 |
2013-02-28 08:03 | vskirdin | Status | feedback => closed |
2013-02-28 08:03 | vskirdin | Resolution | open => fixed |