Closed grechnik closed 7 years ago
LGTM
Думаю, надо добавить файл CONTRIBUTORS. Если не против туда попасть, то я его добавлю.
@VictorVG есть желание потестировать?
Соберу поглядим вечерком как вернусь. Я сейчас вылез на пару минут, но сделаем. Самому интересно.
Кстати, и у меня есть для всех полезный инструмент - Process Hacker v3.0.0.499 (там весь комплект + доки). Его новая система сборки мне понятна, но не понравилась - медлительная раз, инсталлер выходит громоздким - два. Так что я покуда старую пошлифую, да она и по времени делает вдвое больше работы примерно на 20% быстрее.
Думаю, надо добавить файл CONTRIBUTORS. Если не против туда попасть, то я его добавлю.
Не возражаю.
Соберу поглядим вечерком как вернусь.
@VictorVG: не забудь файлы *.lng тоже обновить, там несколько строк добавилось.
Предлагаю, кстати, заодно бампнуть версию плагина.
Хорошо, сделаю. Стоит чтобы самим не путаться.
Сделал таг 3.0.81.4700. Там только те изменения, которые внес @grechnik Бампнул версию в мастере до 3.0.82.4700. Добавил файл CONTRIBUTORS.md. Убрал RunningDialogs фреймворк, цель которого была поддерживать изменения диалогов не из главного потока. Решил вместо этого спрятать межпоточный маршалинг внутри методов класса FarDialog.
Ну и отлично. Я тут ту же цифирь .82 на хвост поставил. Сейчас пройдусь а то голова прям взрывается и посмотрим....
.lng все сверил с диффом там подвохов нет, и тесты 3.0.82.4700 прошли нормально. Положил готовые сборки Drag-n-Drop.7z - VC2015 поддерживает ХР и через SCons в VC2017 - этот вариант XP не поддерживает.
Похоже тут есть какая-то связь провоцирующая сбой в NetBox v2.4.3.483 (скорее всего ошибка там т.к. в версии 2.4.2.475 сбоев не происходит). К сожалению точнее сказать не удаётся т.к. ОС предлагает позвать отладчик после того как Far падает и я вижу только последствия событий, но поскольку без D&D сбой не происходит, то возникает предположение о наличии ошибки в коде NetBox (не просто так там libputty в VC2010 не собирается) последствием которой становится блокировка drgndrop_x86.hook, drgndrop_x86_64.hook, holder_x86.dnd и holder_x86_64.dnd - при попытке их удалить ОС выводит Acess Deened и список задач в которых используются данные модули.
Ошибка сидела в NetBox-е ибо версия 2.4,3,483 собранная из Git - 7c58c40bb0a74570f9e уже с D&D не падает.
Это хорошо
Естественно. Не ясно только почему сборочный скрипт вылетает в 2010-й, но в 2015-й собирает всё. Причём выяснилось ещё более интересное - в 2010-й NetBox не собирается скриптами - только в IDE, НО! только такая сборка не падает и нормально работает если запущен (видимо мы имеем дело с ошибкой компилятора ???) D&D, а сборка из VC2015 мгновенно падает с кодом исключения 0x40000015 при вызове NetBox-а.
Да, интересно - VC2015 сборка падает в CRT что удалось поймать только подсунув в каталог NetBox его PDB перед запуском. Одно не могу понять - что приводит к выводу сообщения в отладчике "Ссылка на объект не указывает на экземпляр объекта." - ошибка в VC++2015 либо накопление ошибок компиляции исходников NetBox при сборке которых выводится куча варнингов о возможной потере данных и некорректных операциях? Ну, с этим наверное Миша лучше меня разберётся, главное что точно выяснено что это скрытая ошибка NetBox v2.4.3.483, а наличие в ОЗУ запущенного D&D просто вызывает её проявление.
Комментарии по отдельным файлам:
SConstruct
,generated.h
: очевидная опечаткаgrowarry.h
: фикс бага, когда после убийства/падения процесса Far ломается drag-n-drop на панель Far до убийства/перезапускаholder_*.dnd
(отладчик говорит, что там получаетсяGrowOnlyArray
с_values=nullptr, _count=1, _capacity=16
, после чего все попытки обновления данных при запусках/завершениях Far валятся с Access Violation в_values[0]
, а добрая винда глотает исключения в wndproc вместо убийства процесса)hldrdefs.h
: два подчёркивания вOTHER__ARCH
выглядят как опечаткаmystring.h
,mystring.cpp
и первое из измененийfar.cpp
: я пару раз (во время отладки, когда что-то шло не так, но тем не менее) натыкался на ситуацию, когда в деструктореWinThread
->ToolWindow
->_data
оказывался ненулевым и по цепочке вызывал деструкторMyStringW
; посколькуWinThread
создаётся одним из первых, его деструктор вызывается одним из последних, когда финализатор внутриmystring.cpp
уже отработал. Эти добавления перемещают финализатор внутриmystring.cpp
на попозже остальные изменения вfar.cpp
, второе изменениеinpprcsr.cpp
,mainthrd.cpp
: на фаровском форуме кто-то сидит в Far в окне с вертикальной прокруткой, и панели Far необязательно совпадают с экранным буферомconfigure.h
,configure.cpp
, первое изменениеinpprcsr.cpp
и два последних элемента вdndlng.py
иddlng.h
: на фаровском форуме кто-то таки пробовал таскать правой кнопкой (не уточняя, правда, из Far или в Far), так что пусть будет опция для особо желающих. В принципе, наверное, можно сделать так, чтобы оно не противоречило показу меню по щелчку правой кнопкой, но надо код править, а мне влом, так что пусть будет radiobutton. Там же кто-то жаловался на то, что поле ввода для пикселей принимает только одну цифру; поскольку фича, управляемая этим полем, всё равно не реализована, имеет смысл выкинуть полеdatacont.cpp
,dircrtr.cpp
: на фаровском форуме жаловались на проблемы с корневой папкой (котораяC:\
и имеет слэш на конце, в отличие от всякихC:\somefolder
)dataobj.h
,dataobj.cpp
: бОльшая часть правок - поддержка CFSHELLIDLIST, без которой Explorer наотрез отказывается создавать ярлыки на драггаемые элементы;deleteFilesFromDataObj
- для поддержки сценария unoptimized move, когда таргет реализует операцию move как копирование + уведомление источника, что данные нужно удалить (Explorer с обычными файлами не делает так никогда, существование таргетов, поддерживающих move, но не optimized move для файлов, под большим вопросом, хотя теоретически возможно;deleteFilesFromDataObj
реализована в основном на случай, если кто-то когда-то захочет перемещать псевдофайлы с панелей плагинов, ну и для теоретической корректности)fardlg.cpp
: первое изменение - чтобы checkbox/radiobox в диалоге могли не только устанавливаться, но и сбрасываться (особенно заметно по Esc и повторному вызову диалога настроек), второе - потерявшийся флажок при переходе на Far3 APIdropprcs.h
,dropprcs.cpp
,thrdpool.h
,thrdpool.cpp
,wrkrthrd.h
,wrkrthrd.cpp
: пробрасывание поддерживаемых и запрошенной операции drag-n-drop до обработчиковfldsprcs.cpp
: добавлен комментарий, почему в остальной части файла не нужно ничего менять для поддержки movefilelist.h
,filelist.cpp
: вместо события "нашли папку" теперь два "зашли в папку" и "вышли из папки", для рекурсивного move нужно обрабатывать обаfilecopy.cpp
,filecopy.h
,hdrpprcs.h
,hdrpprcs.cpp
,cpydlg.h
,cpydlg.cpp
: реализация move и link операцийtoolwnd.h
,toolwnd.cpp
, три предпоследних элемента вdndlng.py
,ddlng.h
: разрешение таргету использовать move и link при драге из Far с указанием copy как предпочтительной операции (меньшая часть изменений); выбор операции при драге в Far (бОльшая часть изменений), с показом меню пользователю при драге правой кнопкойwinthrd.cpp
: события, открываемые в OpenEvent, создаются в `holder.dnd, а
holder_.dndзапускаются внутри
setHolder`