Падение происходит из-за того, что в диалоге Synchronization checklist в два списка загружаются элементы, которые не должны в этих списках освобождаться. Так как один из типов TFarListBox сделан так, что всегда владеет своими элементами, то был добавлен аргумент в SetList/SetItems, чтобы была возможность отказаться от владения.
Помимо фикса падения сделано так, чтобы синхронизация работала при вызове команды из панели локальной системы.
Кроме того, в диалоге Synchronization checklist пофикшен выбор элемента (при нажатии пробела, +, -, Ins) - при изменениях можно заметить мерцание. Это происходит из-за того, что код использует функцию SetChecked, которая должна менять один единственный флаг LIF_CHECKED, но чтобы их поменять, она вызывает функцию GetFlags, использующую локальную копию флагов. На деле Far может устанавливать дополнительные флаги, которые влияют на положение курсора (LIF_SELECTED), поэтому при изменении флагов через локальную копию, отдельные флаги могут теряться, что приводит к изменению положения курсора.
Пулл реквест
Падение происходит из-за того, что в диалоге Synchronization checklist в два списка загружаются элементы, которые не должны в этих списках освобождаться. Так как один из типов TFarListBox сделан так, что всегда владеет своими элементами, то был добавлен аргумент в SetList/SetItems, чтобы была возможность отказаться от владения.
Помимо фикса падения сделано так, чтобы синхронизация работала при вызове команды из панели локальной системы.
Кроме того, в диалоге Synchronization checklist пофикшен выбор элемента (при нажатии пробела, +, -, Ins) - при изменениях можно заметить мерцание. Это происходит из-за того, что код использует функцию SetChecked, которая должна менять один единственный флаг LIF_CHECKED, но чтобы их поменять, она вызывает функцию GetFlags, использующую локальную копию флагов. На деле Far может устанавливать дополнительные флаги, которые влияют на положение курсора (LIF_SELECTED), поэтому при изменении флагов через локальную копию, отдельные флаги могут теряться, что приводит к изменению положения курсора.