ReactOS 0.4.17-dev-1190-g4c812f4
internettoolbar.cpp File Reference
#include "precomp.h"
Include dependency graph for internettoolbar.cpp:

Go to the source code of this file.

Classes

struct  ITBARSTATE
 
class  CDockSite
 

Functions

STDMETHOD() GetNameSpaceID (LPCITEMIDLIST, LPGUID) PURE
 
STDMETHOD() QueryNameSpace (ULONG, LPGUID, IShellFolder **) PURE
 
STDMETHOD() EnumNameSpace (ULONG, PULONG) PURE
 
HRESULT WINAPI SHBindToFolder (LPCITEMIDLIST path, IShellFolder **newFolder)
 
static HRESULT SHELL_LoadShellLink (PCIDLIST_ABSOLUTE pidl, IShellLink **ppsl, DWORD stgm=STGM_READ)
 
static HRESULT SHELL_GetAbsolutePidlTryLinkTarget (IShellFolder *psf, LPCITEMIDLIST pidlChild, PIDLIST_ABSOLUTE *ppidl)
 
static HRESULT SHELL_BrowseObject (IShellBrowser *psb, IShellFolder *psf, LPCITEMIDLIST pidlChild, UINT BrowseFlags)
 
static HRESULT BrowseInplaceOrExecute (HWND hWnd, IShellFolder *psf, LPCITEMIDLIST pidlChild, IUnknown *pSite)
 
HRESULT IUnknown_RelayWinEvent (IUnknown *punk, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
 
HRESULT IUnknown_ShowDW (IUnknown *punk, BOOL fShow)
 
HRESULT IUnknown_CloseDW (IUnknown *punk, DWORD dwReserved)
 
static HRESULT BindToDesktop (LPCITEMIDLIST pidl, IShellFolder **ppsfResult)
 
static HRESULT GetFavoritesFolder (IShellFolder **ppsfFavorites, LPITEMIDLIST *ppidl)
 

Variables

interface IShellFolder LPCITEMIDLIST
 
interface IShellFolder ULONG PURE
 

Function Documentation

◆ BindToDesktop()

static HRESULT BindToDesktop ( LPCITEMIDLIST  pidl,
IShellFolder **  ppsfResult 
)
static

Definition at line 438 of file internettoolbar.cpp.

439{
440 HRESULT hr;
441 CComPtr<IShellFolder> psfDesktop;
442
443 *ppsfResult = NULL;
444
445 hr = SHGetDesktopFolder(&psfDesktop);
446 if (FAILED(hr))
447 return hr;
448
449 hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder, ppsfResult));
450
451 return hr;
452}
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define IID_PPV_ARG(Itype, ppType)
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define FAILED(hr)
Definition: intsafe.h:51

Referenced by GetFavoritesFolder().

◆ BrowseInplaceOrExecute()

static HRESULT BrowseInplaceOrExecute ( HWND  hWnd,
IShellFolder *  psf,
LPCITEMIDLIST  pidlChild,
IUnknown *  pSite 
)
static

Definition at line 132 of file internettoolbar.cpp.

133{
136 if (SUCCEEDED(hr))
137 hr = SHELL_BrowseObject(psb, psf, pidlChild, SBSP_SAMEBROWSER);
138 if (FAILED(hr))
139 hr = SHInvokeDefaultCommand(hWnd, psf, pidlChild);
140 return hr;
141}
HWND hWnd
Definition: settings.c:17
HRESULT WINAPI IUnknown_QueryService(IUnknown *obj, REFGUID sid, REFIID iid, void **out)
Definition: main.c:181
HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder *lpFolder, LPCITEMIDLIST lpApidl)
Definition: ordinal.c:2608
static HRESULT SHELL_BrowseObject(IShellBrowser *psb, IShellFolder *psf, LPCITEMIDLIST pidlChild, UINT BrowseFlags)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define SID_IShellBrowser

Referenced by CMenuCallback::CallbackSM().

◆ EnumNameSpace()

STDMETHOD() EnumNameSpace ( ULONG  ,
PULONG   
)

◆ GetFavoritesFolder()

static HRESULT GetFavoritesFolder ( IShellFolder **  ppsfFavorites,
LPITEMIDLIST *  ppidl 
)
static

Definition at line 454 of file internettoolbar.cpp.

