Bugfix in PathCombine32[A|W].
View menu in explorer and on right mouse button is working now.
This commit is contained in:
parent
18dbfaae84
commit
baae7c4950
|
@ -39,6 +39,7 @@ extern HICON32 WINAPI SIC_GetIcon (LPSTR sSourceFile, DWORD dwSourceIndex, BOOL3
|
||||||
|
|
||||||
/* Classes Root */
|
/* Classes Root */
|
||||||
extern BOOL32 WINAPI HCR_MapTypeToValue ( LPSTR szExtension, LPSTR szFileType, DWORD len);
|
extern BOOL32 WINAPI HCR_MapTypeToValue ( LPSTR szExtension, LPSTR szFileType, DWORD len);
|
||||||
|
extern BOOL32 WINAPI HCR_GetExecuteCommand ( LPCSTR szClass, LPCSTR szVerb, LPSTR szDest, DWORD len );
|
||||||
|
|
||||||
HGLOBAL32 WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID);
|
HGLOBAL32 WINAPI SHAllocShared(LPVOID psrc, DWORD size, DWORD procID);
|
||||||
LPVOID WINAPI SHLockShared(HANDLE32 hmem, DWORD procID);
|
LPVOID WINAPI SHLockShared(HANDLE32 hmem, DWORD procID);
|
||||||
|
|
|
@ -305,10 +305,12 @@ LPSTR WINAPI PathCombine32A(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile)
|
||||||
if (PathIsRoot32A(lpszFile))
|
if (PathIsRoot32A(lpszFile))
|
||||||
{ strcpy(szDest,lpszFile);
|
{ strcpy(szDest,lpszFile);
|
||||||
}
|
}
|
||||||
strcpy(sTemp,lpszDir);
|
else
|
||||||
PathAddBackslash32A(sTemp);
|
{ strcpy(sTemp,lpszDir);
|
||||||
strcat(sTemp,lpszFile);
|
PathAddBackslash32A(sTemp);
|
||||||
strcpy(szDest,sTemp);
|
strcat(sTemp,lpszFile);
|
||||||
|
strcpy(szDest,sTemp);
|
||||||
|
}
|
||||||
return szDest;
|
return szDest;
|
||||||
}
|
}
|
||||||
LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
|
LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
|
||||||
|
@ -326,10 +328,12 @@ LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
|
||||||
if (PathIsRoot32W(lpszFile))
|
if (PathIsRoot32W(lpszFile))
|
||||||
{ lstrcpy32W(szDest,lpszFile);
|
{ lstrcpy32W(szDest,lpszFile);
|
||||||
}
|
}
|
||||||
lstrcpy32W(sTemp,lpszDir);
|
else
|
||||||
PathAddBackslash32W(sTemp);
|
{ lstrcpy32W(sTemp,lpszDir);
|
||||||
lstrcat32W(sTemp,lpszFile);
|
PathAddBackslash32W(sTemp);
|
||||||
lstrcpy32W(szDest,sTemp);
|
lstrcat32W(sTemp,lpszFile);
|
||||||
|
lstrcpy32W(szDest,sTemp);
|
||||||
|
}
|
||||||
return szDest;
|
return szDest;
|
||||||
}
|
}
|
||||||
LPVOID WINAPI PathCombine32AW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile)
|
LPVOID WINAPI PathCombine32AW(LPVOID szDest, LPCVOID lpszDir, LPCVOID lpszFile)
|
||||||
|
|
|
@ -97,6 +97,9 @@ typedef struct
|
||||||
BYTE bStyle;
|
BYTE bStyle;
|
||||||
} MYTOOLINFO, *LPMYTOOLINFO;
|
} MYTOOLINFO, *LPMYTOOLINFO;
|
||||||
|
|
||||||
|
extern LPCVOID _Resource_Men_MENU_001_0_data;
|
||||||
|
extern LPCVOID _Resource_Men_MENU_002_0_data;
|
||||||
|
|
||||||
MYTOOLINFO g_Tools[] =
|
MYTOOLINFO g_Tools[] =
|
||||||
{ {IDM_VIEW_FILES, 0, IDS_TB_VIEW_FILES, IDS_MI_VIEW_FILES, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON},
|
{ {IDM_VIEW_FILES, 0, IDS_TB_VIEW_FILES, IDS_MI_VIEW_FILES, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON},
|
||||||
{-1, 0, 0, 0, 0, 0, 0}
|
{-1, 0, 0, 0, 0, 0, 0}
|
||||||
|
@ -495,12 +498,23 @@ void ShellView_MergeFileMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* ShellView_MergeViewMenu()
|
* ShellView_MergeViewMenu()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void ShellView_MergeViewMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
|
void ShellView_MergeViewMenu(LPSHELLVIEW this, HMENU32 hSubMenu)
|
||||||
{ TRACE(shell,"(%p)->(submenu=0x%08x) stub\n",this,hSubMenu);
|
{ MENUITEMINFO32A mii;
|
||||||
|
|
||||||
|
TRACE(shell,"(%p)->(submenu=0x%08x)\n",this,hSubMenu);
|
||||||
|
|
||||||
if(hSubMenu)
|
if(hSubMenu)
|
||||||
{ /*add a separator at the correct position in the menu*/
|
{ /*add a separator at the correct position in the menu*/
|
||||||
_InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
_InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, 0, MFT_SEPARATOR, NULL, MFS_ENABLED);
|
||||||
_InsertMenuItem(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, IDM_VIEW_FILES, MFT_STRING, TEXT("_View"), MFS_ENABLED);
|
|
||||||
|
ZeroMemory(&mii, sizeof(mii));
|
||||||
|
mii.cbSize = sizeof(mii);
|
||||||
|
mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_DATA;;
|
||||||
|
mii.fType = MFT_STRING;
|
||||||
|
mii.dwTypeData = "View";
|
||||||
|
mii.hSubMenu = LoadMenuIndirect32A(&_Resource_Men_MENU_001_0_data);
|
||||||
|
InsertMenuItem32A(hSubMenu, FCIDM_MENU_VIEW_SEP_OPTIONS, FALSE, &mii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -769,6 +783,52 @@ LRESULT ShellView_OnSettingChange(LPSHELLVIEW this, LPCSTR lpszSection)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**************************************************************************
|
||||||
|
* ShellView_OnCommand()
|
||||||
|
*/
|
||||||
|
LRESULT ShellView_OnCommand(LPSHELLVIEW this,DWORD dwCmdID, DWORD dwCmd, HWND32 hwndCmd)
|
||||||
|
{ TRACE(shell,"(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",this, dwCmdID, dwCmd, hwndCmd);
|
||||||
|
switch(dwCmdID)
|
||||||
|
{ case IDM_VIEW_FILES:
|
||||||
|
g_bViewKeys = ! g_bViewKeys;
|
||||||
|
IShellView_Refresh(this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDM_VIEW_IDW:
|
||||||
|
g_bShowIDW = ! g_bShowIDW;
|
||||||
|
ShellView_AddRemoveDockingWindow(this, g_bShowIDW);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDM_MYFILEITEM:
|
||||||
|
MessageBeep32(MB_OK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FCIDM_SHVIEW_SMALLICON:
|
||||||
|
this->FolderSettings.ViewMode = FVM_SMALLICON;
|
||||||
|
SetStyle (this, LVS_SMALLICON, LVS_TYPEMASK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FCIDM_SHVIEW_BIGICON:
|
||||||
|
this->FolderSettings.ViewMode = FVM_ICON;
|
||||||
|
SetStyle (this, LVS_ICON, LVS_TYPEMASK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FCIDM_SHVIEW_LISTVIEW:
|
||||||
|
this->FolderSettings.ViewMode = FVM_LIST;
|
||||||
|
SetStyle (this, LVS_LIST, LVS_TYPEMASK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FCIDM_SHVIEW_REPORTVIEW:
|
||||||
|
this->FolderSettings.ViewMode = FVM_DETAILS;
|
||||||
|
SetStyle (this, LVS_REPORT, LVS_TYPEMASK);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME(shell,"-- COMMAND unhandled\n");
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* ShellView_GetSelections()
|
* ShellView_GetSelections()
|
||||||
*
|
*
|
||||||
|
@ -823,13 +883,9 @@ void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
|
||||||
|
|
||||||
/* look, what's selected and create a context menu object of it*/
|
/* look, what's selected and create a context menu object of it*/
|
||||||
if(ShellView_GetSelections(this))
|
if(ShellView_GetSelections(this))
|
||||||
{ this->pSFParent->lpvtbl->fnGetUIObjectOf( this->pSFParent,
|
{ this->pSFParent->lpvtbl->fnGetUIObjectOf( this->pSFParent, this->hWndParent, this->uSelected,
|
||||||
this->hWndParent,
|
this->aSelectedItems, (REFIID)&IID_IContextMenu,
|
||||||
this->uSelected,
|
NULL, (LPVOID *)&pContextMenu);
|
||||||
this->aSelectedItems,
|
|
||||||
(REFIID)&IID_IContextMenu,
|
|
||||||
NULL,
|
|
||||||
(LPVOID *)&pContextMenu);
|
|
||||||
|
|
||||||
if(pContextMenu)
|
if(pContextMenu)
|
||||||
{ TRACE(shell,"-- pContextMenu\n");
|
{ TRACE(shell,"-- pContextMenu\n");
|
||||||
|
@ -850,8 +906,7 @@ void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
|
||||||
{ if( fDefault )
|
{ if( fDefault )
|
||||||
{ TRACE(shell,"-- get menu default command\n");
|
{ TRACE(shell,"-- get menu default command\n");
|
||||||
|
|
||||||
uCommand = 0;
|
uCommand = nMenuIndex = 0;
|
||||||
nMenuIndex = 0;
|
|
||||||
ZeroMemory(&mii, sizeof(mii));
|
ZeroMemory(&mii, sizeof(mii));
|
||||||
mii.cbSize = sizeof(mii);
|
mii.cbSize = sizeof(mii);
|
||||||
mii.fMask = MIIM_STATE | MIIM_ID;
|
mii.fMask = MIIM_STATE | MIIM_ID;
|
||||||
|
@ -867,102 +922,39 @@ void ShellView_DoContextMenu(LPSHELLVIEW this, WORD x, WORD y, BOOL32 fDefault)
|
||||||
else
|
else
|
||||||
{ TRACE(shell,"-- track popup\n");
|
{ TRACE(shell,"-- track popup\n");
|
||||||
uCommand = TrackPopupMenu32( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,this->hWnd,NULL);
|
uCommand = TrackPopupMenu32( hMenu,TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,this->hWnd,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(uCommand > 0)
|
if(uCommand > 0)
|
||||||
{ TRACE(shell,"-- uCommand=%u\n", uCommand);
|
{ TRACE(shell,"-- uCommand=%u\n", uCommand);
|
||||||
if (((uCommand-MENU_OFFSET) == IDM_EXPLORE) || ((uCommand-MENU_OFFSET) == IDM_OPEN))
|
if (IsInCommDlg(this) && (((uCommand-MENU_OFFSET)==IDM_EXPLORE) || ((uCommand-MENU_OFFSET)==IDM_OPEN)))
|
||||||
{ if (IsInCommDlg(this)) /* are we part of a commctrl? */
|
{ TRACE(shell,"-- dlg: OnDefaultCommand\n");
|
||||||
{ TRACE(shell,"-- dlg: OnDefaultCommand\n");
|
OnDefaultCommand(this);
|
||||||
OnDefaultCommand(this);
|
|
||||||
}
|
|
||||||
else /* we are acting with a full featured IShellBrowser */
|
|
||||||
{ TRACE(shell,"-- explorer: BrowseObject pidl =%p\n", this->aSelectedItems[0]);
|
|
||||||
/*wFlags = SBSP_SAMEBROWSER | SBSP_DEFMODE | SBSP_RELATIVE;
|
|
||||||
IShellBrowser_BrowseObject(this->pShellBrowser, this->aSelectedItems[0], wFlags);*/
|
|
||||||
{ int i = ILGetSize( this->aSelectedItems[0] );
|
|
||||||
char commandline[255];
|
|
||||||
STARTUPINFO32A startupinfo;
|
|
||||||
PROCESS_INFORMATION processinformation;
|
|
||||||
HGLOBAL32 hmem;
|
|
||||||
|
|
||||||
ZeroMemory(&startupinfo,sizeof(STARTUPINFO32A));
|
|
||||||
startupinfo.cb = sizeof(STARTUPINFO32A);
|
|
||||||
|
|
||||||
hmem = SHAllocShared ( this->aSelectedItems[0], i, 0);
|
|
||||||
|
|
||||||
sprintf (commandline, " /N,/IDList,:%li", (DWORD)SHLockShared(hmem,0));
|
|
||||||
CreateProcess32A("explorer.exe", commandline, NULL, NULL, FALSE, 0,
|
|
||||||
NULL, NULL, &startupinfo, &processinformation);
|
|
||||||
SHUnlockShared(hmem);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ TRACE(shell,"-- invoke command\n");
|
{ TRACE(shell,"-- explore -- invoke command\n");
|
||||||
ZeroMemory(&cmi, sizeof(cmi));
|
ZeroMemory(&cmi, sizeof(cmi));
|
||||||
cmi.cbSize = sizeof(cmi);
|
cmi.cbSize = sizeof(cmi);
|
||||||
cmi.hwnd = this->hWndParent;
|
cmi.hwnd = this->hWndParent;
|
||||||
cmi.lpVerb = (LPCSTR)MAKEINTRESOURCE32A(uCommand - MENU_OFFSET);
|
cmi.lpVerb = (LPCSTR)MAKEINTRESOURCE32A(uCommand - MENU_OFFSET);
|
||||||
pContextMenu->lpvtbl->fnInvokeCommand(pContextMenu, &cmi);
|
pContextMenu->lpvtbl->fnInvokeCommand(pContextMenu, &cmi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DestroyMenu32(hMenu);
|
DestroyMenu32(hMenu);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pContextMenu->lpvtbl->fnRelease(pContextMenu);
|
if (pContextMenu)
|
||||||
|
pContextMenu->lpvtbl->fnRelease(pContextMenu);
|
||||||
}
|
}
|
||||||
SHFree(this->aSelectedItems);
|
SHFree(this->aSelectedItems);
|
||||||
this->aSelectedItems=NULL;
|
this->aSelectedItems=NULL;
|
||||||
this->uSelected=0;
|
this->uSelected=0;
|
||||||
}
|
}
|
||||||
}
|
else /* background context menu */
|
||||||
|
{ hMenu = LoadMenuIndirect32A(&_Resource_Men_MENU_002_0_data);
|
||||||
/**************************************************************************
|
uCommand = TrackPopupMenu32( GetSubMenu32(hMenu,0),TPM_LEFTALIGN | TPM_RETURNCMD,x,y,0,this->hWnd,NULL);
|
||||||
* ShellView_OnCommand()
|
ShellView_OnCommand(this, uCommand, 0,0);
|
||||||
*/
|
DestroyMenu32(hMenu);
|
||||||
LRESULT ShellView_OnCommand(LPSHELLVIEW this,DWORD dwCmdID, DWORD dwCmd, HWND32 hwndCmd)
|
|
||||||
{ TRACE(shell,"(%p)->(0x%08lx 0x%08lx 0x%08x) stub\n",this, dwCmdID, dwCmd, hwndCmd);
|
|
||||||
switch(dwCmdID)
|
|
||||||
{ case IDM_VIEW_FILES:
|
|
||||||
g_bViewKeys = ! g_bViewKeys;
|
|
||||||
IShellView_Refresh(this);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDM_VIEW_IDW:
|
|
||||||
g_bShowIDW = ! g_bShowIDW;
|
|
||||||
ShellView_AddRemoveDockingWindow(this, g_bShowIDW);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDM_MYFILEITEM:
|
|
||||||
MessageBeep32(MB_OK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FCIDM_SHVIEW_SMALLICON:
|
|
||||||
this->FolderSettings.ViewMode = FVM_SMALLICON;
|
|
||||||
SetStyle (this, LVS_SMALLICON, LVS_TYPEMASK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FCIDM_SHVIEW_BIGICON:
|
|
||||||
this->FolderSettings.ViewMode = FVM_ICON;
|
|
||||||
SetStyle (this, LVS_ICON, LVS_TYPEMASK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FCIDM_SHVIEW_LISTVIEW:
|
|
||||||
this->FolderSettings.ViewMode = FVM_LIST;
|
|
||||||
SetStyle (this, LVS_LIST, LVS_TYPEMASK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FCIDM_SHVIEW_REPORTVIEW:
|
|
||||||
this->FolderSettings.ViewMode = FVM_DETAILS;
|
|
||||||
SetStyle (this, LVS_REPORT, LVS_TYPEMASK);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
FIXME(shell,"-- COMMAND unhandled\n");
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue