View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003039 | Far Manager | Plugins API.Dialog | public | 2015-07-30 15:34 | 2015-07-30 15:35 |
Reporter | JohnDoe | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Product Version | 3.0 | ||||
Summary | 0003039: В DN_LISTHOTKEY невозможно изменить позицию | ||||
Description | Сказано: Return FALSE - разрешить изменение. TRUE - плагин сам отработал событие. В обработчике пытаюсь использовать DM_LISTSETCURPOS для установки позиции, и возвращаю 1. Ожидаю, что позиция курсора изменится, однако этого не происходит. | ||||
Steps To Reproduce | local F = far.Flags far.Dialog("",0,0,20,6,nil,{{"DI_LISTBOX",3,1,16,5,{{Text="&atext"},{Text="&btext"},{Text="&ctext"}},nil,nil,"DIF_LISTNOAMPERSAND"}},0,function(hDlg,Msg,Param1,Param2) if Msg==F.DN_LISTHOTKEY then hDlg:send("DM_LISTSETCURPOS",1,{SelectPos=3}) --far.AdvControl("ACTL_WAITKEY") return 1 end end) Если раскомментировать ACTL_WAITKEY, то можно заметить, что DM_LISTSETCURPOS отрабатывает нормально, но после этого фар зачем-то возвращает курсор в исходную позицию. | ||||
Additional Information | Последовательность событий, принимаемых обработчиком, такая: DN_CONTROLINPUT: table: 0x0d212618 DN_LISTHOTKEY: 2 DN_LISTCHANGE: 3 DN_LISTCHANGE: 3 Видно, что DN_LISTCHANGE с Param2==3 приходит 2 раза, что явно неправильно. local F = far.Flags local DN = {} for k,v in pairs(F) do if k:match"DN_" then DN[v] = k end end local ignore = {[F.DN_ENTERIDLE]=1,[F.DN_DRAWDIALOG]=1,[F.DN_DRAWDIALOGDONE]=1,[F.DN_DRAWDLGITEM]=1,[F.DN_DRAWDLGITEMDONE]=1,[F.DN_CTLCOLORDIALOG]=1,[F.DN_CTLCOLORDLGLIST]=1,} far.Dialog("",0,0,20,6,nil,{{"DI_LISTBOX",3,1,16,5,{{Text="&atext"},{Text="&btext"},{Text="&ctext"}},nil,nil,"DIF_LISTNOAMPERSAND"}},0,function(hDlg,Msg,Param1,Param2) if not ignore[Msg] then win.OutputDebugString(("%s: %s"):format(DN[Msg] or Msg,tostring(Param2))) end if Msg==F.DN_LISTHOTKEY then hDlg:send("DM_LISTSETCURPOS",1,{SelectPos=3}) far.AdvControl("ACTL_WAITKEY") mf.beep() return 1 end end) | ||||
Tags | No tags attached. | ||||
Build | |||||