mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 05:42:59 +00:00
merged back commit shell32 WINE patches
svn path=/trunk/; revision=7818
This commit is contained in:
parent
0f8bd6db55
commit
7bd7074cb3
3 changed files with 59 additions and 53 deletions
|
@ -29,6 +29,9 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#define NONAMELESSUNION
|
||||||
|
#define NONAMELESSSTRUCT
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
@ -695,22 +698,26 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST* pidlReal)
|
HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEMIDLIST* pidlReal)
|
||||||
{
|
{
|
||||||
UINT cfShellIDList = RegisterClipboardFormatA(CFSTR_SHELLIDLIST);
|
|
||||||
|
|
||||||
STGMEDIUM medium = {0, {0}, 0};
|
|
||||||
FORMATETC fmt = {cfShellIDList, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
|
|
||||||
|
|
||||||
IDataObject* pDataObj;
|
IDataObject* pDataObj;
|
||||||
HRESULT hr = IShellFolder_GetUIObjectOf(lpsf, 0, 1, &pidlSimple, &IID_IDataObject, 0, (LPVOID*)&pDataObj);
|
HRESULT hr = IShellFolder_GetUIObjectOf(lpsf, 0, 1, &pidlSimple, &IID_IDataObject, 0, (LPVOID*)&pDataObj);
|
||||||
|
|
||||||
if (SUCCEEDED(hr)) {
|
if (SUCCEEDED(hr)) {
|
||||||
|
STGMEDIUM medium;
|
||||||
|
FORMATETC fmt;
|
||||||
|
|
||||||
|
fmt.cfFormat = RegisterClipboardFormatA(CFSTR_SHELLIDLIST);
|
||||||
|
fmt.ptd = NULL;
|
||||||
|
fmt.dwAspect = DVASPECT_CONTENT;
|
||||||
|
fmt.lindex = -1;
|
||||||
|
fmt.tymed = TYMED_HGLOBAL;
|
||||||
|
|
||||||
hr = IDataObject_GetData(pDataObj, &fmt, &medium);
|
hr = IDataObject_GetData(pDataObj, &fmt, &medium);
|
||||||
|
|
||||||
IDataObject_Release(pDataObj);
|
IDataObject_Release(pDataObj);
|
||||||
|
|
||||||
if (SUCCEEDED(hr)) {
|
if (SUCCEEDED(hr)) {
|
||||||
/*assert(pida->cidl==1);*/
|
/*assert(pida->cidl==1);*/
|
||||||
LPIDA pida = (LPIDA)GlobalLock(medium.hGlobal);
|
LPIDA pida = (LPIDA)GlobalLock(medium.u.hGlobal);
|
||||||
|
|
||||||
LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
|
LPCITEMIDLIST pidl_folder = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[0]);
|
||||||
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
|
LPCITEMIDLIST pidl_child = (LPCITEMIDLIST) ((LPBYTE)pida+pida->aoffset[1]);
|
||||||
|
@ -720,8 +727,8 @@ HRESULT WINAPI SHGetRealIDL(LPSHELLFOLDER lpsf, LPCITEMIDLIST pidlSimple, LPITEM
|
||||||
if (!*pidlReal)
|
if (!*pidlReal)
|
||||||
hr = E_OUTOFMEMORY;
|
hr = E_OUTOFMEMORY;
|
||||||
|
|
||||||
GlobalUnlock(medium.hGlobal);
|
GlobalUnlock(medium.u.hGlobal);
|
||||||
GlobalFree(medium.hGlobal);
|
GlobalFree(medium.u.hGlobal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1192,31 +1199,31 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int n
|
||||||
{
|
{
|
||||||
case SHGDFIL_FINDDATA:
|
case SHGDFIL_FINDDATA:
|
||||||
{
|
{
|
||||||
LPSTR filename, shortname;
|
LPSTR filename, shortname;
|
||||||
WIN32_FIND_DATAA * pfd = dest;
|
WIN32_FIND_DATAA * pfd = dest;
|
||||||
|
|
||||||
if (_ILIsDrive(pidl))
|
if (_ILIsDrive(pidl))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (len < (int)sizeof(WIN32_FIND_DATAA)) return E_INVALIDARG;
|
if (len < (int)sizeof(WIN32_FIND_DATAA)) return E_INVALIDARG;
|
||||||
|
|
||||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||||
|
|
||||||
filename = _ILGetTextPointer(pidl);
|
filename = _ILGetTextPointer(pidl);
|
||||||
shortname = _ILGetSTextPointer(pidl);
|
shortname = _ILGetSTextPointer(pidl);
|
||||||
|
|
||||||
if (filename)
|
if (filename)
|
||||||
lstrcpynA(pfd->cFileName, filename, MAX_PATH);
|
lstrcpynA(pfd->cFileName, filename, MAX_PATH);
|
||||||
else
|
else
|
||||||
pfd->cFileName[0] = '\0';
|
pfd->cFileName[0] = '\0';
|
||||||
|
|
||||||
if (shortname)
|
if (shortname)
|
||||||
lstrcpynA(pfd->cAlternateFileName, shortname, MAX_PATH);
|
lstrcpynA(pfd->cAlternateFileName, shortname, MAX_PATH);
|
||||||
else
|
else
|
||||||
pfd->cAlternateFileName[0] = '\0';
|
pfd->cAlternateFileName[0] = '\0';
|
||||||
}
|
}
|
||||||
return NOERROR;
|
return NOERROR;
|
||||||
|
|
||||||
|
@ -1231,6 +1238,7 @@ HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int n
|
||||||
|
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHGetDataFromIDListW [SHELL32.248]
|
* SHGetDataFromIDListW [SHELL32.248]
|
||||||
*
|
*
|
||||||
|
@ -1247,31 +1255,31 @@ HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int n
|
||||||
{
|
{
|
||||||
case SHGDFIL_FINDDATA:
|
case SHGDFIL_FINDDATA:
|
||||||
{
|
{
|
||||||
LPSTR filename, shortname;
|
LPSTR filename, shortname;
|
||||||
WIN32_FIND_DATAW * pfd = dest;
|
WIN32_FIND_DATAW * pfd = dest;
|
||||||
|
|
||||||
if (_ILIsDrive(pidl))
|
if (_ILIsDrive(pidl))
|
||||||
return E_INVALIDARG;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (len < (int)sizeof(WIN32_FIND_DATAW)) return E_INVALIDARG;
|
if (len < (int)sizeof(WIN32_FIND_DATAW)) return E_INVALIDARG;
|
||||||
|
|
||||||
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
ZeroMemory(pfd, sizeof (WIN32_FIND_DATAA));
|
||||||
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
_ILGetFileDateTime( pidl, &(pfd->ftLastWriteTime));
|
||||||
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0);
|
||||||
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0);
|
||||||
|
|
||||||
filename = _ILGetTextPointer(pidl);
|
filename = _ILGetTextPointer(pidl);
|
||||||
shortname = _ILGetSTextPointer(pidl);
|
shortname = _ILGetSTextPointer(pidl);
|
||||||
|
|
||||||
if (!filename)
|
if (!filename)
|
||||||
pfd->cFileName[0] = '\0';
|
pfd->cFileName[0] = '\0';
|
||||||
else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
|
else if (!MultiByteToWideChar(CP_ACP, 0, filename, -1, pfd->cFileName, MAX_PATH))
|
||||||
pfd->cFileName[MAX_PATH-1] = 0;
|
pfd->cFileName[MAX_PATH-1] = 0;
|
||||||
|
|
||||||
if (!shortname)
|
if (!shortname)
|
||||||
pfd->cAlternateFileName[0] = '\0';
|
pfd->cAlternateFileName[0] = '\0';
|
||||||
else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
|
else if (!MultiByteToWideChar(CP_ACP, 0, shortname, -1, pfd->cAlternateFileName, 14))
|
||||||
pfd->cAlternateFileName[13] = 0;
|
pfd->cAlternateFileName[13] = 0;
|
||||||
}
|
}
|
||||||
return NOERROR;
|
return NOERROR;
|
||||||
case SHGDFIL_NETRESOURCE:
|
case SHGDFIL_NETRESOURCE:
|
||||||
|
@ -2039,7 +2047,7 @@ LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
|
||||||
case PT_FOLDER1:
|
case PT_FOLDER1:
|
||||||
case PT_VALUE:
|
case PT_VALUE:
|
||||||
case PT_IESPECIAL1:
|
case PT_IESPECIAL1:
|
||||||
case PT_RAS_FOLDER:
|
case PT_RAS_FOLDER:
|
||||||
case PT_IESPECIAL2:
|
case PT_IESPECIAL2:
|
||||||
return (LPSTR)&(pdata->u.file.szNames);
|
return (LPSTR)&(pdata->u.file.szNames);
|
||||||
|
|
||||||
|
@ -2070,7 +2078,7 @@ LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
|
||||||
case PT_FOLDER:
|
case PT_FOLDER:
|
||||||
case PT_VALUE:
|
case PT_VALUE:
|
||||||
case PT_IESPECIAL1:
|
case PT_IESPECIAL1:
|
||||||
case PT_RAS_FOLDER:
|
case PT_RAS_FOLDER:
|
||||||
case PT_IESPECIAL2:
|
case PT_IESPECIAL2:
|
||||||
return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1);
|
return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1);
|
||||||
|
|
||||||
|
|
|
@ -247,10 +247,10 @@ BOOL WINAPI ShellExecuteExW32(LPSHELLEXECUTEINFOW psei, SHELL_ExecuteW32 execfun
|
||||||
UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation,
|
UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation,
|
||||||
LPWSTR lpResult, LPWSTR key, void **env, LPITEMIDLIST pidl, LPCWSTR args);
|
LPWSTR lpResult, LPWSTR key, void **env, LPITEMIDLIST pidl, LPCWSTR args);
|
||||||
|
|
||||||
extern WCHAR swShell32Name[MAX_PATH];
|
|
||||||
extern char sShell32Name[MAX_PATH];
|
|
||||||
|
|
||||||
int WINAPI RestartDialog(HWND hwndOwner, LPCSTR lpstrReason, UINT uFlags);
|
int WINAPI RestartDialog(HWND hwndOwner, LPCSTR lpstrReason, UINT uFlags);
|
||||||
int WINAPI RestartDialogEx(HWND hwndOwner, LPCWSTR lpwstrReason, UINT uFlags, UINT uReason);
|
int WINAPI RestartDialogEx(HWND hwndOwner, LPCWSTR lpwstrReason, UINT uFlags, UINT uReason);
|
||||||
|
|
||||||
|
extern WCHAR swShell32Name[MAX_PATH];
|
||||||
|
extern char sShell32Name[MAX_PATH];
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -67,8 +67,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||||
#define SCF_WORKDIR 0x10
|
#define SCF_WORKDIR 0x10
|
||||||
#define SCF_ARGS 0x20
|
#define SCF_ARGS 0x20
|
||||||
#define SCF_CUSTOMICON 0x40
|
#define SCF_CUSTOMICON 0x40
|
||||||
//#define SCF_UNC 0x80
|
|
||||||
//#define SCF_UNICODE 0x1000
|
|
||||||
#define SCF_UNICODE 0x80
|
#define SCF_UNICODE 0x80
|
||||||
|
|
||||||
#include "pshpack1.h"
|
#include "pshpack1.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue