View Issue Details

IDProjectCategoryView StatusLast Update
0002070Far ManagerPlugins APIpublic2013-02-28 08:03
ReporterMaximus Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version3.0 
Summary0002070: Ошибка обротки ProcessConsoleInputInfo
DescriptionЕсли плагин запретил обработку события, то GetInputRecord возвращает KEY_NONE.
Но! Далее по коду используется сам INPUT_RECORD*, а его плагину менять не дают.

1. Почему плагину не дают менять INPUT_RECORD? Может все-таки дать такую возможность? А то как-то через ж.. получается: http://conemu-maximus5.googlecode.com/svn/trunk/QSearchSwitch/QSearchSwitch.cpp
2. Как минимум, при возврате KEY_NONE фар должен сам почикать rec.
TagsNo tags attached.
Build2621

Relationships

parent of 0001687 closedvskirdin Wishes ProcessConsoleInput 

Activities

Maximus

2012-04-11 23:41

reporter  

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;
 }
 
120412.diff (285 bytes)   

Maximus

2012-04-12 15:33

reporter  

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;
 }
 
Keyboard.v2.diff (679 bytes)   

Maximus

2012-04-12 15:35

reporter   bugnote:0008881

Предыдущий патч неправильный (т.к. KEY_NONE для LBtnDblClk)
обновлен

Maximus

2012-04-12 15:38

reporter   bugnote:0008882

И вопрос по теме.

Есть два события: KEY_GOTFOCUS и KEY_KILLFOCUS.
Для обоих - это 0-ой KeyEvent.
Фигня какая-то...
В принципе, плагину может быть интересно реагировать на эти события, только для них надо сплодить уникальный Event. Не?

vskirdin

2012-04-16 07:49

administrator   bugnote:0008905

Как то негоже постить баги по пока несуществующему функционалу... :-)

Про "фокус".
Если ты про кусок кода "if (rec->EventType==FOCUS_EVENT)", то там может быть ошибка, ошибка для нынешнего кода. Ранее предполагалось, что FOCUS_EVENT превратится в нулевой KEY_EVENT (читай "левый"), но с обработкой этого события и корректным возвратом CalcKey из GetInputRecord().
Про "уникальный" - это какой? Что-то отличное от FOCUS_EVENT? А зачем? Чем FOCUS_EVENT не угодил?

Maximus

2012-04-16 13:17

reporter  

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();
Keyboard.v3.diff (1,042 bytes)   

Maximus

2012-04-16 13:21

reporter   bugnote:0008907

ага, похоже что так

Maximus

2012-04-16 13:23

reporter   bugnote:0008908

Если баги не постить - функционал так и останется "несуществующим"... а пора бы уже, не?

vskirdin

2012-04-17 11:41

administrator   bugnote:0008928

Попробуй сам плотно взяться за эту тему :-)
Тебе проще этот кусок АПИ отработать...

vskirdin

2012-04-18 07:23

administrator   bugnote:0008945

build 2621

Issue History

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