diff --git a/dll/win32/shell32/CDefView.cpp b/dll/win32/shell32/CDefView.cpp index 7cf9160df58..a07c7919818 100644 --- a/dll/win32/shell32/CDefView.cpp +++ b/dll/win32/shell32/CDefView.cpp @@ -1349,6 +1349,31 @@ HRESULT CDefView::FillFileMenu() } m_cidl = m_ListView.GetSelectedCount(); + if (m_cidl == 0) /* No selection */ + { + HMENU hContextMenu = ::CreatePopupMenu(); + + WCHAR szPath[MAX_PATH]; + if (SHGetPathFromIDListW(m_pidlParent, szPath)) + { + CComPtr pCM; + + // TODO: Insert CNewMenu + ... + } + + INT indexMenu = 0; + _InsertMenuItemW(hFileMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CREATELINK, MFT_STRING, MAKEINTRESOURCEW(IDS_CREATELINK), MFS_GRAYED); + _InsertMenuItemW(hFileMenu, indexMenu++, TRUE, FCIDM_SHVIEW_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_DELETE), MFS_GRAYED); + _InsertMenuItemW(hFileMenu, indexMenu++, TRUE, FCIDM_SHVIEW_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_RENAME), MFS_GRAYED); + _InsertMenuItemW(hFileMenu, indexMenu++, TRUE, FCIDM_SHVIEW_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_PROPERTIES), MFS_GRAYED); + _InsertMenuItemW(hFileMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED); + + Shell_MergeMenus(hFileMenu, hContextMenu, 0, 0, 0xFFFF, MM_SUBMENUSHAVEIDS); + ::DestroyMenu(hContextMenu); + + return S_OK; + } /* In case we still have this left over, clean it up! */ if (m_pFileMenu) @@ -1357,7 +1382,7 @@ HRESULT CDefView::FillFileMenu() m_pFileMenu.Release(); } /* Store the context menu in m_pFileMenu and keep it in order to invoke the selected command later on */ - HRESULT hr = GetItemObject((m_cidl ? SVGIO_SELECTION : SVGIO_BACKGROUND), IID_PPV_ARG(IContextMenu, &m_pFileMenu)); + HRESULT hr = GetItemObject(SVGIO_SELECTION, IID_PPV_ARG(IContextMenu, &m_pFileMenu)); if (FAILED_UNEXPECTEDLY(hr)) return hr;