View Issue Details

IDProjectCategoryView StatusLast Update
0002877WishesPlugins API.Dialogpublic2016-05-11 12:19
ReporterJohnDoeAssigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Product Version3.0 
Target VersionFixed in Version 
Summary0002877: DN_LISTHOTKEY в меню
Description1. В момент когда обработчик получает управление курсор уже перемещён на элемент, соответствующий хоткею.
Таким образом обработчик получает в Param2 избыточную информацию, и при этом нет возможности выяснить, какой из элементов был текущим в момент нажатия хоткея.

2. Если обработчик вернул значение, то курсор возвращается в исходную позицию, (как до нажатия хоткея). Можно предположить, что делается это для того, чтобы нейтрализовать пункт 1.
Однако таким образом обработчик лишён нормальной возможности произвольно изменить позицию курсора.

Предлагаю убрать эти автоманипуляции с курсором.
Или же, если перечисленные особенности чем-то обусловлены, то необходимо их документировать.
Steps To Reproducelocal F = far.Flags
Event { group="DialogEvent";
  condition=function(Event,param)
    return param.Msg==F.DN_LISTHOTKEY and Event==F.DE_DLGPROCINIT
  end;
  action=function(Event,param)
    far.Show(1)
    param.hDlg:send(F.DM_LISTSETCURPOS,param.Param1,{SelectPos=5})
    far.Show(2)
    return 1
  end;
}
Additional Informationhttp://api.farmanager.com/ru/dialogapi/dmsg/dn_listhotkey.html
http://forum.farmanager.com/viewtopic.php?p=126227#p126227
TagsNo tags attached.
Build

Activities

JohnDoe

2016-05-10 01:35

updater   bugnote:0014538

Пункт 2 исправлен в билде 4640

JohnDoe

2016-05-10 01:51

updater   bugnote:0014539

dn_listhotkey wrote


Событие DN_LISTHOTKEY оповещает обработчик о том, что пользователь для смены пункта в списке (DI_COMBOBOX, DI_LISTBOX) воспользовался горячими клавишами.
...
Return
FALSE - разрешить изменение.
TRUE - плагин сам отработал событие.


1. Из данного текста складывается впечатление, что обработчик сработает до смены позиции, и вернув TRUE можно избежать позиционирования.
В реальности это не так. То ли поведение стоит уточнить, то ли документацию.

2. Возможно я неправильно понял, но в следующем примере я не вижу разницы в поведении, возвращая TRUE или FALSE.

local F = far.Flags
Event { group="DialogEvent";
  condition=function(Event,param)
    return param.Msg==F.DN_LISTHOTKEY and Event==F.DE_DLGPROCINIT
  end;
  action=function(Event,param)
    return 0
    --return 1
  end;
}


В обоих случая поведение получается одинаковым, например в меню плагинов по хоткеям не происходит выполнения пунктов, а только лишь позиционирование.

zg

2016-05-10 14:29

developer   bugnote:0014540

у меня в листбоксах и комбобоксах в диалогах всё согласно документации.

JohnDoe

2016-05-11 10:59

updater   bugnote:0014542

Да, был неправ..
Прошу переименовать тикет: "DN_LISTHOTKEY в меню", и переместить в проект "Wishes"

Issue History

Date Modified Username Field Change
2014-12-07 00:33 JohnDoe New Issue
2016-05-10 01:35 JohnDoe Note Added: 0014538
2016-05-10 01:51 JohnDoe Note Added: 0014539
2016-05-10 14:29 zg Note Added: 0014540
2016-05-11 10:59 JohnDoe Note Added: 0014542
2016-05-11 12:18 2useven10 Category Plugins API.Dialog => _Common
2016-05-11 12:18 2useven10 Summary DN_LISTHOTKEY: недокументированные особенности => DN_LISTHOTKEY в меню
2016-05-11 12:18 2useven10 Project Far Manager => Wishes
2016-05-11 12:19 2useven10 Category _Common => Plugins API.Dialog