ACTL_COMMIT

Разработка Far.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

Latest post of the previous page:

вы так говорите, как будто я писал документацию и добавлял этот самый ACTL_COMMIT. хотя на самом деле, когда добавляли ACTL_COMMIT, я и альфатестером-то скорее всего не был.
Забавно.
Вначале вы ссылаетесь на эту самую документацию, а потом как бы и непричём.
у вас — одни сопли.
Вам мерещится.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

John Doe wrote:Вначале вы ссылаетесь на эту самую документацию, а потом как бы и непричём.
так меня написанное устраивает, претензии предъявляете вы.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

я не понимаю, если код был легальный, в соответствии с документацией
Вы рассуждаете о легальности, которая в документации она не определяется.
Претензии у меня не к документации, а к таким рассуждениям.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

John Doe wrote:Вы рассуждаете о легальности, которая в документации она не определяется.
в документации всё достаточно чётко сказано:
"Фиксирует" действие последней операции с окнами (например, после ACTL_SETCURRENTWINDOW).
т.е. как минимум перед вызовом ACTL_COMMIT должна присутствовать «операция с окнами» и к моменту вызова ACTL_COMMIT она ещё не достигла своего результата. т.е. например:

Code: Select all

ACTL_SETCURRENTWINDOW
ACTL_COMMIT
вполне соответствует документации. а вот например:

Code: Select all

ACTL_SETCURRENTWINDOW
Menu
ACTL_COMMIT
уже нет. потому что вызов ACTL_SETCURRENTWINDOW уже «зафиксирован», а других «операций с окнами», которые нужно «фиксировать» — нет.
или например если такой вариант:

Code: Select all

…начало любого экспорта…
RECTL_CREATE
ACTL_COMMIT
позволяет получить какую-то пользу, то эта польза является хаком, потому что «операции с окнами», которую нужно зафиксировать — нет, а в документации явно сказано, что она должна быть. надеюсь, что эти примеры со всей очевидностью доказывают, что возможно даже такую несовершенную документацию использовать для разграничения легального и нелегального кода. конечно из-за двух дыр в описании возможны спорные случаи, но ни одного реально примера кода я так за два месяца и не увидел.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

конечно из-за двух дыр в описании возможны спорные случаи,
...и кто-то мог этим воспользоваться.
Это единственная мысль, которую я пытался донести. А уже страницу воду варим.
но ни одного реально примера кода я так за два месяца и не увидел.
За себя я сказал: больше не пользуюсь.
Претензий по этому поводу нет и не было. Всё устраивает.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

John Doe wrote:
конечно из-за двух дыр в описании возможны спорные случаи,
...и кто-то мог этим воспользоваться.
дыры:
1. отсутствие списка функций, после которых можно вызывать ACTL_COMMIT.
2. отсутствие определения «операция с окнами».
очевидно, что имея список функций второй пункт по большому счёту и не нужен. и хоть списка в документации и нет, можно достаточно легально оценить его сверху. единственное действие, которое совершает ACTL_COMMIT — это обработка всех необработанных сообщений оконного менеджера. т.е. если какой-то вызов апи не создаёт новых сообщений (например RECTL_CREATE), либо создаёт, но сам же их обрабатывает (например Menu), то очевидно, что вызов ACTL_COMMIT после него не является легитимным. вызовы типа MCTL_SENDSTRING могут в теории оставлять необработанные сообщения, но так как в процессе их выполнения происходит возврат управления фару — никаких гарантий на этот счёт нет. в итоге, если я ничего не пропустил (всё ещё ожидаю примеров того, что я пропустил), остаётся всего три вызова:
ACTL_SETCURRENTWINDOW
VCTL_QUIT
ECTL_QUIT

1. ACTL_SETCURRENTWINDOW без последующего явного или неявного ACTL_COMMIT до недавнего времени либо валило фар, либо приводило к серьёзным визуальным глюкам. всё ещё ожидаю примеров, где это может быть полезно.
2. VCTL_QUIT и ECTL_QUIT работают не так, как должны по описанию. ваши же тесткейсы это демонстрируют.

