static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; switch (id) { case IDOK: /* The original pidl is owned by the treeview and will be free'd. */ info->pidlRet = ILClone(info->pidlRet); if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ info->pidlRet = _ILCreateDesktop(); pdump( info->pidlRet ); if (lpBrowseInfo->pszDisplayName) SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); EndDialog( info->hWnd, 1 ); return TRUE; case IDCANCEL: EndDialog( info->hWnd, 0 ); return TRUE; case IDD_MAKENEWFOLDER: FIXME("make new folder not implemented\n"); return TRUE; } return FALSE; }
static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; switch (id) { case IDOK: if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ info->pidlRet = _ILCreateDesktop(); pdump( info->pidlRet ); if (lpBrowseInfo->pszDisplayName) SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); EndDialog( info->hWnd, 1 ); return TRUE; case IDCANCEL: EndDialog( info->hWnd, 0 ); return TRUE; case IDD_MAKENEWFOLDER: BrsFolder_NewFolder(info); return TRUE; } return FALSE; }
static BOOL BrsFolder_OnCommand( browse_info *info, UINT id ) { LPBROWSEINFOW lpBrowseInfo = info->lpBrowseInfo; switch (id) { case IDOK: #ifdef __REACTOS__ /* The original pidl is owned by the treeview and will be free'd. */ info->pidlRet = ILClone(info->pidlRet); #endif if (info->pidlRet == NULL) /* A null pidl would mean a cancel */ info->pidlRet = _ILCreateDesktop(); pdump( info->pidlRet ); if (lpBrowseInfo->pszDisplayName) SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName ); EndDialog( info->hWnd, 1 ); return TRUE; case IDCANCEL: EndDialog( info->hWnd, 0 ); return TRUE; case IDC_BROWSE_FOR_FOLDER_NEW_FOLDER: BrsFolder_NewFolder(info); return TRUE; } return FALSE; }
HRESULT WINAPI CDesktopFolder::FinalConstruct() { WCHAR szMyPath[MAX_PATH]; HRESULT hr; /* Create the root pidl */ pidlRoot = _ILCreateDesktop(); if (!pidlRoot) return E_OUTOFMEMORY; /* Create the inner fs folder */ hr = SHELL32_CoCreateInitSF(pidlRoot, NULL, NULL, &CLSID_ShellFSFolder, CSIDL_DESKTOPDIRECTORY, IID_PPV_ARG(IShellFolder2, &m_DesktopFSFolder)); if (FAILED_UNEXPECTEDLY(hr)) return hr; /* Create the inner shared fs folder. Dont fail on failure. */ hr = SHELL32_CoCreateInitSF(pidlRoot, NULL, NULL, &CLSID_ShellFSFolder, CSIDL_COMMON_DESKTOPDIRECTORY, IID_PPV_ARG(IShellFolder2, &m_SharedDesktopFSFolder)); if (FAILED_UNEXPECTEDLY(hr)) return hr; /* Create the inner reg folder */ hr = CRegFolder_CreateInstance(&CLSID_ShellDesktop, pidlRoot, L"", IID_PPV_ARG(IShellFolder2, &m_regFolder)); if (FAILED_UNEXPECTEDLY(hr)) return hr; /* Cache the path to the user desktop directory */ if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE )) return E_UNEXPECTED; sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR)); if (!sPathTarget) return E_OUTOFMEMORY; wcscpy(sPathTarget, szMyPath); return S_OK; }
/************************************************************************** * ISF_Desktop_Constructor */ HRESULT WINAPI ISF_Desktop_Constructor ( IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) { static IGenericSFImpl *cached_sf; WCHAR szMyPath[MAX_PATH]; TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); if (!ppv) return E_POINTER; if (pUnkOuter) return CLASS_E_NOAGGREGATION; if (!cached_sf) { IGenericSFImpl *sf; if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE )) return E_UNEXPECTED; sf = LocalAlloc( LMEM_ZEROINIT, sizeof (IGenericSFImpl) ); if (!sf) return E_OUTOFMEMORY; sf->ref = 1; sf->lpVtbl = &vt_MCFldr_ShellFolder2; sf->lpPF2 = &vt_FSFldr_PersistFolder2; sf->lpvtblSFHelper = &vt_FSFldr_ISFHelper; sf->pidlRoot = _ILCreateDesktop(); /* my qualified pidl */ sf->sPathTarget = SHAlloc( (wcslen(szMyPath) + 1)*sizeof(WCHAR) ); wcscpy( sf->sPathTarget, szMyPath ); if (InterlockedCompareExchangePointer((void *)&cached_sf, sf, NULL) != NULL) { /* some other thread already been here */ SHFree( sf->pidlRoot ); SHFree( sf->sPathTarget ); LocalFree( sf ); } } return IUnknown_QueryInterface( _IUnknown_(cached_sf), riid, ppv ); }
HRESULT WINAPI CDesktopFolder::FinalConstruct() { WCHAR szMyPath[MAX_PATH]; HRESULT hr; CComPtr<IPersistFolder3> ppf3; /* Create the root pidl */ pidlRoot = _ILCreateDesktop(); /* Create the inner fs folder */ hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder2, &m_DesktopFSFolder)); if (FAILED(hr)) return hr; hr = m_DesktopFSFolder->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf3)); if (FAILED(hr)) return hr; PERSIST_FOLDER_TARGET_INFO info; ZeroMemory(&info, sizeof(PERSIST_FOLDER_TARGET_INFO)); info.csidl = CSIDL_DESKTOPDIRECTORY; hr = ppf3->InitializeEx(NULL, pidlRoot, &info); /* Create the inner shared fs folder */ hr = SHCoCreateInstance(NULL, &CLSID_ShellFSFolder, NULL, IID_PPV_ARG(IShellFolder2, &m_SharedDesktopFSFolder)); if (FAILED(hr)) return hr; hr = m_SharedDesktopFSFolder->QueryInterface(IID_PPV_ARG(IPersistFolder3, &ppf3)); if (FAILED(hr)) return hr; info.csidl = CSIDL_COMMON_DESKTOPDIRECTORY; hr = ppf3->InitializeEx(NULL, pidlRoot, &info); if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE )) return E_UNEXPECTED; sPathTarget = (LPWSTR)SHAlloc((wcslen(szMyPath) + 1) * sizeof(WCHAR)); wcscpy(sPathTarget, szMyPath); return S_OK; }
static void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq, LPTVITEMW lpTV_ITEM) { LPITEMIDLIST pidlDesktop = NULL; DWORD flags; TRACE("%p %p\n",lpifq, lpTV_ITEM); if (!lpifq) { pidlDesktop = _ILCreateDesktop(); lpifq = pidlDesktop; } flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON; lpTV_ITEM->iImage = GetIcon( lpifq, flags ); flags = SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON; lpTV_ITEM->iSelectedImage = GetIcon( lpifq, flags ); if (pidlDesktop) ILFree( pidlDesktop ); }