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 в вышеупомянутые функции и установка на её место заглушки не должно сломать легальный код с точки зрения документации. за исключением двух оговорок, примеры для которых я жду вот уже практически два месяца.