Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
johnd0e opened this issue Oct 31, 2024 · 9 comments

Comments

@johnd0e
Copy link

johnd0e commented Oct 31, 2024

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

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

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

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

@shmuz
Copy link
Owner

shmuz commented Nov 1, 2024

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

@johnd0e
Copy link
Author

johnd0e commented Nov 6, 2024

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

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

@shmuz
Copy link
Owner

shmuz commented Nov 6, 2024

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

@shmuz
Copy link
Owner

shmuz commented Dec 17, 2024

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

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

@johnd0e
Copy link
Author

johnd0e commented Dec 17, 2024

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

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

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

@shmuz
Copy link
Owner

shmuz commented Dec 17, 2024

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

@johnd0e
Copy link
Author

johnd0e commented Dec 18, 2024

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

@shmuz
Copy link
Owner

shmuz commented Dec 18, 2024

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

@shmuz
Copy link
Owner

shmuz commented Dec 19, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants