OberonCore
https://forum.oberoncore.ru/

TextCmds, почему ShowRange с focusOnly
https://forum.oberoncore.ru/viewtopic.php?f=23&t=6906
Страница 1 из 1

Автор:  arisu [ Воскресенье, 26 Февраль, 2023 06:00 ]
Заголовок сообщения:  TextCmds, почему ShowRange с focusOnly

в TextCmds, во внутренней процедуре Show написано так:
Код:
TextViews.ShowRange(t, beg, end, TextViews.focusOnly);
а почему не `TextViews.any`? в документации сказано такое:
If ~focusOnly, an arbitrary frame will be taken, where a target frame takes precedence over all but a front frame, which takes precedence over all other frames. If focusOnly, only a front (or if none exists, a target) frame is taken as a reference, and no repositioning takes place if neither a target nor a front frame is found.
если я правильно прочитал, то `any` тут делает то же самое, что и `focusOnly`, но если не вышло — то ищет ещё усердней. по идее, `any` ничего тут поломать не должно. и, кстати, может быть (а может и не быть) полезно для 2.0, потому что там активация новых окон немного… ну, своеобразная.

но в общем, мне просто интересно, по каким соображениям омики здесь сказали «только фокусы!» если кто-нибудь имеет ответ или предположения — поделитесь, пожалуйста.

Автор:  Иван Денисов [ Воскресенье, 26 Февраль, 2023 11:07 ]
Заголовок сообщения:  Re: TextCmds, почему ShowRange с focusOnly

Думаю, что связано с разным механизмом поиска кадра дальше
Код:
   PROCEDURE (v: StdView) ShowRange (beg, end: INTEGER; focusOnly: BOOLEAN);
      VAR fmsg: FindFocusFrameMsg; amsg: FindAnyFrameMsg; f: Views.Frame;
   BEGIN
      IF focusOnly THEN
         fmsg.view := v; fmsg.frame := NIL; Controllers.Forward(fmsg); f := fmsg.frame
      ELSE
         amsg.frame := NIL; Views.Broadcast(v, amsg); f := amsg.frame
      END;
      IF f # NIL THEN v.ShowRangeIn(f, beg, end) END
   END ShowRange;


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

Автор:  arisu [ Воскресенье, 26 Февраль, 2023 11:22 ]
Заголовок сообщения:  Re: TextCmds, почему ShowRange с focusOnly

причина довольно простая: в Mdi-режиме дерево фрэймов окна строится сразу после его открытия, а в тайлере — после следующей перерисовки из главного цикла. соответственно, в тайлере после открытия окна никак невозможно показать диапазон, потому что дерева фреймов-то нет ещё, непонятно куда и как показывать. (мы с Антоном Александровичем просто как раз эту тему обсуждаем, я тоже заинтересовался и побежал за объяснениями.)

p.s.: и, кстати, по этой же причине «any» совершенно не поможет (вроде как), я был неправ в своём предположении.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/