Немодальный диалог затирается при обновлении редактора под ним
Можно после каждой перерисовки редактора принудительно перерисовывать диалог:
hDlg:send(F.DM_REDRAW)
far.Text()
Но это не выход, т.к. приводит к мерцанию.
В качестве примера можно использовать bito.lua
Можно проверить и без bito.lua
local F = far.Flags
local sd = require "far2.simpledialog"
local Items = {
flags=F.FDLG_NONMODAL;
{ tp="dbox"; text="Non-modal Dialog"; },
{ tp="text"; text="Enter the text:"; },
{ tp="edit"; },
}
local Dlg = sd.New(Items)
Dlg:Run()
editor.Redraw()
При исполнении этого кода из редактора диалога не видно. Если нажать F12, увидим, что есть диалог, и что он имеет фокус. Нажимаем Esc, меню Screens закрывается и появляется диалог.
Если из (обычного) диалога открыть редактор, а потом закрыть, то диалог окажется на фоне этого фантомного (уже закрытого) редактора.
(Подозреваю что тут сказываются те же проблемы оконной системы фар 2)
Оконная система там на мой взгляд требует капитальной перестройки. Некоторые вещи я починил, но это были скорее косметические фиксы. Тут нужен либо zg, либо много времени на изучение. Найду ли это время - вопрос.
Если из (обычного) диалога открыть редактор, а потом закрыть, то диалог окажется на фоне этого фантомного (уже закрытого) редактора.
А пример как это повторить можно?
А пример как это повторить можно?
Да там всё прямолинейно, просто editor.Editor(...) обработчике диалога.
Например в диалоге AskAI редактор открывается по нажатию кнопки.
Вот открываю из панелей диалог поиска LF Search, нажимаю F4, открывается редактор, нажимаю Esc, редактор закрывается, никакого фантома не видно.
@shmuz
local F = far.Flags
local function dialog (text, title)
local len = math.max(text:len(), title and title:len() or 0, 7)
local items = {
{F.DI_SINGLEBOX,0,0,len+4,3,0,0,0, 0, title},
{F.DI_TEXT, 2,1, 0,1,0,0,0,F.DIF_CENTERGROUP, text},
}
return far.Dialog(nil, -1, -1, len+4, 3, nil, items, nil, function (hDlg, Msg, idx, Param2)
if Msg==F.DN_KEY and far.KeyToName(Param2)=="F4" then
editor.Editor(_filename)
end
end)
end
local hDlg = dialog("Press F4, then Esc", name)
Благодарю.
Просто успел хорошо забыть, что у меня в simpledialog.lua есть
if (FarVer==2) then far.AdvControl("ACTL_REDRAWALL") end
"Проблему фантома" починил.