mirror of
https://github.com/reactos/reactos.git
synced 2025-06-24 19:50:27 +00:00
[RSHELL]
* Some menu style improvements. * Some code style improvements. * Added a skeleton CMergedFolder, as a base towards showing items from both the user and the common start menus. It does not work yet. CORE-7586 svn path=/branches/shell-experiments/; revision=62330
This commit is contained in:
parent
53f74feb2d
commit
58931088c3
10 changed files with 510 additions and 10 deletions
|
@ -13,6 +13,7 @@ list(APPEND SOURCE
|
|||
CMenuFocusManager.cpp
|
||||
CMenuSite.cpp
|
||||
CMenuToolbars.cpp
|
||||
CMergedFolder.cpp
|
||||
CStartMenu.cpp
|
||||
misc.cpp
|
||||
wraplog.cpp
|
||||
|
|
|
@ -709,6 +709,8 @@ HRESULT STDMETHODCALLTYPE CMenuBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wPa
|
|||
break;
|
||||
}
|
||||
|
||||
cdraw->iListGap += 4;
|
||||
|
||||
*theResult = CDRF_NOTIFYPOSTPAINT | TBCDRF_NOBACKGROUND | TBCDRF_NOEDGES | TBCDRF_NOOFFSET | TBCDRF_NOMARK | 0x00800000; // FIXME: the last bit is Vista+, for debugging only
|
||||
return S_OK;
|
||||
|
||||
|
@ -903,6 +905,7 @@ HRESULT CMenuBand::_OnPopupSubMenu(INT popupItem, IMenuPopup * popup, POINTL * p
|
|||
if (popup)
|
||||
{
|
||||
IUnknown_SetSite(popup, m_subMenuParent);
|
||||
|
||||
popup->Popup(pAt, pExclude, MPPF_RIGHT);
|
||||
}
|
||||
if (m_staticToolbar) m_staticToolbar->InvalidateDraw();
|
||||
|
|
|
@ -25,7 +25,6 @@ class CMenuSFToolbar;
|
|||
class CMenuFocusManager;
|
||||
|
||||
class CMenuBand :
|
||||
public CComCoClass<CMenuBand>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IDeskBand,
|
||||
public IObjectWithSite,
|
||||
|
|
|
@ -25,9 +25,8 @@ typedef CWinTraits<
|
|||
> CMenuWinTraits;
|
||||
|
||||
class CMenuDeskBar :
|
||||
public CWindowImpl<CMenuDeskBar, CWindow, CMenuWinTraits>,
|
||||
public CComCoClass<CMenuDeskBar>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public CWindowImpl<CMenuDeskBar, CWindow, CMenuWinTraits>,
|
||||
public IOleCommandTarget,
|
||||
public IServiceProvider,
|
||||
public IInputObjectSite,
|
||||
|
|
|
@ -75,11 +75,12 @@ HRESULT CMenuToolbarBase::UpdateImageLists()
|
|||
if (m_menuBand->UseBigIcons())
|
||||
{
|
||||
shiml = SHIL_LARGE;
|
||||
SendMessageW(m_hwndToolbar, TB_SETPADDING, 0, MAKELPARAM(0, 0));
|
||||
SendMessageW(m_hwndToolbar, TB_SETPADDING, 0, MAKELPARAM(4, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
shiml = SHIL_SMALL;
|
||||
SendMessageW(m_hwndToolbar, TB_SETPADDING, 0, MAKELPARAM(4, 4));
|
||||
}
|
||||
|
||||
IImageList * piml;
|
||||
|
|
337
base/shell/rshell/CMergedFolder.cpp
Normal file
337
base/shell/rshell/CMergedFolder.cpp
Normal file
|
@ -0,0 +1,337 @@
|
|||
/*
|
||||
* Shell Menu Site
|
||||
*
|
||||
* Copyright 2014 David Quintana
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
#include "precomp.h"
|
||||
#include <atlwin.h>
|
||||
#include <shlwapi_undoc.h>
|
||||
|
||||
#include "CMergedFolder.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(CMergedFolder);
|
||||
|
||||
class CEnumMergedFolder :
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IEnumIDList
|
||||
{
|
||||
private:
|
||||
CComPtr<IEnumIDList> m_UserLocal;
|
||||
CComPtr<IEnumIDList> m_AllUSers;
|
||||
BOOL m_FirstDone;
|
||||
|
||||
public:
|
||||
CEnumMergedFolder() : m_UserLocal(NULL), m_AllUSers(NULL), m_FirstDone(FALSE) {}
|
||||
~CEnumMergedFolder() {}
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CEnumMergedFolder)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CEnumMergedFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
|
||||
END_COM_MAP()
|
||||
|
||||
HRESULT Begin(HWND hwndOwner, SHCONTF flags, IShellFolder * userLocal, IShellFolder * allUSers)
|
||||
{
|
||||
HRESULT hr;
|
||||
hr = userLocal->EnumObjects(hwndOwner, flags, &m_UserLocal);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
hr = userLocal->EnumObjects(hwndOwner, flags, &m_AllUSers);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
m_UserLocal = NULL;
|
||||
return hr;
|
||||
}
|
||||
m_FirstDone = FALSE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Next(
|
||||
ULONG celt,
|
||||
LPITEMIDLIST *rgelt,
|
||||
ULONG *pceltFetched)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
*pceltFetched = 0;
|
||||
|
||||
if (!m_FirstDone)
|
||||
{
|
||||
hr = m_UserLocal->Next(celt, rgelt, pceltFetched);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
if (hr == S_FALSE)
|
||||
m_FirstDone = true;
|
||||
if (celt < 2)
|
||||
return hr;
|
||||
}
|
||||
|
||||
DWORD offset = *pceltFetched;
|
||||
if (*pceltFetched < celt)
|
||||
{
|
||||
rgelt += *pceltFetched;
|
||||
celt = (*pceltFetched - celt);
|
||||
*pceltFetched = 0;
|
||||
}
|
||||
|
||||
hr = m_UserLocal->Next(celt, rgelt, pceltFetched);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
*pceltFetched += offset;
|
||||
return hr;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Skip(
|
||||
ULONG celt)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Reset(
|
||||
)
|
||||
{
|
||||
if (m_FirstDone)
|
||||
m_AllUSers->Reset();
|
||||
return m_UserLocal->Reset();
|
||||
}
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Clone(
|
||||
IEnumIDList **ppenum)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
};
|
||||
|
||||
extern "C"
|
||||
HRESULT CMergedFolder_Constructor(IShellFolder* userLocal, IShellFolder* allUsers, REFIID riid, LPVOID *ppv)
|
||||
{
|
||||
*ppv = NULL;
|
||||
|
||||
CMergedFolder * fld = new CComObject<CMergedFolder>();
|
||||
|
||||
if (!fld)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
HRESULT hr;
|
||||
|
||||
hr = fld->_SetSources(userLocal, allUsers);
|
||||
|
||||
hr = fld->QueryInterface(riid, ppv);
|
||||
if (FAILED(hr))
|
||||
fld->Release();
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT CMergedFolder::_SetSources(IShellFolder* userLocal, IShellFolder* allUsers)
|
||||
{
|
||||
m_UserLocal = userLocal;
|
||||
m_AllUSers = allUsers;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// IShellFolder
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::ParseDisplayName(
|
||||
HWND hwndOwner,
|
||||
LPBC pbcReserved,
|
||||
LPOLESTR lpszDisplayName,
|
||||
ULONG *pchEaten,
|
||||
LPITEMIDLIST *ppidl,
|
||||
ULONG *pdwAttributes)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::EnumObjects(
|
||||
HWND hwndOwner,
|
||||
SHCONTF grfFlags,
|
||||
IEnumIDList **ppenumIDList)
|
||||
{
|
||||
CEnumMergedFolder * merged = new CComObject<CEnumMergedFolder>();
|
||||
*ppenumIDList = merged;
|
||||
return merged->Begin(hwndOwner, grfFlags, m_UserLocal, m_AllUSers);
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::BindToObject(
|
||||
LPCITEMIDLIST pidl,
|
||||
LPBC pbcReserved,
|
||||
REFIID riid,
|
||||
void **ppvOut)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
hr = m_UserLocal->BindToObject(pidl, pbcReserved, riid, ppvOut);
|
||||
if (SUCCEEDED(hr))
|
||||
return hr;
|
||||
|
||||
hr = m_AllUSers->BindToObject(pidl, pbcReserved, riid, ppvOut);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::BindToStorage(
|
||||
LPCITEMIDLIST pidl,
|
||||
LPBC pbcReserved,
|
||||
REFIID riid,
|
||||
void **ppvObj)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::CompareIDs(
|
||||
LPARAM lParam,
|
||||
LPCITEMIDLIST pidl1,
|
||||
LPCITEMIDLIST pidl2)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::CreateViewObject(
|
||||
HWND hwndOwner,
|
||||
REFIID riid,
|
||||
void **ppvOut)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetAttributesOf(
|
||||
UINT cidl,
|
||||
LPCITEMIDLIST *apidl,
|
||||
SFGAOF *rgfInOut)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
hr = m_UserLocal->GetAttributesOf(cidl, apidl, rgfInOut);
|
||||
if (SUCCEEDED(hr))
|
||||
return hr;
|
||||
|
||||
hr = m_AllUSers->GetAttributesOf(cidl, apidl, rgfInOut);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetUIObjectOf(
|
||||
HWND hwndOwner,
|
||||
UINT cidl,
|
||||
LPCITEMIDLIST *apidl,
|
||||
REFIID riid,
|
||||
UINT *prgfInOut,
|
||||
void **ppvOut)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
hr = m_UserLocal->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut);
|
||||
if (SUCCEEDED(hr))
|
||||
return hr;
|
||||
|
||||
hr = m_AllUSers->GetUIObjectOf(hwndOwner, cidl, apidl, riid, prgfInOut, ppvOut);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDisplayNameOf(
|
||||
LPCITEMIDLIST pidl,
|
||||
SHGDNF uFlags,
|
||||
STRRET *lpName)
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
hr = m_UserLocal->GetDisplayNameOf(pidl, uFlags, lpName);
|
||||
if (SUCCEEDED(hr))
|
||||
return hr;
|
||||
|
||||
hr = m_AllUSers->GetDisplayNameOf(pidl, uFlags, lpName);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::SetNameOf(
|
||||
HWND hwnd,
|
||||
LPCITEMIDLIST pidl,
|
||||
LPCOLESTR lpszName,
|
||||
SHGDNF uFlags,
|
||||
LPITEMIDLIST *ppidlOut)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// IShellFolder2
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDefaultSearchGUID(
|
||||
GUID *lpguid)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::EnumSearches(
|
||||
IEnumExtraSearch **ppenum)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDefaultColumn(
|
||||
DWORD dwReserved,
|
||||
ULONG *pSort,
|
||||
ULONG *pDisplay)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDefaultColumnState(
|
||||
UINT iColumn,
|
||||
SHCOLSTATEF *pcsFlags)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDetailsEx(
|
||||
LPCITEMIDLIST pidl,
|
||||
const SHCOLUMNID *pscid,
|
||||
VARIANT *pv)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::GetDetailsOf(
|
||||
LPCITEMIDLIST pidl,
|
||||
UINT iColumn,
|
||||
SHELLDETAILS *psd)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
HRESULT STDMETHODCALLTYPE CMergedFolder::MapColumnToSCID(
|
||||
UINT iColumn,
|
||||
SHCOLUMNID *pscid)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
135
base/shell/rshell/CMergedFolder.h
Normal file
135
base/shell/rshell/CMergedFolder.h
Normal file
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* Shell Menu Site
|
||||
*
|
||||
* Copyright 2014 David Quintana
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
class CMergedFolder :
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IShellFolder2
|
||||
{
|
||||
private:
|
||||
CComPtr<IShellFolder> m_UserLocal;
|
||||
CComPtr<IShellFolder> m_AllUSers;
|
||||
|
||||
public:
|
||||
CMergedFolder() {}
|
||||
~CMergedFolder() {}
|
||||
|
||||
HRESULT _SetSources(IShellFolder* userLocal, IShellFolder* allUSers);
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CMergedFolder)
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CMergedFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
|
||||
END_COM_MAP()
|
||||
|
||||
// IShellFolder
|
||||
virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
|
||||
HWND hwndOwner,
|
||||
LPBC pbcReserved,
|
||||
LPOLESTR lpszDisplayName,
|
||||
ULONG *pchEaten,
|
||||
LPITEMIDLIST *ppidl,
|
||||
ULONG *pdwAttributes);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE EnumObjects(
|
||||
HWND hwndOwner,
|
||||
SHCONTF grfFlags,
|
||||
IEnumIDList **ppenumIDList);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE BindToObject(
|
||||
LPCITEMIDLIST pidl,
|
||||
LPBC pbcReserved,
|
||||
REFIID riid,
|
||||
void **ppvOut);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE BindToStorage(
|
||||
LPCITEMIDLIST pidl,
|
||||
LPBC pbcReserved,
|
||||
REFIID riid,
|
||||
void **ppvObj);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE CompareIDs(
|
||||
LPARAM lParam,
|
||||
LPCITEMIDLIST pidl1,
|
||||
LPCITEMIDLIST pidl2);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE CreateViewObject(
|
||||
HWND hwndOwner,
|
||||
REFIID riid,
|
||||
void **ppvOut);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetAttributesOf(
|
||||
UINT cidl,
|
||||
LPCITEMIDLIST *apidl,
|
||||
SFGAOF *rgfInOut);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetUIObjectOf(
|
||||
HWND hwndOwner,
|
||||
UINT cidl,
|
||||
LPCITEMIDLIST *apidl,
|
||||
REFIID riid,
|
||||
UINT *prgfInOut,
|
||||
void **ppvOut);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDisplayNameOf(
|
||||
LPCITEMIDLIST pidl,
|
||||
SHGDNF uFlags,
|
||||
STRRET *lpName);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetNameOf(
|
||||
HWND hwnd,
|
||||
LPCITEMIDLIST pidl,
|
||||
LPCOLESTR lpszName,
|
||||
SHGDNF uFlags,
|
||||
LPITEMIDLIST *ppidlOut);
|
||||
|
||||
// IShellFolder2
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDefaultSearchGUID(
|
||||
GUID *lpguid);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE EnumSearches(
|
||||
IEnumExtraSearch **ppenum);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDefaultColumn(
|
||||
DWORD dwReserved,
|
||||
ULONG *pSort,
|
||||
ULONG *pDisplay);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnState(
|
||||
UINT iColumn,
|
||||
SHCOLSTATEF *pcsFlags);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDetailsEx(
|
||||
LPCITEMIDLIST pidl,
|
||||
const SHCOLUMNID *pscid,
|
||||
VARIANT *pv);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(
|
||||
LPCITEMIDLIST pidl,
|
||||
UINT iColumn,
|
||||
SHELLDETAILS *psd);
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE MapColumnToSCID(
|
||||
UINT iColumn,
|
||||
SHCOLUMNID *pscid);
|
||||
|
||||
};
|
|
@ -284,11 +284,17 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
|
|||
IShellMenu* pShellMenu;
|
||||
IBandSite* pBandSite;
|
||||
IDeskBar* pDeskBar;
|
||||
LPITEMIDLIST pidlStartMenu;
|
||||
|
||||
HRESULT hr;
|
||||
IShellFolder *shellFolder;
|
||||
IShellFolder *psfStartMenu;
|
||||
|
||||
LPITEMIDLIST pidlStartMenuUser;
|
||||
IShellFolder *psfStartMenuUser;
|
||||
|
||||
#if MERGE_FOLDERS
|
||||
LPITEMIDLIST pidlStartMenuAll;
|
||||
IShellFolder *psfStartMenuAll;
|
||||
#endif
|
||||
|
||||
#if USE_SYSTEM_MENUBAND
|
||||
hr = CoCreateInstance(CLSID_MenuBand,
|
||||
|
@ -349,14 +355,31 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
|
|||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = SHGetDesktopFolder(&shellFolder);
|
||||
|
||||
/* FIXME: Use CLSID_MergedFolder class and IID_IAugmentedShellFolder2 interface here */
|
||||
/* CLSID_MergedFolder 26fdc864-be88-46e7-9235-032d8ea5162e */
|
||||
/* IID_IAugmentedShellFolder2 8db3b3f4-6cfe-11d1-8ae9-00c04fd918d0 */
|
||||
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenu);
|
||||
hr = SHGetDesktopFolder(&shellFolder);
|
||||
hr = shellFolder->BindToObject(pidlStartMenu, NULL, IID_IShellFolder, (void**) &psfStartMenu);
|
||||
hr = SHGetFolderLocation(NULL, CSIDL_STARTMENU, 0, 0, &pidlStartMenuUser);
|
||||
hr = shellFolder->BindToObject(pidlStartMenuUser, NULL, IID_IShellFolder, (void**) &psfStartMenuUser);
|
||||
|
||||
hr = pShellMenu->SetShellFolder(psfStartMenu, NULL, NULL, 0);
|
||||
#if MERGE_FOLDERS
|
||||
hr = SHGetFolderLocation(NULL, CSIDL_COMMON_STARTMENU, 0, 0, &pidlStartMenuAll);
|
||||
hr = shellFolder->BindToObject(pidlStartMenuAll, NULL, IID_IShellFolder, (void**) &psfStartMenuAll);
|
||||
|
||||
IShellFolder * psfMerged;
|
||||
hr = CMergedFolder_Constructor(psfStartMenuUser, psfStartMenuAll, IID_PPV_ARG(IShellFolder, &psfMerged));
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = pShellMenu->SetShellFolder(psfMerged, NULL, NULL, 0);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
#else
|
||||
hr = pShellMenu->SetShellFolder(psfStartMenuUser, NULL, NULL, 0);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
#endif
|
||||
|
||||
hr = pDeskBar->SetClient(pBandSite);
|
||||
if (FAILED(hr))
|
||||
|
|
|
@ -44,6 +44,7 @@ extern "C" HRESULT CMenuBand_Constructor(REFIID riid, LPVOID *ppv);
|
|||
extern "C" HRESULT CMenuDeskBar_Wrapper(IDeskBar * db, REFIID riid, LPVOID *ppv);
|
||||
extern "C" HRESULT CMenuSite_Wrapper(IBandSite * bs, REFIID riid, LPVOID *ppv);
|
||||
extern "C" HRESULT CMenuBand_Wrapper(IShellMenu * sm, REFIID riid, LPVOID *ppv);
|
||||
extern "C" HRESULT CMergedFolder_Constructor(IShellFolder* userLocal, IShellFolder* allUsers, REFIID riid, LPVOID *ppv);
|
||||
|
||||
static __inline ULONG
|
||||
Win32DbgPrint(const char *filename, int line, const char *lpFormat, ...)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
PROJECT(SHELL)
|
||||
|
||||
set_cpp(WITH_RUNTIME)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue