View Issue Details

IDProjectCategoryView StatusLast Update
0001301Far ManagerPlugins API.Dialogpublic2021-09-06 10:41
Reportershmuel Assigned Tovskirdin  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionreopened 
Product Version2.0 
Fixed in Version3.0 
Summary0001301: Ошибки при выполнении DM_LISTUPDATE, DN_LISTCHANGE
Description1. В листбоксе 6 элементов. Посылаю DM_LISTUPDATE с изменением текста для элемента с индексом 4 (пятый сверху). Что наблюдается:
а) если этот элемент не был выделен, то никаких видимых изменений не произойдёт, покуда листбокс не получит фокус - тогда элемент перерисуется. Выделение не изменится.
б) если этот элемент был выделен, перерисовка произойдёт сразу, но выделение перескочит на верхний элемент списка.

2. Не вижу разницы реакции Фара на возвращаемое значение диалоговой процедуры при обработке DN_LISTCHANGE. То-есть реакция всё время такова: "разрешить изменение".
TagsNo tags attached.
Build3847

Relationships

related to 0003642 new Wishes DN_LISTCHANGE в меню 

Activities

zg

2010-03-11 13:32

developer   bugnote:0005053

1b. LIF_SELECTED поди в флагах не указан?

shmuel

2010-03-11 14:10

developer   bugnote:0005054

1b. Не был указан. Если его указать, то поведение становится как в 1a.

chupakabra

2010-03-22 00:15

developer   bugnote:0005088

1. Поправил в 1450.

2. Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE? Если разработчик меняет элемент с помощью DM_LISTUPDATE и т.п., то он знает что делает и дополнительная проверка на допустимость изменений не нужна. Если пользователь выбирает элемент в списке, то тоже непонятно зачем надо это действие отменять. Предлагаю убрать анализ кода возврата DN_LISTCHANGE.

zg

2010-03-22 02:21

developer   bugnote:0005089

> Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE
а как же диалоговые плагины?

shmuel

2010-03-22 16:34

developer   bugnote:0005092

> Какой вообще смысл разрешать/запрещать изменения в DN_LISTCHANGE
Например, если пользователь выбрал элемент, несовместимый с состояниями других контролов, обработчик может выдать подсказку и отменить выбор данного элемента. (Лучше, конечно, автоматически выставлять LIF_DISABLE для таких элементов).

samlyukov

2011-09-10 08:03

reporter   bugnote:0007646

как бы разобрались, в писании какие-то уточнения требуются? закрываем?

samlyukov

2013-03-22 07:16

reporter   bugnote:0010590

можно закрыть. у меня в плаге DM_LISTUPDATE отрабатывает нормально.

vskirdin

2014-03-20 10:08

administrator   bugnote:0011988

Есть дополнения по этому Инцу или закрываем как отработанный?
(судя по коду сейчас проблем быть не должно)

shmuel

2014-03-20 11:52

developer   bugnote:0011990

По 2-му пункту (насчёт DN_LISTCHANGE) ничего не изменилось за 4 года существования данного инца. По прежнему нет соответствия между описанием в энциклопедии и поведением Фара.

vskirdin

2014-03-20 12:13

administrator   bugnote:0011991

> По 2-му пункту (насчёт DN_LISTCHANGE) ничего не изменилось
Приведи, pls, небольшой плагин (ну или скрипт), который только эту проблему показывает. Я пока (визуально) не нашёл криминала в сорца диалогово АПИ.

shmuel

2014-03-20 14:06

developer  

testcombo.zip (864 bytes)

shmuel

2014-03-20 14:07

developer   bugnote:0011999

Приложен файл testcombo.zip.

vskirdin

2014-03-21 05:15

administrator   bugnote:0012010

Расскажи что сделать, чтобы увидеть...?

shmuel

2014-03-21 10:26

developer   bugnote:0012014

В энциклопедии о DN_LISTCHANGE говорится следующее:

> Return
> TRUE - разрешить изменение (и соответственно отрисовку того, что пользователь ввёл)
> FALSE - запретить изменение.

Так это _я_ спрашиваю, как это увидеть - см. пункт 2 описания данного инца.

shmuel

2014-03-21 11:12

developer   bugnote:0012016

Если заменить в скрипте DI_LISTBOX на DI_COMBOBOX, то кое-что проясняется, то-есть возвращаемое значение DN_LISTCHANGE действительно влияет на поведение. В энц. ничего не сказано об этом. Где (и кому) "пользователь ввёл"? Где должна быть "отрисовка того, что пользователь ввёл"?

И в DI_COMBOBOX выплыл другой баг - навигация по списку с помощью стрелок поломана странным образом, если DN_LISTCHANGE возвращает 0.

vskirdin

2014-03-25 07:54

administrator   bugnote:0012025

DN_LISTCHANGE посылается перед изменением позиции курсора в списке.
Некорректно описание сделано (видимо копипаст с DN_EDITCHANGE; бывает).
Должно быть так:
---------------------------
Событие DN_LISTCHANGE оповещает обработчик об изменении позиции курсора элемента списка (DI_COMBOBOX, DI_LISTBOX, DIF_HISTORY).
Return
TRUE - разрешить изменение позиции курсора.
FALSE - запретить изменение позиции курсора.
---------------------------

shmuel

2014-03-25 08:05

developer   bugnote:0012026

> Некорректно описание сделано

Тогда продолжим после исправления описания, иначе ерунда получается.

vskirdin

2014-03-25 08:12

administrator   bugnote:0012027

описание исправил

shmuel

2014-03-25 15:07

developer  

testcombo2.zip (537 bytes)

shmuel

2014-03-25 15:13

developer   bugnote:0012034

Приложил файл testcombo2.zip - упрощённый вариант 1-го файла.
Итак, проблемы такие:
1. Для DI_LISTBOX возвращаемое значение 0 из DN_LISTCHANGE не препятствует изменению позиции.
2. Для DI_COMBOBOX - полный бардак, в т.ч. со значением Param2.

vskirdin

2014-03-26 12:06

administrator   bugnote:0012035

1. починил
2. разбираюсь

vskirdin

2014-03-26 13:33

administrator   bugnote:0012036

shmuel, примени приаттаченный патч (m0001301.1.diff.7z) и проверь, pls.
С DI_COMBOBOX возможно где-то еще нужно "подкручивать", а DI_LISTBOX должен пахать.
И поясни фразу "в т.ч. со значением Param2", чуть более конкретно, что с Param2 не так. В нем должна быть новая позиция курсорной полоски в листе.

shmuel

2014-03-26 17:24

developer   bugnote:0012043

С этим патчем всё вроде заработало.

vskirdin

2014-03-27 05:35

administrator   bugnote:0012045

build 3843

shmuel

2014-03-27 11:05

developer   bugnote:0012048

Проверяю билд 3844:

1. Если DN_LISTCHANGE возвращает 1, всё нормально.

2. Если DN_LISTCHANGE возвращает 0, при использовании клавиш навигации всё нормально, но для DI_LISTBOX наблюдаются прыжки туда-обратно, тогда как как для DI_COMBOBOX прыжков нет.

3. Как для DI_LISTBOX, так и для DI_COMBOBOX, возвращение 0 из DN_LISTCHANGE не препятствует переходу по горячей клавише.

vskirdin

2014-03-27 12:14

administrator   bugnote:0012049

3. Здесь срабатывает DN_LISTHOTKEY. DN_LISTCHANGE в этом случае не приходит.

Делаем вот так?

if(DN_LISTHOTKEY)
  if(DN_LISTCHANGE)
    изменяем позицию


Т.е. плагину приходит DN_LISTHOTKEY, если он его игнорирует (или возвращает false), то следом идет DN_LISTCHANGE (с соответствующей реакцией).

shmuel

2014-03-27 14:11

developer   bugnote:0012054

> 3. Здесь срабатывает DN_LISTHOTKEY. DN_LISTCHANGE в этом случае не приходит.

Да, верно. Тогда тикет можно закрывать (прыжки туда-обратно вроде не запрещены документацией).

shmuel

2014-03-27 15:32

developer   bugnote:0012055

> if(DN_LISTHOTKEY)
> if(DN_LISTCHANGE)
> изменяем позицию

Да, так, пожалуй, правильнее будет.

