diff --git a/src/Winfile.vcxproj.filters b/src/Winfile.vcxproj.filters
index 58538775..defa61fa 100644
--- a/src/Winfile.vcxproj.filters
+++ b/src/Winfile.vcxproj.filters
@@ -37,6 +37,7 @@
+
@@ -62,6 +63,7 @@
+
@@ -145,4 +147,4 @@
{a74d83f3-58ec-46d3-bb3d-fadca6ac5743}
-
+
\ No newline at end of file
diff --git a/src/wfdlgs.c b/src/wfdlgs.c
index ba385699..c897a50a 100644
--- a/src/wfdlgs.c
+++ b/src/wfdlgs.c
@@ -886,8 +886,24 @@ ActivateCommonContextMenu(HWND hwnd, HWND hwndLB, LPARAM lParam)
}
else
{
- SendMessage(hwndLB, LB_SETSEL, (WPARAM)FALSE, (LPARAM)-1);
- SendMessage(hwndLB, LB_SETSEL, (WPARAM)TRUE, (LPARAM)item);
+ // directory. Allow for multiselection
+ INT iMac = (INT)SendMessage(hwndLB, LB_GETSELCOUNT, 0, 0L);
+ LPINT lpSelItems = (LPINT)LocalAlloc(LMEM_FIXED, sizeof(INT) * iMac);
+ iMac = (INT)SendMessage(hwndLB,
+ LB_GETSELITEMS,
+ (WPARAM)iMac,
+ (LPARAM)lpSelItems);
+ boolean clickedOnSelected = 0;
+ for (int i = 0; i < iMac; i++) {
+ if (lpSelItems[i] == item) {
+ clickedOnSelected = 1;
+ }
+ }
+ if (!clickedOnSelected) { // clicked on something new, select it
+ SendMessage(hwndLB, LB_SETSEL, (WPARAM)FALSE, (LPARAM)-1);
+ SendMessage(hwndLB, LB_SETSEL, (WPARAM)TRUE, (LPARAM)item);
+ }
+ LocalFree((HLOCAL)lpSelItems);
BOOL bDir = FALSE;
SendMessage(hwnd, FS_GETSELECTION, 5, (LPARAM)&bDir);