455{
456 HRESULT hr;
457 LPITEMIDLIST pidlUserFavorites;
458 LPITEMIDLIST pidlCommonFavorites;
459 CComPtr<IShellFolder> psfUserFavorites;
460 CComPtr<IShellFolder> psfCommonFavorites;
462
463 if (ppsfFavorites)
464 *ppsfFavorites = NULL;
465
466 if (ppidl)
467 *ppidl = NULL;
468
469 hr = SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &pidlUserFavorites);
470 if (FAILED(hr))
471 {
472 WARN("Failed to get the USER favorites folder. Trying to run with just the COMMON one.\n");
473
476 return hr;
477
478 TRACE("COMMON favorites obtained.\n");
479 *ppidl = pidlCommonFavorites;
480 hr = BindToDesktop(pidlCommonFavorites, ppsfFavorites);
481 return hr;
482 }
483
486 {
487 WARN("Failed to get the COMMON favorites folder. Will use only the USER contents.\n");
488 *ppidl = pidlCommonFavorites;
489 hr = BindToDesktop(pidlUserFavorites, ppsfFavorites);
490 return hr;
491 }
492
493 TRACE("Both COMMON and USER favorites folders obtained, merging them...\n");
494
495 hr = BindToDesktop(pidlUserFavorites, &psfUserFavorites);
497 return hr;
498
499 hr = BindToDesktop(pidlCommonFavorites, &psfCommonFavorites);
501 return hr;
502
503 hr = CMergedFolder_CreateInstance(IID_PPV_ARG(IAugmentedShellFolder, &pasf));
505 {
506 *ppsfFavorites = psfUserFavorites.Detach();
507 *ppidl = pidlUserFavorites;
508 ILFree(pidlCommonFavorites);
509 return hr;
510 }
511
512 hr = pasf->AddNameSpace(NULL, psfUserFavorites, pidlUserFavorites, 0xFF00);
514 return hr;
515
516 hr = pasf->AddNameSpace(NULL, psfCommonFavorites, pidlCommonFavorites, 0);
518 return hr;
519
520 hr = pasf->QueryInterface(IID_PPV_ARG(IShellFolder, ppsfFavorites));
521 pasf.Release();
522
523 // TODO: obtain the folder's PIDL
524
525 ILFree(pidlCommonFavorites);
526 ILFree(pidlUserFavorites);
527
528 return hr;
529}
#define WARN(fmt,...)
Definition: precomp.h:61
void Release()
Definition: atlcomcli.h:170
T * Detach()
Definition: atlcomcli.h:186
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
Definition: shellpath.c:4574
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
static HRESULT BindToDesktop(LPCITEMIDLIST pidl, IShellFolder **ppsfResult)
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051
#define CMergedFolder_CreateInstance
Definition: shellmenu.h:92
#define CSIDL_FAVORITES
Definition: shlobj.h:2226
#define CSIDL_COMMON_FAVORITES
Definition: shlobj.h:2250
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by CMenuCallback::GetObject().

◆ GetNameSpaceID()

STDMETHOD() GetNameSpaceID ( LPCITEMIDLIST  ,
LPGUID   
)

◆ IUnknown_CloseDW()

HRESULT IUnknown_CloseDW ( IUnknown *  punk,
DWORD  dwReserved 
)

Definition at line 169 of file internettoolbar.cpp.

170{
171 CComPtr<IDockingWindow> dockingWindow;
172 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
173 if (FAILED_UNEXPECTEDLY(hResult))
174 return hResult;
175 hResult = dockingWindow->CloseDW(dwReserved);
176 if (FAILED_UNEXPECTEDLY(hResult))
177 return hResult;
178 return S_OK;
179}
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
_In_opt_ IUnknown * punk
Definition: shlwapi.h:158

Referenced by CInternetToolbar::CloseDW().

◆ IUnknown_RelayWinEvent()

HRESULT IUnknown_RelayWinEvent ( IUnknown *  punk,
HWND  hWnd,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam,
LRESULT *  theResult 
)

Definition at line 143 of file internettoolbar.cpp.

144{
145 CComPtr<IWinEventHandler> menuWinEventHandler;
146 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IWinEventHandler, &menuWinEventHandler));
147 if (FAILED_UNEXPECTEDLY(hResult))
148 return hResult;
149 hResult = menuWinEventHandler->IsWindowOwner(hWnd);
150 if (FAILED_UNEXPECTEDLY(hResult))
151 return hResult;
152 if (hResult == S_OK)
153 return menuWinEventHandler->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult);
154 return S_FALSE;
155}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define S_FALSE
Definition: winerror.h:3451

Referenced by CInternetToolbar::OnWinEvent().

◆ IUnknown_ShowDW()

HRESULT IUnknown_ShowDW ( IUnknown *  punk,
BOOL  fShow 
)

Definition at line 157 of file internettoolbar.cpp.

158{
159 CComPtr<IDockingWindow> dockingWindow;
160 HRESULT hResult = punk->QueryInterface(IID_PPV_ARG(IDockingWindow, &dockingWindow));
161 if (FAILED_UNEXPECTEDLY(hResult))
162 return hResult;
163 hResult = dockingWindow->ShowDW(fShow);
164 if (FAILED_UNEXPECTEDLY(hResult))
165 return hResult;
166 return S_OK;
167}

Referenced by CShellBrowser::Exec(), CShellBrowser::Initialize(), and CInternetToolbar::ShowDW().