vskirdin

2014-03-28 05:48

administrator   bugnote:0012056

shmuel, проверь, pls, на m0001301.2.diff (базируется на build 3844)

shmuel

2014-03-28 17:02

developer   bugnote:0012057

Last edited: 2014-03-28 17:02

Полностью этот патч не проверил, но обнаружил, что он поломал Param2 в DN_LISTHOTKEY: в нём передаётся текущая позиция, а не соответствующая хоткею.
Так что сначала надо это исправить.

DrKnS

2014-03-30 09:29

administrator   bugnote:0012061

После этих правок отвалилось управление комбобоксом с клавиатуры.
В 3846 поправил, особо не вникая, если что не так - извиняйте.

shmuel

2014-03-30 10:37

developer   bugnote:0012062

Last edited: 2014-03-30 10:55

Проверял 3846, там есть такое (только для DI_LISTBOX):
если нажать хоткей, и DN_LISTHOTKEY вернёт 0 (т.е. разрешение), то следом приходит DN_LISTCHANGE, возвращаемое значение которого уже ни на что не влияет - смена позиции произойдёт.

А вообще это неконсистентно и неинтуитивно, что разрешение в DN_LISTHOTKEY это возврат FALSE, а в DN_LISTCHANGE это возврат TRUE.

vskirdin

2014-03-31 07:03

administrator   bugnote:0012064

Еще тест: m0001301.3.diff.7z (в аттаче, основан на bild 3846)

shmuel

2014-03-31 17:25

developer   bugnote:0012066

Last edited: 2014-03-31 18:01

С 3-м патчем перестали работать хоткеи в DI_LISTBOX. Ты эти патчи-то сам проверяешь?

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

vskirdin

2014-04-01 05:52

administrator   bugnote:0012069

Тестирую, но в ограничено: менюхи отрабатывают - ок, смещение есть/нет - ок...
Приведи полный тест (или расскажи что ты делаешь)...

По сути - 4-й патч (m0001301.4.diff).

shmuel

2014-04-01 06:48

developer   bugnote:0012071

1. Установи макрос "Запуск скрипта из редактора", приведенный в статье "Примеры" в macroapi_manual.ru.chm. Этот макрос по нажатию CtrlF10 сохраняет файл в редакторе (если он не сохранён) и запускает этот файл как скрипт. То-есть, ты можешь сделать изменение в коде, затем нажать CtrlF10, и будет исполнен уже изменённый код.

2. Открой в редакторе testcombo2.lua (для чего-то ведь я его приложил здесь, да?) и играйся с ним, изменяя DI_LISTBOX на DI_COMBOBOX и обратно, изменяя возвращаемые значения событий. Так можно довольно легко проверить всю функциональность.

shmuel

2014-04-01 17:40

developer   bugnote:0012072

Попробовал 4-й патч (применил его к билду 3846). Проблема с неперерисовкой, проявляющаяся с 3-м патчем, не устранена.

(Возможно там есть ещё пяток проблем - я прекращаю проверку при обнаружении первой же проблемы).

vskirdin

2014-04-02 06:01

administrator   bugnote:0012075

Непрорисовка была только для DI_LISTBOX (мог бы сразу написать :-))

5-й патч (m0001301.5.diff). Основан на build 3846.

На всякий случай - обработка изменения позиций в листах вынесена в класс VMenu (DN_LISTHOTKEY и DN_LISTCHANGE).

vskirdin

2014-04-02 11:01

administrator   bugnote:0012085

6-й патч - не пахали менюхи

shmuel

2014-04-02 15:48

developer   bugnote:0012089

> Непрорисовка была только для DI_LISTBOX (мог бы сразу написать :-))

Было сразу написано: http://bugs.farmanager.com/view.php?id=1301#c12066

shmuel

2014-04-02 19:44

developer   bugnote:0012090

Проверил 6-й патч: практически всё красиво, заметил только один глюк:
в DI_LISTBOX при выборе пункта мышью событие DN_LISTCHANGE приходит дважды.

vskirdin

2014-04-03 12:01

administrator  

m0001301.7.diff.7z (3,526 bytes)

vskirdin

2014-04-03 12:02

