Bugfix in PathCombine32[A|W].

View menu in explorer and on right mouse button is working now.
oldstable
Juergen Schmied 1998-12-11 11:06:50 +00:00 committed by Alexandre Julliard
parent 18dbfaae84
commit baae7c4950
3 changed files with 96 additions and 99 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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;
} }
/************************************************************************** /**************************************************************************