ACTL_COMMIT

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

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

Postby John Doe » Tue 09 Sep, 2014 09:02

Latest post of the previous page:

вы так говорите, как будто я писал документацию и добавлял этот самый ACTL_COMMIT. хотя на самом деле, когда добавляли ACTL_COMMIT, я и альфатестером-то скорее всего не был.
Забавно.
Вначале вы ссылаетесь на эту самую документацию, а потом как бы и непричём.

у вас — одни сопли.
Вам мерещится.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Tue 09 Sep, 2014 09:05

John Doe wrote:Вначале вы ссылаетесь на эту самую документацию, а потом как бы и непричём.
так меня написанное устраивает, претензии предъявляете вы.

User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Tue 09 Sep, 2014 09:34

я не понимаю, если код был легальный, в соответствии с документацией
Вы рассуждаете о легальности, которая в документации она не определяется.
Претензии у меня не к документации, а к таким рассуждениям.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Tue 09 Sep, 2014 13:22

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: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Tue 09 Sep, 2014 13:37

конечно из-за двух дыр в описании возможны спорные случаи,
...и кто-то мог этим воспользоваться.
Это единственная мысль, которую я пытался донести. А уже страницу воду варим.
но ни одного реально примера кода я так за два месяца и не увидел.
За себя я сказал: больше не пользуюсь.
Претензий по этому поводу нет и не было. Всё устраивает.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Tue 09 Sep, 2014 16:25

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: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Postby gotar » Tue 09 Sep, 2014 17:32

А что, сделать заглушку вместо ACTL_COMMIT очень жестоко для писателей плагинов? Если да, предлагаю сделать флажок в far:config, определяющий стоит ли заглушка в обработчике ACTL_COMMIT. Разработчик плагина сможет разобраться нужен ли ему ACTL_COMMIT просто переустановив флажок. Если этот флажок в течение пары месяцев никому не потребуется ACTL_COMMIT можно будет сначала сделать ACTL_COMMIT depricated, а при очередном сломе API его убрать.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Tue 09 Sep, 2014 19:59

gotar wrote:А что, сделать заглушку вместо ACTL_COMMIT очень жестоко для писателей плагинов?
для чего конкретно вам нужен ACTL_COMMIT?

gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Postby gotar » Tue 09 Sep, 2014 21:45

Мне не нужен. Я плагины не пишу. Просто болтаю на тему о том как ACTL_COMMIT наиболее безболезненно удалить.

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Tue 09 Sep, 2014 22:02

gotar wrote:Мне не нужен. Я плагины не пишу. Просто болтаю на тему о том как ACTL_COMMIT наиболее безболезненно удалить.
для болтовни есть раздел «О тщете всего сущего». здесь — не надо.

User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Wed 10 Sep, 2014 07:38

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. far.Timer(1,function(timer)
  3.   timer:Close()
  4.   far.AdvControl (F.ACTL_COMMIT)
  5. end)

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Wed 10 Sep, 2014 17:12

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. far.Timer(1,function(timer)
  3.   timer:Close()
  4.   far.AdvControl (F.ACTL_COMMIT)
  5. end)
очевидно, что предлагаемое изменение никак не повлияет даже на такой код.

User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Thu 11 Sep, 2014 07:18

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

User avatar
zg
zero-gravity
Posts: 5227
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Postby zg » Thu 11 Sep, 2014 12:02

John Doe wrote:что если внести предлагаемые изменения, но ACTL_COMMIT не глушить, оставить для отладочных целей.
поделитесь методикой отладки с использованием ACTL_COMMIT.

User avatar
John Doe
Бюрократ
Posts: 11048
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 10 times
Been thanked: 63 times

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

Postby John Doe » Thu 11 Sep, 2014 13:58

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

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


Return to “Development”

Who is online

Users browsing this forum: No registered users and 1 guest