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);