View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001301 | Far Manager | Plugins API.Dialog | public | 2010-03-11 11:49 | 2021-09-06 11:41 |
Reporter | shmuel | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | reopened | ||
Product Version | 2.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0001301: Ошибки при выполнении DM_LISTUPDATE, DN_LISTCHANGE | ||||
Description | 1. В листбоксе 6 элементов. Посылаю DM_LISTUPDATE с изменением текста для элемента с индексом 4 (пятый сверху). Что наблюдается: а) если этот элемент не был выделен, то никаких видимых изменений не произойдёт, покуда листбокс не получит фокус - тогда элемент перерисуется. Выделение не изменится. б) если этот элемент был выделен, перерисовка произойдёт сразу, но выделение перескочит на верхний элемент списка. 2. Не вижу разницы реакции Фара на возвращаемое значение диалоговой процедуры при обработке DN_LISTCHANGE. То-есть реакция всё время такова: "разрешить изменение". | ||||
Tags | No tags attached. | ||||
Build | 3847 | ||||
related to | 0003642 | new | Wishes | DN_LISTCHANGE в меню |
|
1b. LIF_SELECTED поди в флагах не указан? |
|
1b. Не был указан. Если его указать, то поведение становится как в 1a. |
|
1. Поправил в 1450. 2. Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE? Если разработчик меняет элемент с помощью DM_LISTUPDATE и т.п., то он знает что делает и дополнительная проверка на допустимость изменений не нужна. Если пользователь выбирает элемент в списке, то тоже непонятно зачем надо это действие отменять. Предлагаю убрать анализ кода возврата DN_LISTCHANGE. |
|
> Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE а как же диалоговые плагины? |
|
> Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE Например, если пользователь выбрал элемент, несовместимый с состояниями других контролов, обработчик может выдать подсказку и отменить выбор данного элемента. (Лучше, конечно, автоматически выставлять LIF_DISABLE для таких элементов). |
|
как бы разобрались, в писании какие-то уточнения требуются? закрываем? |
|
можно закрыть. у меня в плаге DM_LISTUPDATE отрабатывает нормально. |
|
Есть дополнения по этому Инцу или закрываем как отработанный? (судя по коду сейчас проблем быть не должно) |
|
По 2-му пункту (насчёт DN_LISTCHANGE) ничего не изменилось за 4 года существования данного инца. По прежнему нет соответствия между описанием в энциклопедии и поведением Фара. |
|
> По 2-му пункту (насчёт DN_LISTCHANGE) ничего не изменилось Приведи, pls, небольшой плагин (ну или скрипт), который только эту проблему показывает. Я пока (визуально) не нашёл криминала в сорца диалогово АПИ. |
|
|
|
Приложен файл testcombo.zip. |
|
Расскажи что сделать, чтобы увидеть...? |
|
В энциклопедии о DN_LISTCHANGE говорится следующее: > Return > TRUE - разрешить изменение (и соответственно отрисовку того, что пользователь ввёл) > FALSE - запретить изменение. Так это _я_ спрашиваю, как это увидеть - см. пункт 2 описания данного инца. |
|
Если заменить в скрипте DI_LISTBOX на DI_COMBOBOX, то кое-что проясняется, то-есть возвращаемое значение DN_LISTCHANGE действительно влияет на поведение. В энц. ничего не сказано об этом. Где (и кому) "пользователь ввёл"? Где должна быть "отрисовка того, что пользователь ввёл"? И в DI_COMBOBOX выплыл другой баг - навигация по списку с помощью стрелок поломана странным образом, если DN_LISTCHANGE возвращает 0. |
|
DN_LISTCHANGE посылается перед изменением позиции курсора в списке. Некорректно описание сделано (видимо копипаст с DN_EDITCHANGE; бывает). Должно быть так: --------------------------- Событие DN_LISTCHANGE оповещает обработчик об изменении позиции курсора элемента списка (DI_COMBOBOX, DI_LISTBOX, DIF_HISTORY). Return TRUE - разрешить изменение позиции курсора. FALSE - запретить изменение позиции курсора. --------------------------- |
|
> Некорректно описание сделано Тогда продолжим после исправления описания, иначе ерунда получается. |
|
описание исправил |
|
|
|
Приложил файл testcombo2.zip - упрощённый вариант 1-го файла. Итак, проблемы такие: 1. Для DI_LISTBOX возвращаемое значение 0 из DN_LISTCHANGE не препятствует изменению позиции. 2. Для DI_COMBOBOX - полный бардак, в т.ч. со значением Param2. |
|
1. починил 2. разбираюсь |
|
shmuel, примени приаттаченный патч (m0001301.1.diff.7z) и проверь, pls. С DI_COMBOBOX возможно где-то еще нужно "подкручивать", а DI_LISTBOX должен пахать. И поясни фразу "в т.ч. со значением Param2", чуть более конкретно, что с Param2 не так. В нем должна быть новая позиция курсорной полоски в листе. |
|
С этим патчем всё вроде заработало. |
|
build 3843 |
|
Проверяю билд 3844: 1. Если DN_LISTCHANGE возвращает 1, всё нормально. 2. Если DN_LISTCHANGE возвращает 0, при использовании клавиш навигации всё нормально, но для DI_LISTBOX наблюдаются прыжки туда-обратно, тогда как как для DI_COMBOBOX прыжков нет. 3. Как для DI_LISTBOX, так и для DI_COMBOBOX, возвращение 0 из DN_LISTCHANGE не препятствует переходу по горячей клавише. |
|
3. Здесь срабатывает DN_LISTHOTKEY. DN_LISTCHANGE в этом случае не приходит. Делаем вот так? if(DN_LISTHOTKEY) if(DN_LISTCHANGE) изменяем позицию Т.е. плагину приходит DN_LISTHOTKEY, если он его игнорирует (или возвращает false), то следом идет DN_LISTCHANGE (с соответствующей реакцией). |
|
> 3. Здесь срабатывает DN_LISTHOTKEY. DN_LISTCHANGE в этом случае не приходит. Да, верно. Тогда тикет можно закрывать (прыжки туда-обратно вроде не запрещены документацией). |
|
> if(DN_LISTHOTKEY) > if(DN_LISTCHANGE) > изменяем позицию Да, так, пожалуй, правильнее будет. |
|
shmuel, проверь, pls, на m0001301.2.diff (базируется на build 3844) |
|
Полностью этот патч не проверил, но обнаружил, что он поломал Param2 в DN_LISTHOTKEY: в нём передаётся текущая позиция, а не соответствующая хоткею. Так что сначала надо это исправить. |
|
После этих правок отвалилось управление комбобоксом с клавиатуры. В 3846 поправил, особо не вникая, если что не так - извиняйте. |
|
Проверял 3846, там есть такое (только для DI_LISTBOX): если нажать хоткей, и DN_LISTHOTKEY вернёт 0 (т.е. разрешение), то следом приходит DN_LISTCHANGE, возвращаемое значение которого уже ни на что не влияет - смена позиции произойдёт. А вообще это неконсистентно и неинтуитивно, что разрешение в DN_LISTHOTKEY это возврат FALSE, а в DN_LISTCHANGE это возврат TRUE. |
|
Еще тест: m0001301.3.diff.7z (в аттаче, основан на bild 3846) |
|
С 3-м патчем перестали работать хоткеи в DI_LISTBOX. Ты эти патчи-то сам проверяешь? За кадром: хоткей срабатывает, но перерисовки листбокса не происходит, поэтому визуально ничего не меняется. Но при навигации вверх-вниз перемещение происходит относительно положения, указанного хоткеем. |
|
Тестирую, но в ограничено: менюхи отрабатывают - ок, смещение есть/нет - ок... Приведи полный тест (или расскажи что ты делаешь)... По сути - 4-й патч (m0001301.4.diff). |
|
1. Установи макрос "Запуск скрипта из редактора", приведенный в статье "Примеры" в macroapi_manual.ru.chm. Этот макрос по нажатию CtrlF10 сохраняет файл в редакторе (если он не сохранён) и запускает этот файл как скрипт. То-есть, ты можешь сделать изменение в коде, затем нажать CtrlF10, и будет исполнен уже изменённый код. 2. Открой в редакторе testcombo2.lua (для чего-то ведь я его приложил здесь, да?) и играйся с ним, изменяя DI_LISTBOX на DI_COMBOBOX и обратно, изменяя возвращаемые значения событий. Так можно довольно легко проверить всю функциональность. |
|
Попробовал 4-й патч (применил его к билду 3846). Проблема с неперерисовкой, проявляющаяся с 3-м патчем, не устранена. (Возможно там есть ещё пяток проблем - я прекращаю проверку при обнаружении первой же проблемы). |
|
Непрорисовка была только для DI_LISTBOX (мог бы сразу написать :-)) 5-й патч (m0001301.5.diff). Основан на build 3846. На всякий случай - обработка изменения позиций в листах вынесена в класс VMenu (DN_LISTHOTKEY и DN_LISTCHANGE). |
|
6-й патч - не пахали менюхи |
|
> Непрорисовка была только для DI_LISTBOX (мог бы сразу написать :-)) Было сразу написано: http://bugs.farmanager.com/view.php?id=1301#c12066 |
|
Проверил 6-й патч: практически всё красиво, заметил только один глюк: в DI_LISTBOX при выборе пункта мышью событие DN_LISTCHANGE приходит дважды. |
|
|
|
7-й патч |
|
7-й патч: вроде нормально. |
|
После 3847 событие DN_LISTCHANGE перестало приходить вообще: Event{ group="DialogEvent"; action=function(Event,Param) if Param.Msg==far.Flags.DN_LISTCHANGE then far.Show"DN_LISTCHANGE" end end } |
|
Уточнение: в листбоксе и комбобоксе сообщение приходит. Проблема в меню, списке истории, списке автодополнения. |
|
> После 3847 событие DN_LISTCHANGE перестало приходить вообще: [...] > Проблема в меню, списке истории, списке автодополнения. Надо бы починить. |
|
Сейчас проверил, обе заявленные в описании тикета проблемы разрешены. Поэтому закрываю. В сообщениях по данному тикету есть упоминание о других проблемах. По другим проблемам можно открыть новые тикеты, если эти проблемы до сих пор существуют. |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-03-11 11:49 | shmuel | New Issue | |
2010-03-11 13:32 | zg | Note Added: 0005053 | |
2010-03-11 14:10 | shmuel | Note Added: 0005054 | |
2010-03-21 23:52 | chupakabra | Status | new => assigned |
2010-03-21 23:52 | chupakabra | Assigned To | => chupakabra |
2010-03-22 00:15 | chupakabra | Note Added: 0005088 | |
2010-03-22 00:15 | chupakabra | Status | assigned => feedback |
2010-03-22 02:21 | zg | Note Added: 0005089 | |
2010-03-22 16:34 | shmuel | Note Added: 0005092 | |
2010-03-22 16:34 | shmuel | Status | feedback => assigned |
2010-03-22 19:28 | chupakabra | Status | assigned => new |
2010-03-23 01:40 | chupakabra | Assigned To | chupakabra => |
2011-09-10 09:03 | samlyukov | Note Added: 0007646 | |
2013-03-22 07:16 | samlyukov | Note Added: 0010590 | |
2014-03-20 10:08 | vskirdin | Note Added: 0011988 | |
2014-03-20 11:52 | shmuel | Note Added: 0011990 | |
2014-03-20 12:13 | vskirdin | Note Added: 0011991 | |
2014-03-20 14:06 | shmuel | File Added: testcombo.zip | |
2014-03-20 14:07 | shmuel | Note Added: 0011999 | |
2014-03-21 05:15 | vskirdin | Note Added: 0012010 | |
2014-03-21 10:26 | shmuel | Note Added: 0012014 | |
2014-03-21 11:12 | shmuel | Note Added: 0012016 | |
2014-03-25 07:54 | vskirdin | Note Added: 0012025 | |
2014-03-25 08:05 | shmuel | Note Added: 0012026 | |
2014-03-25 08:12 | vskirdin | Note Added: 0012027 | |
2014-03-25 15:07 | shmuel | File Added: testcombo2.zip | |
2014-03-25 15:13 | shmuel | Note Added: 0012034 | |
2014-03-26 12:06 | vskirdin | Note Added: 0012035 | |
2014-03-26 13:31 | vskirdin | File Added: m0001301.1.diff.7z | |
2014-03-26 13:33 | vskirdin | Note Added: 0012036 | |
2014-03-26 17:24 | shmuel | Note Added: 0012043 | |
2014-03-27 05:35 | vskirdin | Note Added: 0012045 | |
2014-03-27 05:35 | vskirdin | Assigned To | => vskirdin |
2014-03-27 05:35 | vskirdin | Status | new => feedback |
2014-03-27 11:05 | shmuel | Note Added: 0012048 | |
2014-03-27 11:05 | shmuel | Status | feedback => assigned |
2014-03-27 12:14 | vskirdin | Note Added: 0012049 | |
2014-03-27 14:11 | shmuel | Note Added: 0012054 | |
2014-03-27 14:12 | shmuel | Status | assigned => resolved |
2014-03-27 15:32 | shmuel | Note Added: 0012055 | |
2014-03-27 15:32 | shmuel | Status | resolved => assigned |
2014-03-28 05:47 | vskirdin | File Added: m0001301.2.diff.7z | |
2014-03-28 05:48 | vskirdin | Note Added: 0012056 | |
2014-03-28 17:02 | shmuel | Note Added: 0012057 | |
2014-03-28 17:02 | shmuel | Note Edited: 0012057 | |
2014-03-30 10:29 | DrKnS | Note Added: 0012061 | |
2014-03-30 11:37 | shmuel | Note Added: 0012062 | |
2014-03-30 11:38 | shmuel | Note Edited: 0012062 | |
2014-03-30 11:55 | shmuel | Note Edited: 0012062 | |
2014-03-31 08:01 | vskirdin | File Added: m0001301.3.diff.7z | |
2014-03-31 08:03 | vskirdin | Note Added: 0012064 | |
2014-03-31 18:25 | shmuel | Note Added: 0012066 | |
2014-03-31 19:01 | shmuel | Note Edited: 0012066 | |
2014-04-01 06:48 | vskirdin | File Added: m0001301.4.diff.7z | |
2014-04-01 06:52 | vskirdin | Note Added: 0012069 | |
2014-04-01 07:48 | shmuel | Note Added: 0012071 | |
2014-04-01 18:40 | shmuel | Note Added: 0012072 | |
2014-04-02 06:57 | vskirdin | File Added: m0001301.5.diff.7z | |
2014-04-02 06:57 | vskirdin | File Deleted: m0001301.1.diff.7z | |
2014-04-02 06:57 | vskirdin | File Deleted: m0001301.2.diff.7z | |
2014-04-02 06:57 | vskirdin | File Deleted: m0001301.3.diff.7z | |
2014-04-02 06:57 | vskirdin | File Deleted: m0001301.4.diff.7z | |
2014-04-02 07:01 | vskirdin | Note Added: 0012075 | |
2014-04-02 12:01 | vskirdin | File Added: m0001301.6.diff.7z | |
2014-04-02 12:01 | vskirdin | Note Added: 0012085 | |
2014-04-02 12:01 | vskirdin | File Deleted: m0001301.5.diff.7z | |
2014-04-02 16:48 | shmuel | Note Added: 0012089 | |
2014-04-02 20:44 | shmuel | Note Added: 0012090 | |
2014-04-03 13:01 | vskirdin | File Added: m0001301.7.diff.7z | |
2014-04-03 13:01 | vskirdin | File Deleted: m0001301.6.diff.7z | |
2014-04-03 13:02 | vskirdin | Note Added: 0012092 | |
2014-04-03 18:45 | shmuel | Note Added: 0012097 | |
2014-04-03 18:45 | shmuel | Status | assigned => resolved |
2014-04-03 18:56 | vskirdin | Build | => 3847 |
2014-04-03 18:56 | vskirdin | Status | resolved => closed |
2014-04-03 18:56 | vskirdin | Resolution | open => fixed |
2014-04-03 18:56 | vskirdin | Fixed in Version | => 3.0 |
2014-07-11 15:04 | JohnDoe | Note Added: 0012736 | |
2014-07-11 15:04 | JohnDoe | Status | closed => feedback |
2014-07-11 15:04 | JohnDoe | Resolution | fixed => reopened |
2014-07-14 09:04 | JohnDoe | Note Added: 0012739 | |
2014-09-07 19:11 | shmuel | Note Added: 0013011 | |
2014-09-07 19:11 | shmuel | Status | feedback => assigned |
2018-08-21 14:21 | JohnDoe | Relationship added | related to 0003642 |
2021-09-06 11:41 | shmuel | Status | assigned => closed |
2021-09-06 11:41 | shmuel | Note Added: 0017159 |