таким образом интеграция ACTL_COMMIT в вышеупомянутые функции и установка на её место заглушки не должно сломать легальный код с точки зрения документации. за исключением двух оговорок, примеры для которых я жду вот уже практически два месяца.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Проблемы оконного менеджера

Post by gotar »

А что, сделать заглушку вместо ACTL_COMMIT очень жестоко для писателей плагинов? Если да, предлагаю сделать флажок в far:config, определяющий стоит ли заглушка в обработчике ACTL_COMMIT. Разработчик плагина сможет разобраться нужен ли ему ACTL_COMMIT просто переустановив флажок. Если этот флажок в течение пары месяцев никому не потребуется ACTL_COMMIT можно будет сначала сделать ACTL_COMMIT depricated, а при очередном сломе API его убрать.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

gotar wrote:А что, сделать заглушку вместо ACTL_COMMIT очень жестоко для писателей плагинов?
для чего конкретно вам нужен ACTL_COMMIT?
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Проблемы оконного менеджера

Post by gotar »

Мне не нужен. Я плагины не пишу. Просто болтаю на тему о том как ACTL_COMMIT наиболее безболезненно удалить.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

gotar wrote:Мне не нужен. Я плагины не пишу. Просто болтаю на тему о том как ACTL_COMMIT наиболее безболезненно удалить.
для болтовни есть раздел «О тщете всего сущего». здесь — не надо.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

zg wrote:таким образом интеграция ACTL_COMMIT в вышеупомянутые функции и установка на её место заглушки не должно сломать легальный код с точки зрения документации
Когда сталкиваюсь с непонятным поведением, то всегда пробую вставить ACTL_COMMIT. Иногда помогает.
Интегрировать в две вышеупомянутые функции полагаю не помешает. Но и саму функцию возможно стоит оставить, хотя бы для диагностики.

Сейчас использую ACTL_COMMIT для обхода такого бага при переключении между вьюверами: http://bugs.farmanager.com/view.php?id=2789
  1. far.AdvControl (F.ACTL_SETCURRENTWINDOW,w.Pos)
  2.  
  3. far.Timer(1,function(timer)
  4.  
  5.   timer:Close()
  6.  
  7.   far.AdvControl (F.ACTL_COMMIT)
  8.  
  9. end)
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

John Doe wrote:Сейчас использую ACTL_COMMIT для обхода такого бага при переключении между вьюверами: http://bugs.farmanager.com/view.php?id=2789
в актуальной версии фара — проблемы нет.
John Doe wrote:
  1. far.AdvControl (F.ACTL_SETCURRENTWINDOW,w.Pos)
  2.  
  3. far.Timer(1,function(timer)
  4.  
  5.   timer:Close()
  6.  
  7.   far.AdvControl (F.ACTL_COMMIT)
  8.  
  9. end)
очевидно, что предлагаемое изменение никак не повлияет даже на такой код.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

zg wrote:очевидно, что предлагаемое изменение никак не повлияет даже на такой код.
Вопрос был обратный, что если внести предлагаемые изменения, но ACTL_COMMIT не глушить, оставить для отладочных целей.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Проблемы оконного менеджера

Post by zg »

John Doe wrote:что если внести предлагаемые изменения, но ACTL_COMMIT не глушить, оставить для отладочных целей.
поделитесь методикой отладки с использованием ACTL_COMMIT.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Re: Проблемы оконного менеджера

Post by John Doe »

Называется "метод Тыка".
Если что-то не работает как хочется, то пробуем вставить костылик в виде ACTL_COMMIT.
Если помогает, репортим на мантис. Дальше возможны 2 варианта.
- в фар вносятся исправления. Костылик выбрасываем.
- в исправлениях отказывают, мотивируя тем, что всё работает по документации. Костылик оставляем.

Моё дело предложить. Спорить не намерен, делайте как считаете правильным.
Post Reply

Return to “Development”