View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000390 | Far Manager | Panel | public | 2007-11-30 01:52 | 2007-11-30 06:42 |
Reporter | Sten | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 1.80 alpha 1 | ||||
Summary | 0000390: Неверный цикл в PluginManager::OpenFilePlugin() | ||||
Description | Когда на панели файлов жмешь ENTER и установлены плагины, которые должны перехватывать это нажатие, и сами уметь "входить в файлы" (например плагины броузинга архивов), то они не работают. Из-за вот этого куска кода: HANDLE PluginManager::OpenFilePlugin(const wchar_t *Name, const unsigned char *Data, int DataSize, int OpMode) { ... for (int i = 0; i < PluginsCount; i++) { pPlugin = PluginsData[i]; ... HANDLE hPlugin = pPlugin->OpenFilePlugin (Name, Data, DataSize, OpMode); if ( (hPlugin == (HANDLE)-2) || (hPlugin == INVALID_HANDLE_VALUE) ) return hPlugin; // Sten: Странное место! PluginHandle *handle = new PluginHandle; handle->hPlugin = hPlugin; handle->pPlugin = pPlugin; return (HANDLE)handle; } } Там получается, что первый же установленный плагин, в моем случае Compare, который возвращает hPlugin == INVALID_HANDLE_VALUE, прерывает цикл, и остальные плагины даже не опрашиваются. Поэтому, я думаю, что в "Странном месте" вместо return надо вставить continue. В аттаче приложен соответствующий патч. | ||||
Tags | No tags attached. | ||||
Build | 363 | ||||
2007-11-30 01:56
|
plugins.cpp.diff (597 bytes)
Index: plugins.cpp =================================================================== --- plugins.cpp (revision 1327) +++ plugins.cpp (working copy) @@ -321,7 +321,6 @@ return FALSE; } - int PluginManager::LoadPlugin ( const wchar_t *lpwszModuleName, const FAR_FIND_DATA_EX *fdata, @@ -585,7 +584,7 @@ HANDLE hPlugin = pPlugin->OpenFilePlugin (Name, Data, DataSize, OpMode); if ( (hPlugin == (HANDLE)-2) || (hPlugin == INVALID_HANDLE_VALUE) ) - return hPlugin; + continue; PluginHandle *handle = new PluginHandle; handle->hPlugin = hPlugin; |
|
Не так надо править. Fixed in 363. |
Date Modified | Username | Field | Change |
---|---|---|---|
2007-11-30 01:52 | Sten | New Issue | |
2007-11-30 01:56 | Sten | File Added: plugins.cpp.diff | |
2007-11-30 06:39 | alexy | Status | new => assigned |
2007-11-30 06:39 | alexy | Assigned To | => alexy |
2007-11-30 06:42 | alexy | Build | => 363 |
2007-11-30 06:42 | alexy | Status | assigned => closed |
2007-11-30 06:42 | alexy | Note Added: 0000883 | |
2007-11-30 06:42 | alexy | Resolution | open => fixed |
2007-11-30 06:42 | alexy | Fixed in Version | => 1.80 alpha 1 |