diff --git a/dll/win32/browseui/shellfind/CFindFolder.cpp b/dll/win32/browseui/shellfind/CFindFolder.cpp index 02a9ee27b0b..6d82ad55494 100644 --- a/dll/win32/browseui/shellfind/CFindFolder.cpp +++ b/dll/win32/browseui/shellfind/CFindFolder.cpp @@ -1229,6 +1229,21 @@ STDMETHODIMP CFindFolder::MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) return E_NOTIMPL; } +//// *** IItemNameLimits methods *** +STDMETHODIMP CFindFolder::GetMaxLength(LPCWSTR pszName, int *piMaxNameLen) +{ + CComPtr pLimits; + HRESULT hr = m_pisfInner->QueryInterface(IID_PPV_ARG(IItemNameLimits, &pLimits)); + return FAILED_UNEXPECTEDLY(hr) ? hr : pLimits->GetMaxLength(pszName, piMaxNameLen);; +} + +STDMETHODIMP CFindFolder::GetValidCharacters(LPWSTR *ppwszValidChars, LPWSTR *ppwszInvalidChars) +{ + CComPtr pLimits; + HRESULT hr = m_pisfInner->QueryInterface(IID_PPV_ARG(IItemNameLimits, &pLimits)); + return FAILED_UNEXPECTEDLY(hr) ? hr : pLimits->GetValidCharacters(ppwszValidChars, ppwszInvalidChars); +} + //// *** IPersistFolder2 methods *** STDMETHODIMP CFindFolder::GetCurFolder(PIDLIST_ABSOLUTE *pidl) { diff --git a/dll/win32/browseui/shellfind/CFindFolder.h b/dll/win32/browseui/shellfind/CFindFolder.h index 142a3e6265c..df63cce7877 100644 --- a/dll/win32/browseui/shellfind/CFindFolder.h +++ b/dll/win32/browseui/shellfind/CFindFolder.h @@ -16,6 +16,7 @@ class CFindFolder : public IShellFolder2, public IPersistFolder2, public IShellFolderViewCB, + public IItemNameLimits, public IConnectionPointContainerImpl, public IConnectionPointImpl { @@ -62,6 +63,10 @@ class CFindFolder : //// *** IShellFolderViewCB methods *** STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam); + //// *** IItemNameLimits methods *** + STDMETHOD(GetMaxLength)(LPCWSTR pszName, int *piMaxNameLen) override; + STDMETHOD(GetValidCharacters)(LPWSTR *ppwszValidChars, LPWSTR *ppwszInvalidChars) override; + private: LPITEMIDLIST m_pidl; CComPtr m_pisfInner, m_pSfDesktop; @@ -121,6 +126,7 @@ public: COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2) COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder) COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB) + COM_INTERFACE_ENTRY_IID(IID_IItemNameLimits, IItemNameLimits) COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2) COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder) COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist) diff --git a/dll/win32/shell32/folders/CFSFolder.h b/dll/win32/shell32/folders/CFSFolder.h index 654b80593ec..ec199836eae 100644 --- a/dll/win32/shell32/folders/CFSFolder.h +++ b/dll/win32/shell32/folders/CFSFolder.h @@ -97,13 +97,9 @@ class CFSFolder : GetValidCharacters(LPWSTR *ppwszValidChars, LPWSTR *ppwszInvalidChars) override { if (ppwszValidChars) - { *ppwszValidChars = NULL; - } if (ppwszInvalidChars) - { - SHStrDupW(INVALID_FILETITLE_CHARACTERSW, ppwszInvalidChars); - } + return SHStrDupW(INVALID_FILETITLE_CHARACTERSW, ppwszInvalidChars); return S_OK; }