administrator   bugnote:0012092

7-й патч

shmuel

2014-04-03 17:45

developer   bugnote:0012097

7-й патч: вроде нормально.

JohnDoe

2014-07-11 14:04

updater   bugnote:0012736

После 3847 событие DN_LISTCHANGE перестало приходить вообще:

Event{ group="DialogEvent";
  action=function(Event,Param)
    if Param.Msg==far.Flags.DN_LISTCHANGE then
      far.Show"DN_LISTCHANGE"
    end
  end
}

JohnDoe

2014-07-14 08:04

updater   bugnote:0012739

Уточнение: в листбоксе и комбобоксе сообщение приходит.

Проблема в меню, списке истории, списке автодополнения.

shmuel

2014-09-07 18:11

developer   bugnote:0013011

> После 3847 событие DN_LISTCHANGE перестало приходить вообще:
[...]
> Проблема в меню, списке истории, списке автодополнения.

Надо бы починить.

shmuel

2021-09-06 10:41

developer   bugnote:0017159

Сейчас проверил, обе заявленные в описании тикета проблемы разрешены. Поэтому закрываю.

В сообщениях по данному тикету есть упоминание о других проблемах. По другим проблемам можно открыть новые тикеты, если эти проблемы до сих пор существуют.

Issue History

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 08: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 09:29 DrKnS Note Added: 0012061
2014-03-30 10:37 shmuel Note Added: 0012062
2014-03-30 10:38 shmuel Note Edited: 0012062
2014-03-30 10:55 shmuel Note Edited: 0012062
2014-03-31 07:01 vskirdin File Added: m0001301.3.diff.7z
2014-03-31 07:03 vskirdin Note Added: 0012064
2014-03-31 17:25 shmuel Note Added: 0012066
2014-03-31 18:01 shmuel Note Edited: 0012066
2014-04-01 05:48 vskirdin File Added: m0001301.4.diff.7z
2014-04-01 05:52 vskirdin Note Added: 0012069
2014-04-01 06:48 shmuel Note Added: 0012071
2014-04-01 17:40 shmuel Note Added: 0012072
2014-04-02 05:57 vskirdin File Added: m0001301.5.diff.7z
2014-04-02 05:57 vskirdin File Deleted: m0001301.1.diff.7z
2014-04-02 05:57 vskirdin File Deleted: m0001301.2.diff.7z
2014-04-02 05:57 vskirdin File Deleted: m0001301.3.diff.7z
2014-04-02 05:57 vskirdin File Deleted: m0001301.4.diff.7z
2014-04-02 06:01 vskirdin Note Added: 0012075
2014-04-02 11:01 vskirdin File Added: m0001301.6.diff.7z
2014-04-02 11:01 vskirdin Note Added: 0012085
2014-04-02 11:01 vskirdin File Deleted: m0001301.5.diff.7z
2014-04-02 15:48 shmuel Note Added: 0012089
2014-04-02 19:44 shmuel Note Added: 0012090
2014-04-03 12:01 vskirdin File Added: m0001301.7.diff.7z
2014-04-03 12:01 vskirdin File Deleted: m0001301.6.diff.7z
2014-04-03 12:02 vskirdin Note Added: 0012092
2014-04-03 17:45 shmuel Note Added: 0012097
2014-04-03 17:45 shmuel Status assigned => resolved
2014-04-03 17:56 vskirdin Build => 3847
2014-04-03 17:56 vskirdin Status resolved => closed
2014-04-03 17:56 vskirdin Resolution open => fixed
2014-04-03 17:56 vskirdin Fixed in Version => 3.0
2014-07-11 14:04 JohnDoe Note Added: 0012736
2014-07-11 14:04 JohnDoe Status closed => feedback
2014-07-11 14:04 JohnDoe Resolution fixed => reopened
2014-07-14 08:04 JohnDoe Note Added: 0012739
2014-09-07 18:11 shmuel Note Added: 0013011
2014-09-07 18:11 shmuel Status feedback => assigned
2018-08-21 13:21 JohnDoe Relationship added related to 0003642
2021-09-06 10:41 shmuel Status assigned => closed
2021-09-06 10:41 shmuel Note Added: 0017159