◆ QueryNameSpace()

STDMETHOD() QueryNameSpace ( ULONG  ,
LPGUID  ,
IShellFolder **   
)

◆ SHBindToFolder()

HRESULT WINAPI SHBindToFolder ( LPCITEMIDLIST  path,
IShellFolder **  newFolder 
)

Definition at line 168 of file shellbrowser.cpp.

169{
170 CComPtr<IShellFolder> desktop;
171
172 HRESULT hr = ::SHGetDesktopFolder(&desktop);
174 return E_FAIL;
175 if (path == NULL || path->mkid.cb == 0)
176 {
177 *newFolder = desktop;
178 desktop.p->AddRef ();
179 return S_OK;
180 }
181 return desktop->BindToObject (path, NULL, IID_PPV_ARG(IShellFolder, newFolder));
182}
#define E_FAIL
Definition: ddrawi.h:102

Referenced by CShellBrowser::BrowseToPIDL().

◆ SHELL_BrowseObject()

static HRESULT SHELL_BrowseObject ( IShellBrowser *  psb,
IShellFolder *  psf,
LPCITEMIDLIST  pidlChild,
UINT  BrowseFlags 
)
static

Definition at line 121 of file internettoolbar.cpp.

122{
124 HRESULT hr = SHELL_GetAbsolutePidlTryLinkTarget(psf, pidlChild, &pidl);
125 if (FAILED(hr))
126 return hr;
127 if (SHELL_GetAttributesOf(pidl, SFGAO_BROWSABLE | SFGAO_FOLDER) & (SFGAO_BROWSABLE | SFGAO_FOLDER))
128 return psb->BrowseObject(pidl, SBSP_ABSOLUTE | (BrowseFlags & ~SBSP_RELATIVE));
130}
HRESULT BrowseObject([in] PCUIDLIST_RELATIVE pidl, [in] UINT wFlags)
static HRESULT SHELL_GetAbsolutePidlTryLinkTarget(IShellFolder *psf, LPCITEMIDLIST pidlChild, PIDLIST_ABSOLUTE *ppidl)
static SFGAOF SHELL_GetAttributesOf(IShellFolder *psf, LPCITEMIDLIST pidlChild, SFGAOF query)
Definition: shellutils.h:780
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
Definition: winerror.h:210
#define ERROR_DIR_NOT_ROOT
Definition: winerror.h:338

Referenced by BrowseInplaceOrExecute().

◆ SHELL_GetAbsolutePidlTryLinkTarget()

static HRESULT SHELL_GetAbsolutePidlTryLinkTarget ( IShellFolder *  psf,
LPCITEMIDLIST  pidlChild,
PIDLIST_ABSOLUTE *  ppidl 
)
static

Definition at line 103 of file internettoolbar.cpp.

104{
106 HRESULT hr = SHELL_GetAbsolutePidl(psf, pidlChild, &pidl);
107 if (FAILED(hr))
108 return hr;
109 // TODO: Use BHID_LinkTargetItem instead when it's implemented
110 if (SHELL_GetAttributesOf(psf, pidlChild, SFGAO_LINK) & SFGAO_LINK)
111 {
112 PIDLIST_ABSOLUTE pidlTarget;
114 if (SUCCEEDED(SHELL_LoadShellLink(pidl, &psl)) && SUCCEEDED(psl->GetIDList(&pidlTarget)))
115 pidl.Attach(pidlTarget);
116 }
117 *ppidl = pidl.Detach();
118 return S_OK;
119}
T * Detach()
Definition: atlalloc.h:168
void Attach(T *lp)
Definition: atlalloc.h:162
static HRESULT SHELL_LoadShellLink(PCIDLIST_ABSOLUTE pidl, IShellLink **ppsl, DWORD stgm=STGM_READ)

Referenced by SHELL_BrowseObject().

◆ SHELL_LoadShellLink()

static HRESULT SHELL_LoadShellLink ( PCIDLIST_ABSOLUTE  pidl,
IShellLink **  ppsl,
DWORD  stgm = STGM_READ 
)
static

Definition at line 91 of file internettoolbar.cpp.

92{
94 if (!SHGetPathFromIDListW(pidl, buf))
95 return E_FAIL;
97 HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARG(IPersistFile, &ppf));
98 if (SUCCEEDED(hr))
99 hr = ppf->Load(buf, stgm);
100 return SUCCEEDED(hr) ? ppf->QueryInterface(IID_PPV_ARG(IShellLink, ppsl)) : hr;
101}
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
Definition: combase.c:1685
#define MAX_PATH
Definition: compat.h:34
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
short WCHAR
Definition: pedump.c:58
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1496

Referenced by SHELL_GetAbsolutePidlTryLinkTarget().

Variable Documentation

◆ LPCITEMIDLIST

◆ PURE

Definition at line 32 of file internettoolbar.cpp.