michaellukashov / Far-NetBox

SFTP/SCP/FTP/FTPS/WebDAV/S3 client for Far Manager 3 (http://farmanager.com/)
https://forum.farmanager.com/viewtopic.php?t=6317
GNU General Public License v2.0
159 stars 52 forks source link

Падение при выполнении команды Synchronize #359

Closed ssvine closed 7 months ago

ssvine commented 7 months ago

Пулл реквест

Падение происходит из-за того, что в диалоге Synchronization checklist в два списка загружаются элементы, которые не должны в этих списках освобождаться. Так как один из типов TFarListBox сделан так, что всегда владеет своими элементами, то был добавлен аргумент в SetList/SetItems, чтобы была возможность отказаться от владения.

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

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

michaellukashov commented 7 months ago

Спасибо