Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
NightRoman
Posts: 5924
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 13 times
Been thanked: 14 times
Contact:

Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Post by NightRoman »

Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Хелп по команде FCTL_CLOSEPLUGIN не слишком объемный, поэтому есть вопрос. Вот хелп по ней:
Closes the current plugin.
Param points to the name of the directory that will be set in the panel after closing the plugin.
Вот ситуация. Панель плагина закрывается командой FCTL_CLOSEPLUGIN с Param = NULL, то есть папку не указываем (это не документировано, но работает, считаем (или хотим), что «это можно» или «можно задокументировать»):

Code: Select all

Info.Control(handle, FCTL_CLOSEPLUGIN, 0, NULL);
Закрывается прекрасно и вместо нее открывается файловая панель Фара. Неожиданно и нежелательно то, что на панели Фара текущим является тот же элемент (по счету), что был на закрытой панели плагина, или последний, если у панели плагина номер текущего элемента превышал число элементов на только что открытой панели Фара.

Вопросы:
*) Можно ли использовать Param = NULL? Если нельзя, то может лучше возвращать ошибку, а не закрывать панель?
*) Если можно, то правильно ли описанное поведение с текущим элементом после закрытия плагина? Если правильное, то в чем логика?
*) Если неправильное, то надо текущим у Фара делать либо первый элемент (обычно точки) или, если такое возможно (а вдруг?), то тот элемент, что был изначально на этой панели до открытия плагина. Последний вариант был бы идеальным, но допускаю, что это технически может и не быть возможным.

User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 4 times

Re: Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Post by Skirda »

FCTL_CLOSEPLUGIN вместо NULL в FileList::SetCurDir передает пустую строку, т.к. она пуста, то функция ChangeDir не вызывается... (нужно учтонить в Писании про NULL)
На счет "тот же по счету элемент".... хмм... видимо недоработка (давно было, не помню, ковырять нужно поподробнее).
Здесь срабатывает (должен) Pop, дальше...
...по идеи при закрытии панели плагины мы должны вернуться к прежнему состоянию.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
NightRoman
Posts: 5924
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 13 times
Been thanked: 14 times
Contact:

Re: Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Post by NightRoman »

Решил реанимировать этот топик. Так это баг или фича, что Фар "не запоминает" состояние своей панели до запуска плагинной панели и, соответственно, "не восстанавливает" это состояние, когда мы закрываем панель плагина?

Собрался устранить этот недостаток в своих плагинных панелях. Раз Фар не делает восстановление оригинальной панели "как было", то пусть хоть мои панели делают это сами, а то очень неудобно в оригинальной панели при возврате терять текущий элемент (да и выделение тоже).

Не проблема, сделаю. Вопрос лишь в том насколько основательно это наворачивать. Поэтому и хочется знать, вдруг это планируется пофиксить\доработать в самом Фаре, тогда пока просто времянку сделаю. А если это фича Фара, то сделаю основательней. Ы?

User avatar
NightRoman
Posts: 5924
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 13 times
Been thanked: 14 times
Contact:

Re: Вопрос по FCTL_CLOSEPLUGIN с Param = NULL

Post by NightRoman »

Отослал на мантис, по-моему это-таки бага или недоработка
http://bugs.farmanager.com/view.php?id=1114

P.S. В FarNet я это исправлю, то есть все панели любого FarNet плагина по Close() будут восстанавливать оригинальную панель Фара с правильным текущим элементом и даже с теми же выделенными элементами, что и были до открытия плагинной панели. Но хотелось бы чтобы Фар это сам делал, да, что-то типа "Push/Pop", хотя бы для своих собственных файловых панелей.

Post Reply

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