View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001515 | Far Manager | Panel | public | 2010-09-23 11:34 | 2010-09-23 11:34 |
Reporter | Maximus | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | XP SP2 |
Product Version | 2.0 | ||||
Summary | 0001515: FCTL_UPDATEPANEL и плагин Network | ||||
Description | Плагин может поменять свои флаги (OpenPluginInfo.Flags) во время выполнения GetFindData. Это приводит к непоявлению элемента ".." на панели плагина, при его открытии как: net:\\server Причем, под отладчиком видна забавная ситуация: панель плагина перерисовывается ДВА раза, первый раз элемент ".." присутствует, а во втором его уже нет. Лечится в Far добавлением строки в FileList::UpdatePlugin if (!CtrlObject->Plugins.GetFindData(hPlugin,&PanelData,&PluginFileCount,0)) { ... } + CtrlObject->Plugins.GetOpenPluginInfo(hPlugin,&Info); int PrevSelFileCount=SelFileCount; то есть после получения GetFindData приходится повторно получать флаги. PS. Другое дело, должен ли плагин Network вызывать FCTL_UPDATEPANEL в то время, когда он обрабатывает GetFindData. Наверное - не должен. И как должен Far реагировать на получение FCTL_UPDATEPANEL в то время, когда он УЖЕ выполняет FileList::UpdatePlugin. Вопрос спорный... Ведь та UpdatePlugin, которая была ранее отобразит "старые" данные - вторая UpdatePlugin УЖЕ обновила и показала панель. | ||||
Steps To Reproduce | Первый запуск плагина Network. Если уже запускался - unload: и load: Вводим команду net:\\server Enter получаем панель без ".." в настройке плагина флажок снят: [ ] Show .. in the providers | ||||
Additional Information | Стек вызовов. far.exe!FileList::UpdatePlugin(int KeepSelection=0, int IgnoreVisible=0) Line 673 C++ far.exe!FileList::Update(int Mode=0) Line 93 C++ far.exe!Panel::SetPluginCommand(int Command=2, int Param1=0, long Param2=0) Line 2424 + 0x19 bytes C++ far.exe!FarControl(void * hPlugin=0x00221868, int Command=2, int Param1=0, long Param2=0) Line 1445 + 0x14 bytes C++ Network.dll!NetBrowser::GotoComputer(const wchar_t * Dir=0x0013461c) Line 2027 C++ Network.dll!NetBrowser::GetFindData(PluginPanelItem * * pPanelItem=0x00134c98, int * pItemsNumber=0x00134c8c, int OpMode=0) Line 344 C++ Network.dll!GetFindDataW(void * hPlugin=0x00221868, PluginPanelItem * * pPanelItem=0x00134c98, int * pItemsNumber=0x00134c8c, int OpMode=0) Line 128 C++ far.exe!PluginW::GetFindData(void * hPlugin=0x00221868, PluginPanelItem * * pPanelItem=0x00134c98, int * pItemsNumber=0x00134c8c, int OpMode=0) Line 1112 + 0xad bytes C++ far.exe!PluginManager::GetFindData(void * hPlugin=0x03317e30, PluginPanelItem * * pPanelData=0x00134c98, int * pItemsNumber=0x00134c8c, int OpMode=0) Line 1007 + 0x2a bytes C++ far.exe!FileList::UpdatePlugin(int KeepSelection=0, int IgnoreVisible=0) Line 684 + 0x2b bytes C++ far.exe!FileList::Update(int Mode=0) Line 93 C++ far.exe!FileList::DisplayObject() Line 86 + 0x19 bytes C++ | ||||
Tags | No tags attached. | ||||
Build | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2010-09-23 11:34 | Maximus | New Issue |