Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '7zip/UI/Explorer/ContextMenu.cpp')
-rwxr-xr-x7zip/UI/Explorer/ContextMenu.cpp77
1 files changed, 16 insertions, 61 deletions
diff --git a/7zip/UI/Explorer/ContextMenu.cpp b/7zip/UI/Explorer/ContextMenu.cpp
index ca3fd030..7af6e138 100755
--- a/7zip/UI/Explorer/ContextMenu.cpp
+++ b/7zip/UI/Explorer/ContextMenu.cpp
@@ -229,25 +229,11 @@ void CZipContextMenu::FillCommand(ECommandInternalID id,
return;
const CContextMenuCommand &command = g_Commands[i];
commandMapItem.CommandInternalID = command.CommandInternalID;
- commandMapItem.Verb = command.Verb;
+ commandMapItem.Verb = (UString)kMainVerb + (UString)command.Verb;
commandMapItem.HelpString = LangString(command.ResourceHelpID, command.LangID + 1);
mainString = LangString(command.ResourceID, command.LangID);
}
-void CZipContextMenu::FillCommand2(ECommandInternalID id,
- UString &mainString, CCommandMapItem &commandMapItem)
-{
- int i = FindCommand(id);
- if (i < 0)
- return;
- const CContextMenuCommand &command = g_Commands[i];
- commandMapItem.CommandInternalID = command.CommandInternalID;
- commandMapItem.Verb = command.Verb;
- commandMapItem.HelpString = LangString(command.ResourceHelpID, command.LangID + 1);
- mainString = LangString(command.ResourceID, command.LangID);
-}
-
-
static bool MyInsertMenu(CMenu &menu, int pos, UINT id, const UString &s)
{
CMenuItem menuItem;
@@ -397,7 +383,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
{
CCommandMapItem commandMapItem;
UString s;
- FillCommand2(kExtractTo, s, commandMapItem);
+ FillCommand(kExtractTo, s, commandMapItem);
UString folder;
if (_fileNames.Size() == 1)
folder = GetSubFolderNameForExtract(fileInfo.Name);
@@ -446,7 +432,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
{
CCommandMapItem commandMapItem;
UString s;
- FillCommand2(kCompressTo, s, commandMapItem);
+ FillCommand(kCompressTo, s, commandMapItem);
if (_dropMode)
commandMapItem.Folder = _dropPath;
else
@@ -473,7 +459,7 @@ STDMETHODIMP CZipContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
{
CCommandMapItem commandMapItem;
UString s;
- FillCommand2(kCompressToEmail, s, commandMapItem);
+ FillCommand(kCompressToEmail, s, commandMapItem);
commandMapItem.Archive = archiveName7z;
UString t = UString(L"\"") + GetReducedString(archiveName7z) + UString(L"\"");
s = MyFormatNew(s, t);
@@ -528,55 +514,25 @@ static UString GetProgramCommand()
STDMETHODIMP CZipContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO commandInfo)
{
+ // ::OutputDebugStringA("1");
int commandOffset;
-
- if(HIWORD(commandInfo->lpVerb) == 0)
- commandOffset = LOWORD(commandInfo->lpVerb);
- else
- commandOffset = FindVerb(GetUnicodeString(commandInfo->lpVerb));
- /*
- #ifdef _UNICODE
- if(commandInfo->cbSize == sizeof(CMINVOKECOMMANDINFOEX))
- {
- if ((commandInfo->fMask & CMIC_MASK_UNICODE) != 0)
- {
- LPCMINVOKECOMMANDINFOEX aCommandInfoEx = (LPCMINVOKECOMMANDINFOEX)commandInfo;
- if(HIWORD(aCommandInfoEx->lpVerb) == 0)
- commandOffset = LOWORD(aCommandInfoEx->lpVerb);
- else
- {
- MessageBox(0, TEXT("1"), TEXT("1"), 0);
- return E_FAIL;
- }
- }
- else
- {
- if(HIWORD(commandInfo->lpVerb) == 0)
- commandOffset = LOWORD(commandInfo->lpVerb);
- else
- commandOffset = FindVerb(commandInfo->lpVerb);
- }
- // return E_FAIL;
- }
- else
+
+ // It's fix for bug: crashing in XP. See example in MSDN: "Creating Context Menu Handlers".
+
+ if (commandInfo->cbSize == sizeof(CMINVOKECOMMANDINFOEX) &&
+ (commandInfo->fMask & CMIC_MASK_UNICODE) != 0)
{
- if(HIWORD(commandInfo->lpVerb) == 0)
+ LPCMINVOKECOMMANDINFOEX commandInfoEx = (LPCMINVOKECOMMANDINFOEX)commandInfo;
+ if(HIWORD(commandInfoEx->lpVerbW) == 0)
commandOffset = LOWORD(commandInfo->lpVerb);
else
- commandOffset = FindVerb(commandInfo->lpVerb);
+ commandOffset = FindVerb(commandInfoEx->lpVerbW);
}
-
- #else
-
- {
+ else
if(HIWORD(commandInfo->lpVerb) == 0)
commandOffset = LOWORD(commandInfo->lpVerb);
else
- commandOffset = FindVerb(commandInfo->lpVerb);
- }
-
- #endif
- */
+ commandOffset = FindVerb(GetUnicodeString(commandInfo->lpVerb));
if(commandOffset < 0 || commandOffset >= _commandMap.Size())
return E_FAIL;
@@ -666,8 +622,7 @@ STDMETHODIMP CZipContextMenu::GetCommandString(UINT_PTR commandOffset, UINT uTyp
}
if(uType == GCS_VERBA || uType == GCS_VERBW)
{
- MyCopyString(pszName, _commandMap[commandOffset].Verb,
- uType == GCS_VERBW);
+ MyCopyString(pszName, _commandMap[commandOffset].Verb, uType == GCS_VERBW);
return NO_ERROR;
}
return E_FAIL;