View Issue Details

IDProjectCategoryView StatusLast Update
0002094Far ManagerMacropublic2012-05-11 08:21
ReporterMaximus Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version3.0 
Fixed in Version3.0 
Summary0002094: Задваение Enter при вызове Eval (из макроса)
DescriptionМинимально достаточное для воспроизведения глюка

запускаем фар с приложенным плагином (два макроса в macros.db)
из панелей жмем "Ctrl`", вызывает меню плагина: Plugin.Menu("7d5b81a3-5788-487e-ba06-4b20841ee96f"))
в меню плагина жмем "Enter", зовет: %_AK_=13; Eval("Enter")
все. Меню закрылось (по одному Enter), но откуда-то взявшийся второй Enter провалился в панели

TagsNo tags attached.
Build2661

Activities

Maximus

2012-05-03 17:00

reporter  

MenuTest.7z (35,727 bytes)

vskirdin

2012-05-04 11:40

administrator   bugnote:0009105

CtrlObject->Plugins->CallPluginItem(guid,&Data);
вызывается первым макросом.
второй макрос начинает работать, когда первый еще не закончился.
Enter заставляет закрыть меню, но после CallPluginItem() фрейм еще от второго макроса.

Идеи?

Допустим, после CallPluginItem мы проверим, что сейчас мы не у себя дома (окружение другое/адреса переменных не те/некий второй макрос пока еще исполняется). Какое дальше принять решение?

vskirdin

2012-05-04 12:09

administrator  

macro.cpp.diff (1,125 bytes)   
Index: macro.cpp
===================================================================
--- macro.cpp	(revision 7996)
+++ macro.cpp	(working copy)
@@ -5069,7 +5069,7 @@
 
 begin:
 
-	if (Work.ExecLIBPos>=MR->BufferSize || !MR->Buffer)
+	if (!MR || (Work.ExecLIBPos>=MR->BufferSize || !MR->Buffer))
 	{
 done:
 
@@ -5096,7 +5096,8 @@
 		{
 			if (LockScr) delete LockScr;
 			LockScr=nullptr;
-			MR->Flags&=~MFLAGS_DISABLEOUTPUT; // ????
+			if (MR)
+				MR->Flags&=~MFLAGS_DISABLEOUTPUT; // ????
 		}
 
 		Clipboard::SetUseInternalClipboardState(false); //??
@@ -6036,6 +6037,9 @@
 					if (CtrlObject->Plugins->CallPlugin(guid,OPEN_FROMMACRO,&info,&ResultCallPlugin))
 						Ret=(__int64)ResultCallPlugin;
 
+					if (MR != Work.MacroWORK) // ???
+						MR=Work.MacroWORK;
+
 					if( CallPluginRules == 1 )
 						PopState();
 					else
@@ -6121,6 +6125,8 @@
 					// ���� ���� ������ - �� ����� ���������
 					Data.CallFlags&=~CPT_CHECKONLY;
 					CtrlObject->Plugins->CallPluginItem(guid,&Data);
+					if (MR != Work.MacroWORK)
+						MR=Work.MacroWORK;
 				}
 			}
 			else
macro.cpp.diff (1,125 bytes)   

vskirdin

2012-05-04 12:11

administrator   bugnote:0009106

попробуй ка патч macro.cpp.diff
Там для CallPlugin есть
if (MR != Work.MacroWORK) // ???
    MR=Work.MacroWORK;
это нужно проверять.

смысл в том, что... ну и хрен с ним, продолжим с новым значением MR

vskirdin

2012-05-04 12:15

administrator   bugnote:0009108

build 2660

Maximus

2012-05-04 12:33

reporter   bugnote:0009109

вроде работает, спасибо

Maximus

2012-05-04 13:42

reporter   bugnote:0009110

ok

Maximus

2012-05-04 16:56

reporter   bugnote:0009111

не, еще не все. падаем

Maximus

2012-05-04 16:56

reporter  

macro2.diff (435 bytes)   
Index: macro.cpp
===================================================================
--- macro.cpp	(revision 7991)
+++ macro.cpp	(working copy)
@@ -6223,7 +6229,7 @@
 
 #else
 
-	if (MR==Work.MacroWORK && Work.ExecLIBPos>=MR->BufferSize)
+	if (MR && MR==Work.MacroWORK && Work.ExecLIBPos>=MR->BufferSize)
 	{
 		_KEYMACRO(SysLog(-1); SysLog(L"[%d] **** End Of Execute Macro ****",__LINE__));
 		if (--Work.KeyProcess < 0)
macro2.diff (435 bytes)   

vskirdin

2012-05-04 20:13

administrator   bugnote:0009112

build 2661

Maximus

2012-05-11 08:17

reporter   bugnote:0009139

ok

Issue History

Date Modified Username Field Change
2012-05-03 17:00 Maximus New Issue
2012-05-03 17:00 Maximus File Added: MenuTest.7z
2012-05-04 11:40 vskirdin Note Added: 0009105
2012-05-04 12:09 vskirdin File Added: macro.cpp.diff
2012-05-04 12:11 vskirdin Note Added: 0009106
2012-05-04 12:15 vskirdin Note Added: 0009108
2012-05-04 12:15 vskirdin Assigned To => vskirdin
2012-05-04 12:15 vskirdin Status new => feedback
2012-05-04 12:33 Maximus Note Added: 0009109
2012-05-04 12:33 Maximus Status feedback => assigned
2012-05-04 13:42 Maximus Note Added: 0009110
2012-05-04 13:42 Maximus Status assigned => resolved
2012-05-04 13:46 vskirdin Build => 2660
2012-05-04 13:46 vskirdin Status resolved => closed
2012-05-04 13:46 vskirdin Resolution open => fixed
2012-05-04 13:46 vskirdin Fixed in Version => 3.0
2012-05-04 16:56 Maximus Note Added: 0009111
2012-05-04 16:56 Maximus Status closed => feedback
2012-05-04 16:56 Maximus Resolution fixed => reopened
2012-05-04 16:56 Maximus File Added: macro2.diff
2012-05-04 20:13 vskirdin Note Added: 0009112
2012-05-11 08:17 Maximus Note Added: 0009139
2012-05-11 08:17 Maximus Status feedback => assigned
2012-05-11 08:17 Maximus Status assigned => resolved
2012-05-11 08:21 vskirdin Build 2660 => 2661
2012-05-11 08:21 vskirdin Status resolved => closed
2012-05-11 08:21 vskirdin Resolution reopened => fixed