mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 08:30:21 +00:00
[SHELL32] Initial partial IShellFolderViewCB implementation.
This commit is contained in:
parent
3f15a0d473
commit
0d07967a27
2 changed files with 42 additions and 5 deletions
|
@ -72,6 +72,7 @@ class CDefView :
|
||||||
private:
|
private:
|
||||||
CComPtr<IShellFolder> m_pSFParent;
|
CComPtr<IShellFolder> m_pSFParent;
|
||||||
CComPtr<IShellFolder2> m_pSF2Parent;
|
CComPtr<IShellFolder2> m_pSF2Parent;
|
||||||
|
CComPtr<IShellFolderViewCB> m_pShellFolderViewCB;
|
||||||
CComPtr<IShellBrowser> m_pShellBrowser;
|
CComPtr<IShellBrowser> m_pShellBrowser;
|
||||||
CComPtr<ICommDlgBrowser> m_pCommDlgBrowser;
|
CComPtr<ICommDlgBrowser> m_pCommDlgBrowser;
|
||||||
CComPtr<IShellFolderViewDual> m_pShellFolderViewDual;
|
CComPtr<IShellFolderViewDual> m_pShellFolderViewDual;
|
||||||
|
@ -113,6 +114,7 @@ class CDefView :
|
||||||
private:
|
private:
|
||||||
HRESULT _MergeToolbar();
|
HRESULT _MergeToolbar();
|
||||||
BOOL _Sort();
|
BOOL _Sort();
|
||||||
|
VOID _DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CDefView();
|
CDefView();
|
||||||
|
@ -951,6 +953,8 @@ HRESULT CDefView::FillList()
|
||||||
/*turn the listview's redrawing back on and force it to draw*/
|
/*turn the listview's redrawing back on and force it to draw*/
|
||||||
m_ListView.SetRedraw(TRUE);
|
m_ListView.SetRedraw(TRUE);
|
||||||
|
|
||||||
|
_DoFolderViewCB(SFVM_LISTREFRESHED, NULL, NULL);
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1059,6 +1063,8 @@ LRESULT CDefView::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
|
||||||
m_hNotify = SHChangeNotifyRegister(m_hWnd, SHCNRF_InterruptLevel | SHCNRF_ShellLevel, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);
|
m_hNotify = SHChangeNotifyRegister(m_hWnd, SHCNRF_InterruptLevel | SHCNRF_ShellLevel, SHCNE_ALLEVENTS, SHV_CHANGE_NOTIFY, 1, &ntreg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* _DoFolderViewCB(SFVM_GETNOTIFY, ?? ??) */
|
||||||
|
|
||||||
m_hAccel = LoadAcceleratorsW(shell32_hInstance, MAKEINTRESOURCEW(IDA_SHELLVIEW));
|
m_hAccel = LoadAcceleratorsW(shell32_hInstance, MAKEINTRESOURCEW(IDA_SHELLVIEW));
|
||||||
|
|
||||||
UpdateStatusbar();
|
UpdateStatusbar();
|
||||||
|
@ -1410,6 +1416,8 @@ LRESULT CDefView::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled
|
||||||
::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
|
::MoveWindow(m_ListView, 0, 0, wWidth, wHeight, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_DoFolderViewCB(SFVM_SIZE, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1757,6 +1765,7 @@ LRESULT CDefView::OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandl
|
||||||
TRACE("-- LVN_ITEMCHANGED %p\n", this);
|
TRACE("-- LVN_ITEMCHANGED %p\n", this);
|
||||||
OnStateChange(CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */
|
OnStateChange(CDBOSC_SELCHANGE); /* the browser will get the IDataObject now */
|
||||||
UpdateStatusbar();
|
UpdateStatusbar();
|
||||||
|
_DoFolderViewCB(SFVM_SELECTIONCHANGED, NULL/* FIXME */, NULL/* FIXME */);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LVN_BEGINDRAG:
|
case LVN_BEGINDRAG:
|
||||||
|
@ -2588,6 +2597,8 @@ HRESULT STDMETHODCALLTYPE CDefView::CreateViewWindow3(IShellBrowser *psb, IShell
|
||||||
if (!*hwnd)
|
if (!*hwnd)
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
|
||||||
|
_DoFolderViewCB(SFVM_WINDOWCREATED, (WPARAM)m_hWnd, NULL);
|
||||||
|
|
||||||
SetWindowPos(HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
|
SetWindowPos(HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
|
||||||
UpdateWindow();
|
UpdateWindow();
|
||||||
|
|
||||||
|
@ -2796,8 +2807,11 @@ HRESULT STDMETHODCALLTYPE CDefView::GetItemSpacing(ITEMSPACING *spacing)
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CDefView::SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb)
|
HRESULT STDMETHODCALLTYPE CDefView::SetCallback(IShellFolderViewCB *new_cb, IShellFolderViewCB **old_cb)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%p %p) stub\n", this, new_cb, old_cb);
|
if (old_cb)
|
||||||
return E_NOTIMPL;
|
*old_cb = m_pShellFolderViewCB.Detach();
|
||||||
|
|
||||||
|
m_pShellFolderViewCB = new_cb;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT STDMETHODCALLTYPE CDefView::Select(UINT flags)
|
HRESULT STDMETHODCALLTYPE CDefView::Select(UINT flags)
|
||||||
|
@ -3231,6 +3245,14 @@ HRESULT CDefView::_MergeToolbar()
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID CDefView::_DoFolderViewCB(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
if (m_pShellFolderViewCB)
|
||||||
|
{
|
||||||
|
m_pShellFolderViewCB->MessageSFVCB(uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT CDefView_CreateInstance(IShellFolder *pFolder, REFIID riid, LPVOID * ppvOut)
|
HRESULT CDefView_CreateInstance(IShellFolder *pFolder, REFIID riid, LPVOID * ppvOut)
|
||||||
{
|
{
|
||||||
return ShellObjectCreatorInit<CDefView>(pFolder, riid, ppvOut);
|
return ShellObjectCreatorInit<CDefView>(pFolder, riid, ppvOut);
|
||||||
|
@ -3273,6 +3295,15 @@ HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv,
|
||||||
if (FAILED(hRes))
|
if (FAILED(hRes))
|
||||||
return hRes;
|
return hRes;
|
||||||
|
|
||||||
|
if (pcsfv->psfvcb)
|
||||||
|
{
|
||||||
|
CComPtr<IShellFolderView> sfv;
|
||||||
|
if (SUCCEEDED(psv->QueryInterface(IID_PPV_ARG(IShellFolderView, &sfv))))
|
||||||
|
{
|
||||||
|
sfv->SetCallback(pcsfv->psfvcb, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*ppsv = psv.Detach();
|
*ppsv = psv.Detach();
|
||||||
return hRes;
|
return hRes;
|
||||||
}
|
}
|
||||||
|
|
|
@ -369,18 +369,24 @@ CDefaultContextMenu::LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsi
|
||||||
|
|
||||||
CComPtr<IContextMenu> pcm;
|
CComPtr<IContextMenu> pcm;
|
||||||
hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IContextMenu, &pcm));
|
hr = SHCoCreateInstance(NULL, pclsid, NULL, IID_PPV_ARG(IContextMenu, &pcm));
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
ERR("SHCoCreateInstance(IContextMenu) failed.clsid %s hr 0x%x\n", wine_dbgstr_guid(pclsid), hr);
|
||||||
return hr;
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
CComPtr<IShellExtInit> pExtInit;
|
CComPtr<IShellExtInit> pExtInit;
|
||||||
hr = pcm->QueryInterface(IID_PPV_ARG(IShellExtInit, &pExtInit));
|
hr = pcm->QueryInterface(IID_PPV_ARG(IShellExtInit, &pExtInit));
|
||||||
if (FAILED_UNEXPECTEDLY(hr))
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
ERR("IContextMenu->QueryInterface(IShellExtInit) failed.clsid %s hr 0x%x\n", wine_dbgstr_guid(pclsid), hr);
|
||||||
return hr;
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
hr = pExtInit->Initialize(m_pidlFolder, m_pDataObj, hKey);
|
hr = pExtInit->Initialize(m_pidlFolder, m_pDataObj, hKey);
|
||||||
if (FAILED(hr))
|
if (FAILED(hr))
|
||||||
{
|
{
|
||||||
WARN("IShellExtInit::Initialize failed.clsid %s hr 0x%x\n", wine_dbgstr_guid(pclsid), hr);
|
ERR("IShellExtInit::Initialize failed.clsid %s hr 0x%x\n", wine_dbgstr_guid(pclsid), hr);
|
||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue