View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001640 | Far Manager | Plugins API.Dialog | public | 2010-12-29 15:26 | 2011-01-05 14:07 |
Reporter | shmuel | Assigned To | DrKnS | ||
Priority | normal | Severity | minor | Reproducibility | random |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Windows | OS Version | XP SP3 |
Product Version | 2.0 | ||||
Fixed in Version | 2.0 | ||||
Summary | 0001640: Необходимость сохранения строк между вызовами DialogInit и DialogFree | ||||
Description | Столкнулся с весьма нежелательным эффектом при работе плагина, который, в частности, приводил к созданию ключей с "мусорными" именами под HKCU\Software\Far2\SavedDialogHistory. Связано это было с тем, что после вызова Info.DialogInit() плагин мог освобождать память, выделенную под имена ключей истории (FarDialogItem::History). Однако мне не удалось найти в Писании, что плагин должен сохранять эти (и другие?) строки в целости между вызовами DialogInit и DialogFree. Поэтому кажется целесообразным: -- либо внести такое указание в Писание -- либо чтобы Фар в DialogInit() копировал строки, а не указатели | ||||
Tags | No tags attached. | ||||
Build | 1775 | ||||
|
Я тоже вставал на эту граблю. Нехорошая фича, да.. И не сразу это всплывает, а мусор в реестре у некоторых юзеров осядет навсегда, даже когда будет исправлено в плагине. Есть и другой нюанс-ограничение (и потому надо копировать данные истории, а не документацию править). Хотел из плагина в диалоге поменять историю динамически, причем, не в своем диалоге, а в любом, самого Фара, это можно через АПИ, нет проблем. Но: 1) теперь плагину нужно заботиться о том, чтобы этот указатель был живой - неудобно, но можно; 2) реальная трабла: а плагин в это время выгрузили, указатель - мусор, даже не смотря на старания плагина этого избежать. |
|
Хотя, вспомнил, и по пункту 1, что я упомянул, была проблема, на которую пришлось просто плюнуть, решение было бы слишком дорогим. Менять историю динамически я хотел из PowerShellFar скрипта, который чуть ли третьего уровня "подплагин" (FarNet\PowerShellFar\script), и указателей там вообще нет в помине, они только на уровне FarNet. А в FarNet хранить эти строки я передумал, не так просто. Да и когда освобождать эту строку - непонятно, либо еще надо усложнять код, чтобы следить за закрытием диалога и есть ли у него эти истории, установленные извне. |
|
Ну, я бы тоже предпочёл, чтобы Фар копировал строки к себе, иначе API получается какой-то корявый: вызываешь DialogInit, передаёшь все данные, казалось бы дело сделано. Ан нет. Но если всё-таки это не будет принято к реализации, то хотя бы нужно документировать. |
|
Кажется, что это просто нормальная недоделка при переходе с Фара 1 на 2. Ведь тотально все перевели с указателей на копирование, во всяком случае, в диалогах. А про поле истории просто забыли. |
|
1775 |
|
1775 работает (проверял 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 |