Commit 6101324f authored by Juergen Schmied's avatar Juergen Schmied Committed by Alexandre Julliard

Many bugfixes, new stubs SHGetRealIDL, SHRegQueryValue32W,

SHRegQueryValueEx32W, StrRetToStrN, StrChrW, SHAllocShared, SHLockShared, SHUnlockShared, SHFreeShared, SetAppStartingCursor32, SHLoadOLE32, Shell_MergeMenus32, PathGetDriveNumber32, DriveType32, SHAbortInvokeCommand, SHOutOfMemoryMessageBox, SHFlushClipboard.
parent 82853711
......@@ -119,6 +119,9 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
{ DWORD len;
LPITEMIDLIST newpidl=NULL;
TRACE(pidl,"pidl=%p \n",pidl);
pdump(pidl);
if (pidl)
{ len = pidl->mkid.cb;
newpidl = (LPITEMIDLIST) SHAlloc (len+2);
......@@ -126,8 +129,8 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
{ memcpy(newpidl,pidl,len);
ILGetNext(newpidl)->mkid.cb = 0x00;
}
}
TRACE(pidl,"pidl=%p newpidl=%p\n",pidl, newpidl);
}
TRACE(pidl,"-- newpidl=%p\n",newpidl);
return newpidl;
}
......@@ -196,6 +199,16 @@ LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1,LPCITEMIDLIST pidl2)
return pidlNew;
}
/*************************************************************************
* SHGetRealIDL [SHELL32.98]
*
* NOTES
*/
LPITEMIDLIST WINAPI SHGetRealIDL(DWORD x, DWORD y, DWORD z)
{ FIXME(pidl,"0x%04lx 0x%04lx 0x%04lx\n",x,y,z);
return 0;
}
/*************************************************************************
* SHLogILFromFSIL [SHELL32.95]
*
* NOTES
......@@ -263,12 +276,24 @@ LPITEMIDLIST WINAPI ILGetNext(LPITEMIDLIST pidl)
* NOTES
* Adds the single item to the idlist indicated by pidl.
* if bEnd is 0, adds the item to the front of the list,
* otherwise adds the item to the end.
* Destroys the passed in idlist!
* otherwise adds the item to the end. (???)
* Destroys the passed in idlist! (???)
*/
LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl,LPCITEMIDLIST item,BOOL32 bEnd)
{ FIXME(pidl,"(pidl=%p,pidl=%p,%08u)stub\n",pidl,item,bEnd);
return NULL;
{ LPITEMIDLIST idlRet;
WARN(pidl,"(pidl=%p,pidl=%p,%08u)semi-stub\n",pidl,item,bEnd);
pdump (pidl);
pdump (item);
if (_ILIsDesktop(pidl))
{ idlRet = ILClone(item);
if (pidl)
SHFree (pidl);
return idlRet;
}
idlRet=ILCombine(pidl,item);
SHFree(pidl);
return idlRet;
}
/*************************************************************************
* ILFree [SHELL32.155]
......
......@@ -451,10 +451,11 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
enum
{ FT_UNKNOWN= 0x00000000,
FT_DIR= 0x00000001,
FT_DESKTOP= 0x00000002
FT_DESKTOP= 0x00000002,
FT_SPECIAL= 0x00000003
} tFolder;
TRACE(shell,"(%04x,%d,%p)\n", hwndOwner,nFolder,ppidl);
TRACE(shell,"(%04x,0x%x,%p)\n", hwndOwner,nFolder,ppidl);
strcpy(buffer,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\");
......@@ -467,15 +468,15 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
tFolder=FT_DIR;
switch (nFolder)
{ case CSIDL_BITBUCKET:
strcpy (buffer,"xxx"); /*not in the registry*/
TRACE (shell,"looking for Recycler\n");
tFolder=FT_UNKNOWN;
break;
strcpy (buffer,"xxx"); /*not in the registry*/
TRACE (shell,"looking for Recycler\n");
tFolder=FT_UNKNOWN;
break;
case CSIDL_CONTROLS:
strcpy (buffer,"xxx"); /*virtual folder*/
TRACE (shell,"looking for Control\n");
strcpy (buffer,"xxx"); /*virtual folder*/
TRACE (shell,"looking for Control\n");
tFolder=FT_UNKNOWN;
break;
break;
case CSIDL_DESKTOP:
strcpy (buffer,"xxx"); /*virtual folder*/
TRACE (shell,"looking for Desktop\n");
......@@ -487,7 +488,7 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
case CSIDL_DRIVES:
strcpy (buffer,"xxx"); /*virtual folder*/
TRACE (shell,"looking for Drives\n");
tFolder=FT_UNKNOWN;
tFolder=FT_SPECIAL;
break;
case CSIDL_FONTS:
strcpy (buffer,"Fonts");
......@@ -545,7 +546,7 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
{ GetWindowsDirectory32A(npath,MAX_PATH);
PathAddBackslash(npath);
switch (nFolder)
{ case CSIDL_DESKTOPDIRECTORY:
{ case CSIDL_DESKTOPDIRECTORY:
strcat (npath,"Desktop");
break;
case CSIDL_FONTS:
......@@ -554,13 +555,13 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
case CSIDL_NETHOOD:
strcat (npath,"NetHood");
break;
case CSIDL_PERSONAL:
case CSIDL_PERSONAL:
strcpy (npath,"C:\\Personal");
break;
case CSIDL_FAVORITES:
strcat (npath,"Favorites");
break;
case CSIDL_PRINTERS:
case CSIDL_PRINTERS:
strcat (npath,"PrintHood");
break;
case CSIDL_PROGRAMS:
......@@ -596,16 +597,19 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
}
TRACE(shell,"value %s=%s created\n",buffer,npath);
CreateDirectory32A(npath,NULL);
strcpy(tpath,npath);
strcpy(tpath,npath);
}
break;
case FT_DESKTOP:
strcpy (tpath,"Desktop");
break;
strcpy (tpath,"Desktop");
break;
case FT_SPECIAL:
if (nFolder==CSIDL_DRIVES)
strcpy (tpath,"My Computer");
break;
default:
RegCloseKey(key);
RegCloseKey(key);
return E_OUTOFMEMORY;
break;
}
RegCloseKey(key);
......
......@@ -990,54 +990,66 @@ HRESULT WINAPI SHGetDataFromIDListA(DWORD u, DWORD v, DWORD w, DWORD x, DWORD y)
return 0;
}
/*************************************************************************
* SHRegCloseKey [SHELL32.505]
* SHRegCloseKey32 [NT4.0:SHELL32.505]
*
* XXX I am not sure if the given param is correct. :-)
*/
HRESULT WINAPI SHRegCloseKey(HKEY key)
{ FIXME(shell,"(0x%08lx)\n", key);
/* XXX Is this correct? */
return RegCloseKey(key);
HRESULT WINAPI SHRegCloseKey32 (HKEY hkey)
{ TRACE(shell,"0x%04x\n",hkey);
return RegCloseKey( hkey );
}
/*************************************************************************
* SHRegOpenKey32A [SHELL32.506]
*
* XXX I am not sure if the given param is correct. :-)
*/
HRESULT WINAPI SHRegOpenKey32A(HKEY hKey, LPSTR lpSubKey, LPHKEY phkResult)
{ FIXME(shell,"(0x%08lx, %s, 0x%08lx)\n", hKey, debugstr_a(lpSubKey),
{ FIXME(shell,"(0x%08x, %s, %p)\n", hKey, debugstr_a(lpSubKey),
phkResult);
/* XXX Is this correct? */
return RegOpenKey32A(hKey, lpSubKey, phkResult);
}
/*************************************************************************
* SHRegOpenKey32W [SHELL32.507]
* SHRegOpenKey32W [NT4.0:SHELL32.507]
*
* XXX I am not sure if the given param is correct. :-)
*/
HRESULT WINAPI SHRegOpenKey32W(HKEY hKey, LPWSTR lpSubKey, LPHKEY phkResult)
{ FIXME(shell,"(0x%08lx, %s, 0x%08lx)\n", hKey, debugstr_w(lpSubKey),
phkResult);
/* XXX Is this correct? */
return RegOpenKey32W(hKey, lpSubKey, phkResult);
HRESULT WINAPI SHRegOpenKey32W (HKEY hkey, LPCWSTR lpszSubKey, LPHKEY retkey)
{ WARN(shell,"0x%04x %s %p\n",hkey,debugstr_w(lpszSubKey),retkey);
return RegOpenKey32W( hkey, lpszSubKey, retkey );
}
/*************************************************************************
* SHRegQueryValueExA [SHELL32.509]
*
* XXX I know this is not the correct parameter. Check with documentation.
*/
HRESULT WINAPI SHRegQueryValueEx32A(DWORD u, LPSTR v, DWORD w, DWORD x,
DWORD y, DWORD z)
{ FIXME(shell,"0x%04lx %s 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",u,debugstr_a(v),w,x,y,z);
{ FIXME(shell,"0x%04lx %s 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",
u,debugstr_a(v),w,x,y,z);
return 0;
}
/*************************************************************************
* SHRegQueryValue32W [NT4.0:SHELL32.510]
*
*/
HRESULT WINAPI SHRegQueryValue32W (HKEY hkey, LPWSTR lpszSubKey,
LPWSTR lpszData, LPDWORD lpcbData )
{ WARN(shell,"0x%04x %s %p %p semi-stub\n",
hkey, debugstr_w(lpszSubKey), lpszData, lpcbData);
return RegQueryValue32W( hkey, lpszSubKey, lpszData, lpcbData );
}
/*************************************************************************
* SHRegQueryValueEx32W [NT4.0:SHELL32.511]
*
* FIXME
* if the datatype REG_EXPAND_SZ then expand the string and change
* *pdwType to REG_SZ.
*/
HRESULT WINAPI SHRegQueryValueEx32W (DWORD u, LPWSTR v, DWORD w, DWORD x, DWORD y, DWORD z)
{ FIXME(shell,"0x%04lx %s 0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",u,debugstr_w(v),w,x,y,z);
return 0;
HRESULT WINAPI SHRegQueryValueEx32W (HKEY hkey, LPWSTR pszValue, LPDWORD pdwReserved,
LPDWORD pdwType, LPVOID pvData, LPDWORD pcbData)
{ DWORD ret;
WARN(shell,"0x%04x %s %p %p %p %p semi-stub\n",
hkey, debugstr_w(pszValue), pdwReserved, pdwType, pvData, pcbData);
ret = RegQueryValueEx32W ( hkey, pszValue, pdwReserved, pdwType, pvData, pcbData);
return ret;
}
/*************************************************************************
......@@ -1073,10 +1085,286 @@ HRESULT WINAPI IsUserAdmin()
return TRUE;
}
/*************************************************************************
* SHFlushClipboard [SHELL32.121]
* StrRetToStrN [SHELL32.96]
*
* converts a STRRET to a normal string
*
* NOTES
* FIXME the string handling is to simple (different STRRET choices)
* at the moment only CSTR
* the pidl is for STRRET OFFSET
*/
HRESULT WINAPI StrRetToStrN (LPSTR dest, DWORD len, LPSTRRET src, LPITEMIDLIST x)
{ FIXME(shell,"dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,x);
strncpy(dest,src->u.cStr,len);
return S_OK;
}
/*************************************************************************
* StrChrW [NT 4.0:SHELL32.651]
*
*/
HRESULT WINAPI StrChrW (LPWSTR u, DWORD v)
{ FIXME(shell,"%s 0x%lx stub\n",debugstr_w(u),v);
return 0;
}
/*************************************************************************
* SHAllocShared [SHELL32.520]
*
* NOTES
* parameter1 is return value from HeapAlloc
* parameter2 is equal to the size allocated with HeapAlloc
* parameter3 is return value from GetCurrentProcessId
*
* the return value is posted as lParam with 0x402 (WM_USER+2) to somewhere
* WM_USER+2 could be the undocumented CWM_SETPATH
* the allocated memory contains a pidl
*/
HGLOBAL32 WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID)
{ HGLOBAL32 hmem;
LPVOID pmem;
TRACE(shell,"ptr=%p size=0x%04lx procID=0x%04lx\n",psrc,size,procID);
hmem = GlobalAlloc32(GMEM_FIXED, size);
if (!hmem)
return 0;
pmem = GlobalLock32 (hmem);
if (! pmem)
return 0;
memcpy (pmem, psrc, size);
GlobalUnlock32(hmem);
return hmem;
}
/*************************************************************************
* SHLockShared [SHELL32.521]
*
* NOTES
* parameter1 is return value from SHAllocShared
* parameter2 is return value from GetCurrentProcessId
* the receiver of (WM_USER+2) trys to lock the HANDLE (?)
* the returnvalue seems to be a memoryadress
*/
void * WINAPI SHLockShared(HANDLE32 hmem, DWORD procID)
{ TRACE(shell,"handle=0x%04x procID=0x%04lx\n",hmem,procID);
return GlobalLock32(hmem);
}
/*************************************************************************
* SHUnlockShared [SHELL32.522]
*
* NOTES
* parameter1 is return value from SHLockShared
*/
BOOL32 WINAPI SHUnlockShared(HANDLE32 pmem)
{ TRACE(shell,"handle=0x%04x\n",pmem);
return GlobalUnlock32(pmem);
}
/*************************************************************************
* SHFreeShared [SHELL32.523]
*
* NOTES
* parameter1 is return value from SHAllocShared
* parameter2 is return value from GetCurrentProcessId
*/
HANDLE32 WINAPI SHFreeShared(HANDLE32 hmem, DWORD procID)
{ TRACE(shell,"handle=0x%04x 0x%04lx\n",hmem,procID);
return GlobalFree32(hmem);
}
/*************************************************************************
* SetAppStartingCursor32 [SHELL32.99]
*
*/
HRESULT WINAPI SHFlushClipboard(VOID)
HRESULT WINAPI SetAppStartingCursor32(DWORD u, DWORD v)
{ FIXME(shell,"0x%04lx 0x%04lx stub\n",u,v );
return 0;
}
/*************************************************************************
* SHLoadOLE32 [SHELL32.151]
*
*/
HRESULT WINAPI SHLoadOLE32(DWORD u)
{ FIXME(shell,"0x%04lx stub\n",u);
return S_OK;
}
/*************************************************************************
* Shell_MergeMenus32 [SHELL32.67]
*
*/
BOOL32 _SHIsMenuSeparator(HMENU32 hm, int i)
{
MENUITEMINFO32A mii;
mii.cbSize = sizeof(MENUITEMINFO32A);
mii.fMask = MIIM_TYPE;
mii.cch = 0; /* WARNING: We MUST initialize it to 0*/
if (!GetMenuItemInfo32A(hm, i, TRUE, &mii))
{ return(FALSE);
}
if (mii.fType & MFT_SEPARATOR)
{ return(TRUE);
}
return(FALSE);
}
#define MM_ADDSEPARATOR 0x00000001L
#define MM_SUBMENUSHAVEIDS 0x00000002L
HRESULT WINAPI Shell_MergeMenus32 (HMENU32 hmDst, HMENU32 hmSrc, UINT32 uInsert, UINT32 uIDAdjust, UINT32 uIDAdjustMax, ULONG uFlags)
{ int nItem;
HMENU32 hmSubMenu;
BOOL32 bAlreadySeparated;
MENUITEMINFO32A miiSrc;
char szName[256];
UINT32 uTemp, uIDMax = uIDAdjust;
FIXME(shell,"hmenu1=0x%04x hmenu2=0x%04x 0x%04x 0x%04x 0x%04x 0x%04lx stub\n",
hmDst, hmSrc, uInsert, uIDAdjust, uIDAdjustMax, uFlags);
if (!hmDst || !hmSrc)
{ return uIDMax;
}
nItem = GetMenuItemCount32(hmDst);
if (uInsert >= (UINT32)nItem)
{ uInsert = (UINT32)nItem;
bAlreadySeparated = TRUE;
}
else
{ bAlreadySeparated = _SHIsMenuSeparator(hmDst, uInsert);;
}
if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated)
{ /* Add a separator between the menus */
InsertMenu32A(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
bAlreadySeparated = TRUE;
}
/* Go through the menu items and clone them*/
for (nItem = GetMenuItemCount32(hmSrc) - 1; nItem >= 0; nItem--)
{ miiSrc.cbSize = sizeof(MENUITEMINFO32A);
miiSrc.fMask = MIIM_STATE | MIIM_ID | MIIM_SUBMENU | MIIM_CHECKMARKS | MIIM_TYPE | MIIM_DATA;
/* We need to reset this every time through the loop in case
menus DON'T have IDs*/
miiSrc.fType = MFT_STRING;
miiSrc.dwTypeData = szName;
miiSrc.dwItemData = 0;
miiSrc.cch = sizeof(szName);
if (!GetMenuItemInfo32A(hmSrc, nItem, TRUE, &miiSrc))
{ continue;
}
if (miiSrc.fType & MFT_SEPARATOR)
{ /* This is a separator; don't put two of them in a row*/
if (bAlreadySeparated)
{ continue;
}
bAlreadySeparated = TRUE;
}
else if (miiSrc.hSubMenu)
{ if (uFlags & MM_SUBMENUSHAVEIDS)
{ /* Adjust the ID and check it*/
miiSrc.wID += uIDAdjust;
if (miiSrc.wID > uIDAdjustMax)
{ continue;
}
if (uIDMax <= miiSrc.wID)
{ uIDMax = miiSrc.wID + 1;
}
}
else
{ /* Don't set IDs for submenus that didn't have them already */
miiSrc.fMask &= ~MIIM_ID;
}
hmSubMenu = miiSrc.hSubMenu;
miiSrc.hSubMenu = CreatePopupMenu32();
if (!miiSrc.hSubMenu)
{ return(uIDMax);
}
uTemp = Shell_MergeMenus32(miiSrc.hSubMenu, hmSubMenu, 0, uIDAdjust, uIDAdjustMax, uFlags&MM_SUBMENUSHAVEIDS);
if (uIDMax <= uTemp)
{ uIDMax = uTemp;
}
bAlreadySeparated = FALSE;
}
else
{ /* Adjust the ID and check it*/
miiSrc.wID += uIDAdjust;
if (miiSrc.wID > uIDAdjustMax)
{ continue;
}
if (uIDMax <= miiSrc.wID)
{ uIDMax = miiSrc.wID + 1;
}
bAlreadySeparated = FALSE;
}
if (!InsertMenuItem32A(hmDst, uInsert, TRUE, &miiSrc))
{ return(uIDMax);
}
}
/* Ensure the correct number of separators at the beginning of the
inserted menu items*/
if (uInsert == 0)
{ if (bAlreadySeparated)
{ DeleteMenu32(hmDst, uInsert, MF_BYPOSITION);
}
}
else
{ if (_SHIsMenuSeparator(hmDst, uInsert-1))
{ if (bAlreadySeparated)
{ DeleteMenu32(hmDst, uInsert, MF_BYPOSITION);
}
}
else
{ if ((uFlags & MM_ADDSEPARATOR) && !bAlreadySeparated)
{ /* Add a separator between the menus*/
InsertMenu32A(hmDst, uInsert, MF_BYPOSITION | MF_SEPARATOR, 0, NULL);
}
}
}
return(uIDMax);
}
/*************************************************************************
* PathGetDriveNumber32 [SHELL32.57]
*
*/
HRESULT WINAPI PathGetDriveNumber32(LPSTR u)
{ FIXME(shell,"%s stub\n",debugstr_a(u));
return 0;
}
/*************************************************************************
* DriveType32 [SHELL32.64]
*
*/
HRESULT WINAPI DriveType32(DWORD u)
{ FIXME(shell,"0x%04lx stub\n",u);
return 0;
}
/*************************************************************************
* SHAbortInvokeCommand [SHELL32.198]
*
*/
HRESULT WINAPI SHAbortInvokeCommand()
{ FIXME(shell,"stub\n");
return 1;
}
/*************************************************************************
* SHOutOfMemoryMessageBox [SHELL32.126]
*
*/
HRESULT WINAPI SHOutOfMemoryMessageBox(DWORD u, DWORD v, DWORD w)
{ FIXME(shell,"0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w);
return 0;
}
/*************************************************************************
* SHFlushClipboard [SHELL32.121]
*
*/
HRESULT WINAPI SHFlushClipboard()
{ FIXME(shell,"stub\n");
return 1;
}
......@@ -242,6 +242,9 @@ static HRESULT WINAPI IShellFolder_ParseDisplayName(
{ pidlFull = (LPITEMIDLIST)HeapAlloc(GetProcessHeap(),0,2);
pidlFull->mkid.cb = 0;
}
else if (strcmp(pszTemp,"My Computer")==0)
{ pidlFull = _ILCreateMyComputer();
}
else
{ pidlFull = _ILCreateMyComputer();
......@@ -394,6 +397,8 @@ static HRESULT WINAPI IShellFolder_CompareIDs(LPSHELLFOLDER this,
LPCITEMIDLIST pidlTemp1 = pidl1, pidlTemp2 = pidl2;
TRACE(shell,"(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n",this,lParam,pidl1,pidl2);
pdump (pidl1);
pdump (pidl2);
if (!pidl1 && !pidl2)
return 0;
......@@ -601,13 +606,13 @@ static HRESULT WINAPI IShellFolder_GetUIObjectOf( LPSHELLFOLDER this,HWND32 hwnd
#define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF)
static HRESULT WINAPI IShellFolder_GetDisplayNameOf( LPSHELLFOLDER this, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET lpName)
{ CHAR szText[MAX_PATH];
CHAR szTemp[MAX_PATH];
CHAR szSpecial[MAX_PATH];
CHAR szDrive[MAX_PATH];
DWORD dwVolumeSerialNumber,dwMaximumComponetLength,dwFileSystemFlags;
LPITEMIDLIST pidlTemp=NULL;
BOOL32 bSimplePidl=FALSE;
{ CHAR szText[MAX_PATH];
CHAR szTemp[MAX_PATH];
CHAR szSpecial[MAX_PATH];
CHAR szDrive[MAX_PATH];
DWORD dwVolumeSerialNumber,dwMaximumComponetLength,dwFileSystemFlags;
LPITEMIDLIST pidlTemp=NULL;
BOOL32 bSimplePidl=FALSE;
TRACE(shell,"(%p)->(pidl=%p,0x%08lx,%p)\n",this,pidl,dwFlags,lpName);
......@@ -740,7 +745,10 @@ static BOOL32 WINAPI IShellFolder_GetFolderPath(LPSHELLFOLDER this, LPSTR lpszOu
}
*lpszOut=0;
if (! this->mlpszFolder)
return FALSE;
dwSize = strlen (this->mlpszFolder) +1;
if ( dwSize > dwOutSize)
return FALSE;
......
......@@ -361,10 +361,10 @@ LRESULT ShellView_OnSize(LPSHELLVIEW this, WORD wWidth, WORD wHeight)
* ShellView_BuildFileMenu()
*/
HMENU32 ShellView_BuildFileMenu(LPSHELLVIEW this)
{ CHAR szText[MAX_PATH];
{ CHAR szText[MAX_PATH];
MENUITEMINFO32A mii;
int nTools,i;
HMENU32 hSubMenu;
int nTools,i;
HMENU32 hSubMenu;
TRACE(shell,"(%p) semi-stub\n",this);
......@@ -381,7 +381,7 @@ HMENU32 ShellView_BuildFileMenu(LPSHELLVIEW this)
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
if(TBSTYLE_SEP != g_Tools[i].bStyle)
if(TBSTYLE_SEP != g_Tools[i].bStyle) /* no seperator*/
{ mii.fType = MFT_STRING;
mii.fState = MFS_ENABLED;
mii.dwTypeData = szText;
......@@ -394,13 +394,14 @@ HMENU32 ShellView_BuildFileMenu(LPSHELLVIEW this)
InsertMenuItem32A(hSubMenu, (UINT32)-1, TRUE, &mii);
}
}
TRACE(shell,"-- return (menu=0x%x)\n",hSubMenu);
return hSubMenu;
}
/**************************************************************************
* ShellView_MergeFileMenu()
*/
void ShellView_MergeFileMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
{ MENUITEMINFO32A mii;
{ MENUITEMINFO32A mii;
CHAR szText[MAX_PATH];
TRACE(shell,"(%p)->(submenu=0x%08x) stub\n",this,hSubMenu);
......@@ -416,7 +417,7 @@ void ShellView_MergeFileMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
InsertMenuItem32A(hSubMenu, 0, TRUE, &mii);
/*add the file menu items */
strcpy(szText,"dummy 45");
strcpy(szText,"dummy 45");
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
......@@ -428,14 +429,15 @@ void ShellView_MergeFileMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
/*insert this item at the beginning of the menu */
InsertMenuItem32A(hSubMenu, 0, TRUE, &mii);
}
TRACE(shell,"--\n");
}
/**************************************************************************
* ShellView_MergeViewMenu()
*/
void ShellView_MergeViewMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
{ MENUITEMINFO32A mii;
CHAR szText[MAX_PATH];
{ MENUITEMINFO32A mii;
CHAR szText[MAX_PATH];
TRACE(shell,"(%p)->(submenu=0x%08x) stub\n",this,hSubMenu);
if(hSubMenu)
......@@ -448,7 +450,7 @@ void ShellView_MergeViewMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
InsertMenuItem32A(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
/*add the view menu items at the correct position in the menu*/
strcpy(szText,"Dummy 46");
strcpy(szText,"Dummy 46");
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
......@@ -463,7 +465,7 @@ void ShellView_MergeViewMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
* ShellView_UpdateMenu()
*/
LRESULT ShellView_UpdateMenu(LPSHELLVIEW this, HMENU32 hMenu)
{ TRACE(shell,"(%p)->(menu=0x%08x\n",this,hMenu);
{ TRACE(shell,"(%p)->(menu=0x%08x)\n",this,hMenu);
CheckMenuItem32(hMenu, IDM_VIEW_FILES, MF_BYCOMMAND | (g_bViewKeys ? MF_CHECKED: MF_UNCHECKED));
if(ShellView_CanDoIDockingWindow(this))
......@@ -474,7 +476,7 @@ LRESULT ShellView_UpdateMenu(LPSHELLVIEW this, HMENU32 hMenu)
{ EnableMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
CheckMenuItem32(hMenu, IDM_VIEW_IDW, MF_BYCOMMAND | MF_UNCHECKED);
}
return 0;
return S_OK;
}
/**************************************************************************
......@@ -498,7 +500,7 @@ void ShellView_OnDeactivate(LPSHELLVIEW this)
}
/**************************************************************************
* CShellView_OnActivate()
* ShellView_OnActivate()
*/
LRESULT ShellView_OnActivate(LPSHELLVIEW this, UINT32 uState)
{ OLEMENUGROUPWIDTHS32 omw = { {0, 0, 0, 0, 0, 0} };
......@@ -521,7 +523,7 @@ LRESULT ShellView_OnActivate(LPSHELLVIEW this, UINT32 uState)
if(this->hMenu)
{ this->pShellBrowser->lpvtbl->fnInsertMenusSB(this->pShellBrowser, this->hMenu, &omw);
TRACE(shell,"-- after fnInsertMenusSB\n");
/*build the top level menu get the menu item's text*/
strcpy(szText,"dummy 31");
......@@ -558,11 +560,13 @@ LRESULT ShellView_OnActivate(LPSHELLVIEW this, UINT32 uState)
{ ShellView_MergeFileMenu(this, mii.hSubMenu);
}
}
TRACE(shell,"-- before fnSetMenuSB\n");
this->pShellBrowser->lpvtbl->fnSetMenuSB(this->pShellBrowser, this->hMenu, 0, this->hWnd);
}
}
this->uState = uState;
return 0;
TRACE(shell,"--\n");
return S_OK;
}
/**************************************************************************
......@@ -600,7 +604,7 @@ BOOL32 ShellView_AddRemoveDockingWindow(LPSHELLVIEW this, BOOL32 bAdd)
LPSERVICEPROVIDER pSP;
LPDOCKINGWINDOWFRAME pFrame;
FIXME(shell,"(%p)->(badd=0x%08x) stub\n",this,bAdd);
WARN(shell,"(%p)->(badd=0x%08x) semi-stub\n",this,bAdd);
/* get the browser's IServiceProvider */
hr = this->pShellBrowser->lpvtbl->fnQueryInterface(this->pShellBrowser, (REFIID)&IID_IServiceProvider, (LPVOID*)&pSP);
......@@ -610,6 +614,7 @@ BOOL32 ShellView_AddRemoveDockingWindow(LPSHELLVIEW this, BOOL32 bAdd)
if(SUCCEEDED(hr))
{ if(bAdd)
{ hr = S_OK;
FIXME(shell,"no docking implemented\n");
/*if(!this->pDockingWindow)
{ //create the toolbar object
this->pDockingWindow = DockingWindow_Constructor(this, this->hWnd);
......@@ -625,8 +630,9 @@ BOOL32 ShellView_AddRemoveDockingWindow(LPSHELLVIEW this, BOOL32 bAdd)
}*/
}
else
{ /*if(this->pDockingWindow)
{ hr = pFrame->->lpvtbl->fnRemoveToolbar(pFrame, (IDockingWindow*)this->pDockingWindow, DWFRF_NORMAL);
{ FIXME(shell,"no docking implemented\n");
/* if(this->pDockingWindow)
{ hr = pFrame->lpvtbl->fnRemoveToolbar(pFrame, (IDockingWindow*)this->pDockingWindow, DWFRF_NORMAL);
if(SUCCEEDED(hr))
{ // RemoveToolbar should release the toolbar object which will cause
......@@ -820,7 +826,7 @@ void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
}
else /* we are acting with a full featured IShellBrowser */
{ TRACE(shell,"-- fnBrowseObject pidl =%p\n", this->aSelectedItems[0]);
wFlags = SBSP_DEFBROWSER | SBSP_DEFMODE | SBSP_RELATIVE;
wFlags = SBSP_SAMEBROWSER | SBSP_DEFMODE | SBSP_RELATIVE;
this->pShellBrowser->lpvtbl->fnBrowseObject(this->pShellBrowser,
this->aSelectedItems[0],
wFlags);
......
......@@ -61,6 +61,9 @@ DEFINE_SHLGUID(IID_IPersist, 0x0000010CL, 0, 0);
DEFINE_SHLGUID(IID_IViewObject, 0x0000010DL, 0, 0);
DEFINE_SHLGUID(IID_IDataObject, 0x0000010EL, 0, 0);
DEFINE_SHLGUID(IID_IDropSource, 0x00000121L, 0, 0);
DEFINE_SHLGUID(IID_IDropTarget, 0x00000122L, 0, 0);
DEFINE_GUID (IID_IServiceProvider, 0x6D5140C1L, 0x7436, 0x11CE, 0x80, 0x34, 0x00, 0xAA, 0x00, 0x60, 0x09, 0xFA);
DEFINE_GUID (IID_IDockingWindow, 0x012dd920L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
DEFINE_GUID (IID_IDockingWindowSite, 0x2A342FC2L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
......
......@@ -52,27 +52,27 @@ init Shell32LibMain
44 stub DoEnvironmentSubstA # exported by name
45 stdcall PathFileExists(str) PathFileExists
46 stdcall PathMatchSpec (str str) PathMatchSpec
47 stub PathMakeUniqueName
48 stub PathSetDlgItemPath
49 stub PathQualify
47 stub PathMakeUniqueName@20
48 stub PathSetDlgItemPath@12
49 stub PathQualify@4
50 stub PathStripToRoot
51 stdcall PathResolve(str long long) PathResolve
52 stdcall PathGetArgs(str) PathGetArgs
53 stub DoEnvironmentSubstW # exported by name
53 stub DoEnvironmentSubstW@8 # exported by name
54 stdcall DragAcceptFiles(long long) DragAcceptFiles # exported by name
55 stub PathQuoteSpaces
56 stdcall PathUnquoteSpaces(str) PathUnquoteSpaces
57 stub PathGetDriveNumber
57 stdcall PathGetDriveNumber (str) PathGetDriveNumber32
58 stdcall ParseField(str long str long) ParseField
59 stub RestartDialog
60 stdcall ExitWindowsDialog(long) ExitWindowsDialog
61 stdcall RunFileDlg(long long long str str long) RunFileDlg
62 stdcall PickIconDlg(long long long long) PickIconDlg
63 stdcall GetFileNameFromBrowse(long long long long str str str) GetFileNameFromBrowse
64 stub DriveType
64 stdcall DriveType (long) DriveType32
65 stub InvalidateDriveType
66 stub IsNetDrive
67 stub Shell_MergeMenus
67 stdcall Shell_MergeMenus (long long long long long long) Shell_MergeMenus32
68 stdcall SHGetSettings(long long long) SHGetSettings
69 stub SHGetNetResource
70 stub SHCreateDefClassObject
......@@ -101,10 +101,10 @@ init Shell32LibMain
93 stub Win32CreateDirectory
94 stub Win32RemoveDirectory
95 stdcall SHLogILFromFSIL (ptr) SHLogILFromFSIL
96 stub StrRetToStrN
96 stdcall StrRetToStrN (long long long long) StrRetToStrN
97 stub SHWaitForFileToOpen
98 stub SHGetRealIDL
99 stub SetAppStartingCursor
98 stdcall SHGetRealIDL (long long long) SHGetRealIDL
99 stdcall SetAppStartingCursor (long long) SetAppStartingCursor32
100 stdcall SHRestricted(long) SHRestricted
101 stub DragQueryFileAorW # exported by name
102 stdcall SHCoCreateInstance(ptr ptr long ptr ptr) SHCoCreateInstance
......@@ -126,12 +126,12 @@ init Shell32LibMain
118 stdcall FileMenu_Destroy (long) FileMenu_Destroy
119 stdcall IsLFNDrive(str) IsLFNDrive
120 stub FileMenu_AbortInitMenu
121 stdcall SHFlushClipboard() SHFlushClipboard
121 stdcall SHFlushClipboard () SHFlushClipboard
122 stub RunDLL_CallEntry16
123 stdcall SHFreeUnusedLibraries (long) SHFreeUnusedLibraries
124 stub FileMenu_AppendFilesForPidl
125 stub FileMenu_AddFilesForPidl
126 stub SHOutOfMemoryMessageBox
126 stdcall SHOutOfMemoryMessageBox (long long long) SHOutOfMemoryMessageBox
127 stdcall SHWinHelp (long long long long) SHWinHelp
128 stdcall DllGetClassObject(long long ptr) SHELL32_DllGetClassObject
129 stub DAD_AutoScroll
......@@ -156,17 +156,17 @@ init Shell32LibMain
148 stdcall ExtractAssociatedIconA(long ptr long) ExtractAssociatedIcon32A # exported by name
149 stdcall SHFind_InitMenuPopup(long long long long) SHFind_InitMenuPopup
150 stub ExtractAssociatedIconExA # exported by name
151 stub SHLoadOLE
151 stdcall SHLoadOLE (long) SHLoadOLE32
152 stdcall ILGetSize(ptr) ILGetSize
153 stdcall ILGetNext(ptr) ILGetNext
154 stub ILAppend
154 stdcall ILAppend (long long long) ILAppend
155 stdcall ILFree(ptr) ILFree
156 stub ILGlobalFree
157 stdcall ILCreateFromPath (ptr) ILCreateFromPath
158 stdcall PathGetExtension(str long long) PathGetExtension
159 stub PathIsDirectory
160 stub SHNetConnectionDialog
161 stdcall SHRunControlPanel (long long)SHRunControlPanel
161 stdcall SHRunControlPanel (long long) SHRunControlPanel
162 stub SHSimpleIDListFromPath
163 stub StrToOleStr
164 stub Win32DeleteFile
......@@ -203,7 +203,7 @@ init Shell32LibMain
195 stdcall SHFree(ptr) SHFree
196 stdcall SHAlloc(long) SHAlloc
197 stub SHGlobalDefect
198 stub SHAbortInvokeCommand
198 stdcall SHAbortInvokeCommand () SHAbortInvokeCommand
199 stub SHGetFileIcon
200 stub SHLocalAlloc
201 stub SHLocalFree
......@@ -310,7 +310,7 @@ init Shell32LibMain
301 stub StrChrA # proper ordinal unknown
302 stub StrChrIA # proper ordinal unknown
303 stub StrChrIW # proper ordinal unknown
304 stub StrChrW # proper ordinal unknown
304 stdcall StrChrW (ptr ptr) StrChrW # proper ordinal unknown
305 stub StrCmpNA # proper ordinal unknown
306 stub StrCmpNIA # proper ordinal unknown
307 stub StrCmpNIW # proper ordinal unknown
......@@ -337,19 +337,19 @@ init Shell32LibMain
328 stub StrStrW # proper ordinal unknown
329 stub WOWShellExecute # proper ordinal unknown
505 stdcall SHRegCloseKey (long) SHRegCloseKey
505 stdcall SHRegCloseKey (long) SHRegCloseKey32
506 stdcall SHRegOpenKeyA (long str long) SHRegOpenKey32A
507 stdcall SHRegOpenKeyW (long wstr long) SHRegOpenKey32W
507 stdcall SHRegOpenKeyW (long wstr long long) SHRegOpenKey32W
508 stub SHRegQueryValueA@16
509 stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr) SHRegQueryValueEx32A
510 stub SHRegQueryValueW@16
510 stdcall SHRegQueryValueW (long long long long) SHRegQueryValue32W
511 stdcall SHRegQueryValueExW (long wstr ptr ptr ptr ptr) SHRegQueryValueEx32W
512 stub SHRegDeleteKeyW@8
520 stub SHAllocShared@12
521 stub SHLockShared@8
522 stub SHUnlockShared@4
523 stub SHFreeShared@8
520 stdcall SHAllocShared (long long long) SHAllocShared
521 stdcall SHLockShared (long long) SHLockShared
522 stdcall SHUnlockShared (long) SHUnlockShared
523 stdcall SHFreeShared (long long) SHFreeShared
524 stub RealDriveType@8
525 stub RealDriveTypeFlags@8
......@@ -360,13 +360,13 @@ init Shell32LibMain
644 stub SHChangeNotification_Lock@16
645 stub SHChangeNotification_Unlock@4
646 stub SHChangeRegistrationReceive@8
647 stub ReceiveAddToRecentDocs
647 stub ReceiveAddToRecentDocs@8
648 stub SHWaitOp_Operate@8
650 stub PathIsSameRoot
650 stub PathIsSameRoot@8
651 stdcall ReadCabinetState (long long) ReadCabinetState
652 stdcall WriteCabinetState (long) WriteCabinetState
653 stub PathProcessCommand
653 stub PathProcessCommand@16
660 stdcall FileIconInit (long) FileIconInit
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment