Проблема с FCTL_CLOSEPANEL

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Проблема с FCTL_CLOSEPANEL

Post by Ariman »

При портировании плагина на Far3 столкнулся с небольшой проблемой. В версии для Far2 у меня есть такой кусок кода

Code: Select all

int WINAPI SetDirectoryW(HANDLE hPlugin, const wchar_t *Dir, int OpMode)
{
      ...  
      FarSInfo.Control(hPlugin, FCTL_CLOSEPLUGIN, 0, (LONG_PTR) wszStoragePath);
      ...
      PanelInfo pi = {0};
      if (FarSInfo.Control(PANEL_ACTIVE, FCTL_GETPANELINFO, 0, (LONG_PTR)&pi))
      {
      ...
}
В двойке все работает, приходит вызов ClosePluginW, после вызова FCTL_GETPANELINFO в структуре данные от файловой панели, и после выхода из функции панель закрыта. Но в Far3 аналогичный вызов ничего не даёт. Панель остаётся за плагином, ClosePanelW не вызывается и PanelInfo содержит инфу про мою панель, а не файловую.
Код в версии для Far3 такой

Code: Select all

int WINAPI SetDirectoryW(const SetDirectoryInfo* sdInfo)
{
      ...
      FarSInfo.PanelControl(sdInfo->hPanel, FCTL_CLOSEPANEL, 0, wszStoragePath);
      ...
      PanelInfo pi = {0};
      if (FarSInfo.PanelControl(PANEL_ACTIVE, FCTL_GETPANELINFO, 0, &pi))
      {
      ...
Собственно вопрос: это надо теперь как-то по другому делать, это баг или я что-то не понимаю?
User avatar
Alexey Samlyukov
Posts: 1765
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 7 times
Contact:

Re: Проблема с FCTL_CLOSEPANEL

Post by Alexey Samlyukov »

кстати, так делать нельзя:
PanelInfo pi = {0};

а где StructSize?
Это поле должно содержать размер структуры PanelInfo.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: Проблема с FCTL_CLOSEPANEL

Post by Ariman »

Alexey Samlyukov wrote:а где StructSize?
Спасибо, прозевал появление этого поля в тройке. Правда, судя по ченжлогу, проверку размера внутри Far-а только сегодня добавили :)
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Проблема с FCTL_CLOSEPANEL

Post by t-rex »

А можно демо плагин с сорцами показывающий проблему? И на мантис.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: Проблема с FCTL_CLOSEPANEL

Post by Ariman »

t-rex wrote:А можно демо плагин с сорцами показывающий проблему? И на мантис.
Попробую выдрать со своего плагина код для тестов.

В описании я, оказывается, обманул немного. Подебажил немного код и вспомнил как я этот кусок реализовывал. Вызов FCTL_CLOSEPLUGIN и раньше панель не закрывал (странная команда какая-то). Процесс закрытия запускала идущая следующей команда FCTL_SETPANELDIR на PANEL_ACTIVE (во время этого уже приезжал вызов ClosePluginW). А вот теперь этого и не происходит.
Ariman
Posts: 1351
Joined: Fri 30 Nov, 2007 15:32
Location: Крым
Has thanked: 15 times
Been thanked: 50 times
Contact:

Re: Проблема с FCTL_CLOSEPANEL

Post by Ariman »

Фух. Решил проблему. Оказывается в FarPanelDirectory при инициализации свой гуид пихать не надо было (что, по идее, вполне логично). Вызов FCTL_SETPANELDIRECTORY при этом отрабатывает, но не так как надо.
Извиняюсь что развёл панику. :)
Post Reply

Return to “Разработка плагинов”