View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002094 | Far Manager | Macro | public | 2012-05-03 17:00 | 2012-05-11 08:21 |
Reporter | Maximus | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0002094: Задваение Enter при вызове Eval (из макроса) | ||||
Description | Минимально достаточное для воспроизведения глюка запускаем фар с приложенным плагином (два макроса в macros.db) из панелей жмем "Ctrl`", вызывает меню плагина: Plugin.Menu("7d5b81a3-5788-487e-ba06-4b20841ee96f")) в меню плагина жмем "Enter", зовет: %_AK_=13; Eval("Enter") все. Меню закрылось (по одному Enter), но откуда-то взявшийся второй Enter провалился в панели | ||||
Tags | No tags attached. | ||||
Build | 2661 | ||||
|
|
|
CtrlObject->Plugins->CallPluginItem(guid,&Data); вызывается первым макросом. второй макрос начинает работать, когда первый еще не закончился. Enter заставляет закрыть меню, но после CallPluginItem() фрейм еще от второго макроса. Идеи? Допустим, после CallPluginItem мы проверим, что сейчас мы не у себя дома (окружение другое/адреса переменных не те/некий второй макрос пока еще исполняется). Какое дальше принять решение? |
|
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 Там для CallPlugin есть if (MR != Work.MacroWORK) // ??? MR=Work.MacroWORK; это нужно проверять. смысл в том, что... ну и хрен с ним, продолжим с новым значением MR |
|
build 2660 |
|
вроде работает, спасибо |
|
ok |
|
не, еще не все. падаем |
|
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) |
|
build 2661 |
|
ok |
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 |