View Issue Details

IDProjectCategoryView StatusLast Update
0001640Far ManagerPlugins API.Dialogpublic2011-01-05 14:07
Reportershmuel Assigned ToDrKnS  
PrioritynormalSeverityminorReproducibilityrandom
Status closedResolutionfixed 
Platformx86OSWindows 
Product Version2.0 
Fixed in Version2.0 
Summary0001640: Необходимость сохранения строк между вызовами DialogInit и DialogFree
DescriptionСтолкнулся с весьма нежелательным эффектом при работе плагина, который, в частности, приводил к созданию ключей с "мусорными" именами под HKCU\Software\Far2\SavedDialogHistory. Связано это было с тем, что после вызова Info.DialogInit() плагин мог освобождать память, выделенную под имена ключей истории (FarDialogItem::History). Однако мне не удалось найти в Писании, что плагин должен сохранять эти (и другие?) строки в целости между вызовами DialogInit и DialogFree.

Поэтому кажется целесообразным:
-- либо внести такое указание в Писание
-- либо чтобы Фар в DialogInit() копировал строки, а не указатели
TagsNo tags attached.
Build1775

Activities

NightRoman

2010-12-29 17:57

reporter   bugnote:0006058

Я тоже вставал на эту граблю. Нехорошая фича, да.. И не сразу это всплывает, а мусор в реестре у некоторых юзеров осядет навсегда, даже когда будет исправлено в плагине.

Есть и другой нюанс-ограничение (и потому надо копировать данные истории, а не документацию править). Хотел из плагина в диалоге поменять историю динамически, причем, не в своем диалоге, а в любом, самого Фара, это можно через АПИ, нет проблем. Но: 1) теперь плагину нужно заботиться о том, чтобы этот указатель был живой - неудобно, но можно; 2) реальная трабла: а плагин в это время выгрузили, указатель - мусор, даже не смотря на старания плагина этого избежать.

NightRoman

2010-12-29 18:12

reporter   bugnote:0006059

Хотя, вспомнил, и по пункту 1, что я упомянул, была проблема, на которую пришлось просто плюнуть, решение было бы слишком дорогим. Менять историю динамически я хотел из PowerShellFar скрипта, который чуть ли третьего уровня "подплагин" (FarNet\PowerShellFar\script), и указателей там вообще нет в помине, они только на уровне FarNet. А в FarNet хранить эти строки я передумал, не так просто. Да и когда освобождать эту строку - непонятно, либо еще надо усложнять код, чтобы следить за закрытием диалога и есть ли у него эти истории, установленные извне.

shmuel

2010-12-29 18:29

developer   bugnote:0006060

Ну, я бы тоже предпочёл, чтобы Фар копировал строки к себе, иначе API получается какой-то корявый: вызываешь DialogInit, передаёшь все данные, казалось бы дело сделано. Ан нет.

Но если всё-таки это не будет принято к реализации, то хотя бы нужно документировать.

NightRoman

2010-12-29 18:59

reporter   bugnote:0006061

Кажется, что это просто нормальная недоделка при переходе с Фара 1 на 2. Ведь тотально все перевели с указателей на копирование, во всяком случае, в диалогах. А про поле истории просто забыли.

DrKnS

2011-01-05 08:57

administrator   bugnote:0006069

1775

shmuel

2011-01-05 12:47

developer   bugnote:0006070

1775 работает (проверял History).

Issue History

Date Modified Username Field Change
2010-12-29 15:26 shmuel New Issue
2010-12-29 17:57 NightRoman Note Added: 0006058
2010-12-29 18:12 NightRoman Note Added: 0006059
2010-12-29 18:29 shmuel Note Added: 0006060
2010-12-29 18:59 NightRoman Note Added: 0006061
2011-01-05 08:57 DrKnS Note Added: 0006069
2011-01-05 08:57 DrKnS Assigned To => DrKnS
2011-01-05 08:57 DrKnS Status new => feedback
2011-01-05 12:47 shmuel Note Added: 0006070
2011-01-05 12:47 shmuel Status feedback => assigned
2011-01-05 12:49 shmuel Status assigned => resolved
2011-01-05 14:07 DrKnS Build => 1775
2011-01-05 14:07 DrKnS Status resolved => closed
2011-01-05 14:07 DrKnS Resolution open => fixed
2011-01-05 14:07 DrKnS Fixed in Version => 2.0