far2m icon indicating copy to clipboard operation
far2m copied to clipboard

Немодальный диалог затирается при обновлении редактора под ним

Open johnd0e opened this issue 1 year ago • 9 comments

Можно после каждой перерисовки редактора принудительно перерисовывать диалог:

      hDlg:send(F.DM_REDRAW)
      far.Text()

Но это не выход, т.к. приводит к мерцанию.

В качестве примера можно использовать bito.lua

johnd0e avatar Oct 31 '24 20:10 johnd0e

Можно проверить и без 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 закрывается и появляется диалог.

shmuz avatar Nov 01 '24 22:11 shmuz

Если из (обычного) диалога открыть редактор, а потом закрыть, то диалог окажется на фоне этого фантомного (уже закрытого) редактора.

(Подозреваю что тут сказываются те же проблемы оконной системы фар 2)

johnd0e avatar Nov 06 '24 22:11 johnd0e

Оконная система там на мой взгляд требует капитальной перестройки. Некоторые вещи я починил, но это были скорее косметические фиксы. Тут нужен либо zg, либо много времени на изучение. Найду ли это время - вопрос.

shmuz avatar Nov 06 '24 22:11 shmuz

Если из (обычного) диалога открыть редактор, а потом закрыть, то диалог окажется на фоне этого фантомного (уже закрытого) редактора.

А пример как это повторить можно?

shmuz avatar Dec 17 '24 16:12 shmuz

А пример как это повторить можно?

Да там всё прямолинейно, просто editor.Editor(...) обработчике диалога.

Например в диалоге AskAI редактор открывается по нажатию кнопки.

johnd0e avatar Dec 17 '24 17:12 johnd0e

Вот открываю из панелей диалог поиска LF Search, нажимаю F4, открывается редактор, нажимаю Esc, редактор закрывается, никакого фантома не видно.

shmuz avatar Dec 17 '24 18:12 shmuz

@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)

johnd0e avatar Dec 18 '24 20:12 johnd0e

Благодарю. Просто успел хорошо забыть, что у меня в simpledialog.lua есть if (FarVer==2) then far.AdvControl("ACTL_REDRAWALL") end

shmuz avatar Dec 18 '24 20:12 shmuz

"Проблему фантома" починил.

shmuz avatar Dec 19 '24 00:12 shmuz