M2Team / NanaZip

The 7-Zip derivative intended for the modern Windows experience
https://sourceforge.net/projects/nanazip/
Other
8.92k stars 224 forks source link

Implement fast drag drop support. #502

Open dinhngtu opened 1 month ago

dinhngtu commented 1 month ago

Fixes #353 and #371.

Provides fast drag-to-extract support for NanaZip FM. If the feature is enabled, dragging from the main window creates a directory with the name {<COPYHOOK_GUID>}.<HWND>. Directories with this name are intercepted by an external copy hook shell extension DragNotifier, which sends back a WM_COPYDATA message containing the destination drop path. Upon reception of WM_COPYDATA, NanaZip extracts selected files into the destination directory.

Todo list:

Due to many factors being undecided, this PR will remain a draft for now. Feedback is welcome.

MouriNaruto commented 2 weeks ago

I'm sorry for replying late because I'm busy on other coding things.

For NanaZip.Modern, it may be simpler for integrating the shell extension than the NanaZip.Classic. But I need to refresh the NanaZip.ShellExtension implementation first before I merge this PR.

I prefer the solution without shell extensions because I don't want to make shell extension for NanaZip.Classic because it's designed for portable app scenarios.

Kenji Mouri

dinhngtu commented 2 weeks ago

When trying to integrate copy hook into NanaZip.Modern, I ran into the issue that packaged shell extensions cannot run outside of package due to conditional ACEs (https://github.com/M2Team/NanaZip/issues/353#issuecomment-1868580641). That's why at the moment I've kept the extension external instead of building it into NanaZip.ShellExtension.