OSDN Git Service

Use Registery config extern menu
authorFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 03:55:31 +0000 (11:55 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 23 Jan 2010 03:55:31 +0000 (11:55 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/TortoiseProc.vcproj
src/TortoiseShell/ContextMenu.cpp
src/TortoiseShell/Globals.h
src/TortoiseShell/ShellCache.h

index ac6001a..b5cf793 100644 (file)
                                IgnoreDefaultLibraryNames=""\r
                                DelayLoadDLLs="gdiplus.dll"\r
                                GenerateDebugInformation="true"\r
                                IgnoreDefaultLibraryNames=""\r
                                DelayLoadDLLs="gdiplus.dll"\r
                                GenerateDebugInformation="true"\r
+                               GenerateMapFile="true"\r
                                SubSystem="2"\r
                                OptimizeReferences="2"\r
                                EnableCOMDATFolding="2"\r
                                SubSystem="2"\r
                                OptimizeReferences="2"\r
                                EnableCOMDATFolding="2"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\copy.ico"\r
+                               RelativePath=".\copy.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\copy.ico"\r
+                               RelativePath="..\Resources\copy.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\explorer.ico"\r
+                               RelativePath="..\Resources\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\explorer.ico"\r
+                               RelativePath=".\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\newfolder.ico"\r
+                               RelativePath=".\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\newfolder.ico"\r
+                               RelativePath="..\Resources\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\refresh.ico"\r
+                               RelativePath=".\refresh.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\refresh.ico"\r
+                               RelativePath="..\Resources\refresh.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\save.ico"\r
+                               RelativePath="..\Resources\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\save.ico"\r
+                               RelativePath=".\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\up.ico"\r
+                               RelativePath=".\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\up.ico"\r
+                               RelativePath="..\Resources\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
index c483382..f4c5614 100644 (file)
@@ -66,7 +66,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
 \r
        { ShellMenuGitSVNIgnore,                                MENUSVNIGNORE,          IDI_IGNORE,                             IDS_MENUSVNIGNORE,                              IDS_MENUSVNIGNORE_DESC,\r
        ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
 \r
        { ShellMenuGitSVNIgnore,                                MENUSVNIGNORE,          IDI_IGNORE,                             IDS_MENUSVNIGNORE,                              IDS_MENUSVNIGNORE_DESC,\r
-       ITEMIS_INSVN|ITEMIS_GITSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0},\r
+       ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
@@ -83,10 +83,10 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },\r
 \r
        { ShellMenuRefLog,                                              MENUREFLOG,                     IDI_LOG,                                IDS_MENUREFLOG,                         IDS_MENUDESCREFLOG,\r
        ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },\r
 \r
        { ShellMenuRefLog,                                              MENUREFLOG,                     IDI_LOG,                                IDS_MENUREFLOG,                         IDS_MENUDESCREFLOG,\r
-       ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },\r
 \r
        { ShellMenuRefBrowse,                                   MENUREFBROWSE,          IDI_REPOBROWSE,                 IDS_MENUREFBROWSE,                      IDS_MENUDESCREFBROWSE,\r
 \r
        { ShellMenuRefBrowse,                                   MENUREFBROWSE,          IDI_REPOBROWSE,                 IDS_MENUREFBROWSE,                      IDS_MENUDESCREFBROWSE,\r
-       ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },\r
 \r
 \r
 //     { ShellMenuRepoBrowse,                                  MENUREPOBROWSE,         IDI_REPOBROWSE,                 IDS_MENUREPOBROWSE,                     IDS_MENUDESCREPOBROWSE,\r
 \r
 \r
 //     { ShellMenuRepoBrowse,                                  MENUREPOBROWSE,         IDI_REPOBROWSE,                 IDS_MENUREPOBROWSE,                     IDS_MENUDESCREPOBROWSE,\r
@@ -108,7 +108,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        { ShellMenuStashPop,                                MENUSTASHPOP,           IDI_RELOCATE,                       IDS_MENUSTASHPOP,                               IDS_MENUSTASHPOP,\r
        ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
        { ShellMenuStashList,                               MENUSTASHAPPLY,         IDI_LOG,                            IDS_MENUSTASHLIST,                              IDS_MENUSTASHLIST,\r
        { ShellMenuStashPop,                                MENUSTASHPOP,           IDI_RELOCATE,                       IDS_MENUSTASHPOP,                               IDS_MENUSTASHPOP,\r
        ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
        { ShellMenuStashList,                               MENUSTASHAPPLY,         IDI_LOG,                            IDS_MENUSTASHLIST,                              IDS_MENUSTASHLIST,\r
-       ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
+       ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
 \r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
@@ -126,8 +126,8 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        { ShellMenuRemove,                                              MENUREMOVE,                     IDI_DELETE,                             IDS_MENUREMOVE,                         IDS_MENUDESCREMOVE,\r
        ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER, ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuRemove,                                              MENUREMOVE,                     IDI_DELETE,                             IDS_MENUREMOVE,                         IDS_MENUDESCREMOVE,\r
        ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER, ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },\r
 \r
-       { ShellMenuRemoveKeep,                                  MENUREMOVE,                     IDI_DELETE,                             IDS_MENUREMOVEKEEP,                     IDS_MENUDESCREMOVEKEEP,\r
-       ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },\r
+       { ShellMenuRemoveKeep,                                  MENUREMOVEKEEP,                 IDI_DELETE,                             IDS_MENUREMOVEKEEP,                     IDS_MENUDESCREMOVEKEEP,\r
+       ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER, ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuRevert,                                              MENUREVERT,                     IDI_REVERT,                             IDS_MENUREVERT,                         IDS_MENUDESCREVERT,\r
        ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },\r
 \r
        { ShellMenuRevert,                                              MENUREVERT,                     IDI_REVERT,                             IDS_MENUREVERT,                         IDS_MENUDESCREVERT,\r
        ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },\r
@@ -136,7 +136,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_ADDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_ADDED, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuDelUnversioned,                              MENUDELUNVERSIONED,     IDI_DELUNVERSIONED,             IDS_MENUDELUNVERSIONED,         IDS_MENUDESCDELUNVERSIONED,\r
        ITEMIS_ADDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_ADDED, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuDelUnversioned,                              MENUDELUNVERSIONED,     IDI_DELUNVERSIONED,             IDS_MENUDELUNVERSIONED,         IDS_MENUDESCDELUNVERSIONED,\r
-       ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
+       ITEMIS_FOLDER|ITEMIS_INSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuCleanup,                                             MENUCLEANUP,            IDI_CLEANUP,                    IDS_MENUCLEANUP,                        IDS_MENUDESCCLEANUP,\r
        ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuCleanup,                                             MENUCLEANUP,            IDI_CLEANUP,                    IDS_MENUCLEANUP,                        IDS_MENUDESCCLEANUP,\r
        ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, 0, 0, 0, 0, 0 },\r
@@ -208,7 +208,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE, 0, 0, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuSubSync,                                     MENUSUBSYNC,                    IDI_MENUSYNC,                           IDS_MENUSUBSYNC,                        IDS_MENUSUBSYNC,\r
        ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE, 0, 0, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuSubSync,                                     MENUSUBSYNC,                    IDI_MENUSYNC,                           IDS_MENUSUBSYNC,                        IDS_MENUSUBSYNC,\r
-       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_SUBMODULE, 0, 0, 0, 0, 0, 0, 0 },\r
 \r
 \r
 \r
 \r
 \r
 \r
@@ -225,10 +225,10 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
 \r
 \r
        { ShellMenuCreatePatch,                                 MENUCREATEPATCH,        IDI_CREATEPATCH,                IDS_MENUCREATEPATCH,            IDS_MENUDESCCREATEPATCH,\r
 \r
 \r
        { ShellMenuCreatePatch,                                 MENUCREATEPATCH,        IDI_CREATEPATCH,                IDS_MENUCREATEPATCH,            IDS_MENUDESCCREATEPATCH,\r
-       ITEMIS_INSVN|ITEMIS_EXTENDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
+       ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuApplyPatch,                                  MENUAPPLYPATCH,         IDI_PATCH,                              IDS_MENUAPPLYPATCH,                     IDS_MENUDESCAPPLYPATCH,\r
 \r
        { ShellMenuApplyPatch,                                  MENUAPPLYPATCH,         IDI_PATCH,                              IDS_MENUAPPLYPATCH,                     IDS_MENUDESCAPPLYPATCH,\r
-       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0 },\r
 \r
        { ShellMenuSendMail,                                    MENUSENDMAIL,           IDI_MENUSENDMAIL,                       IDS_MENUSENDMAIL,                       IDS_MENUDESSENDMAIL,\r
        ITEMIS_PATCHFILE, 0,  0, 0,  0, 0, 0, 0 },\r
 \r
        { ShellMenuSendMail,                                    MENUSENDMAIL,           IDI_MENUSENDMAIL,                       IDS_MENUSENDMAIL,                       IDS_MENUDESSENDMAIL,\r
        ITEMIS_PATCHFILE, 0,  0, 0,  0, 0, 0, 0 },\r
@@ -1180,6 +1180,7 @@ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
 \r
        unsigned __int64 topmenu = g_ShellCache.GetMenuLayout();\r
        unsigned __int64 menumask = g_ShellCache.GetMenuMask();\r
 \r
        unsigned __int64 topmenu = g_ShellCache.GetMenuLayout();\r
        unsigned __int64 menumask = g_ShellCache.GetMenuMask();\r
+       unsigned __int64 menuex = g_ShellCache.GetMenuExt();\r
 \r
        int menuIndex = 0;\r
        bool bAddSeparator = false;\r
 \r
        int menuIndex = 0;\r
        bool bAddSeparator = false;\r
@@ -1321,6 +1322,14 @@ STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
                        else if ((menuInfo[menuIndex].fourthno)&&((menuInfo[menuIndex].fourthno & (~itemStates)) == menuInfo[menuIndex].fourthno))\r
                                bInsertMenu = true;\r
 \r
                        else if ((menuInfo[menuIndex].fourthno)&&((menuInfo[menuIndex].fourthno & (~itemStates)) == menuInfo[menuIndex].fourthno))\r
                                bInsertMenu = true;\r
 \r
+                       if (menuInfo[menuIndex].menuID & menuex)\r
+                       {\r
+                               if( !(itemStates & ITEMIS_EXTENDED) )\r
+                               {\r
+                                       bInsertMenu = false;\r
+                               }\r
+                       }\r
+\r
                        if (menuInfo[menuIndex].menuID & (~menumask))\r
                        {\r
                                if (bInsertMenu)\r
                        if (menuInfo[menuIndex].menuID & (~menumask))\r
                        {\r
                                if (bInsertMenu)\r
index b0828f1..b06314b 100644 (file)
@@ -44,7 +44,7 @@
 #define MENUBLAME                      0x0000000000800000\r
 #define MENUCREATEPATCH                0x0000000001000000\r
 #define MENUAPPLYPATCH         0x0000000002000000\r
 #define MENUBLAME                      0x0000000000800000\r
 #define MENUCREATEPATCH                0x0000000001000000\r
 #define MENUAPPLYPATCH         0x0000000002000000\r
-//#define MENUREVISIONGRAPH    0x0000000004000000\r
+#define MENUREMOVEKEEP         0x0000000004000000\r
 #define MENUSVNREBASE          0x0000000008000000\r
 #define MENUSVNDCOMMIT         0x0000000010000000\r
 #define MENUPROPERTIES         0x0000000020000000\r
 #define MENUSVNREBASE          0x0000000008000000\r
 #define MENUSVNDCOMMIT         0x0000000010000000\r
 #define MENUPROPERTIES         0x0000000020000000\r
index a565d98..f21884f 100644 (file)
@@ -86,6 +86,11 @@ public:
                excontextticker = cachetypeticker;\r
                menulayoutlow = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntries"),              MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT);\r
                menulayouthigh = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntrieshigh"), (MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT)>>32);\r
                excontextticker = cachetypeticker;\r
                menulayoutlow = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntries"),              MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT);\r
                menulayouthigh = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntrieshigh"), (MENUSYNC|MENUCREATEREPOS|MENUCLONE|MENUCOMMIT)>>32);\r
+\r
+               unsigned __int64 ext=(MENUSVNIGNORE|MENUREFLOG|MENUREFBROWSE|MENUSTASHAPPLY|MENUDELUNVERSIONED|MENUSUBSYNC|MENUCREATEPATCH);\r
+               menuextlow      = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuExtEntriesLow"), ext&0xFFFFFFFF  );\r
+               menuexthigh = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuExtEntriesHigh"),       ext>>32   );\r
+\r
                menumasklow_lm = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskLow"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumaskhigh_lm = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskHigh"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumasklow_cu = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskLow"), 0);\r
                menumasklow_lm = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskLow"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumaskhigh_lm = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskHigh"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumasklow_cu = CRegStdWORD(_T("Software\\TortoiseGit\\ContextMenuEntriesMaskLow"), 0);\r
@@ -176,6 +181,20 @@ public:
                temp |= unsigned __int64(DWORD(menulayoutlow));\r
                return temp;\r
        }\r
                temp |= unsigned __int64(DWORD(menulayoutlow));\r
                return temp;\r
        }\r
+\r
+       unsigned __int64 GetMenuExt()\r
+       {\r
+               if ((GetTickCount() - REGISTRYTIMEOUT) > exticker)\r
+               {\r
+                       exticker = GetTickCount();\r
+                       menuextlow.read();\r
+                       menuexthigh.read();\r
+               }\r
+               unsigned __int64 temp = unsigned __int64(DWORD(menuexthigh))<<32;\r
+               temp |= unsigned __int64(DWORD(menuextlow));\r
+               return temp;\r
+       }\r
+\r
        unsigned __int64 GetMenuMask()\r
        {\r
                if ((GetTickCount() - REGISTRYTIMEOUT) > menumaskticker)\r
        unsigned __int64 GetMenuMask()\r
        {\r
                if ((GetTickCount() - REGISTRYTIMEOUT) > menumaskticker)\r
@@ -603,8 +622,10 @@ private:
        CRegStdWORD drivefloppy;\r
        CRegStdWORD driveram;\r
        CRegStdWORD driveunknown;\r
        CRegStdWORD drivefloppy;\r
        CRegStdWORD driveram;\r
        CRegStdWORD driveunknown;\r
-       CRegStdWORD menulayoutlow;\r
+       CRegStdWORD menulayoutlow; /* Fist level mask */\r
        CRegStdWORD menulayouthigh;\r
        CRegStdWORD menulayouthigh;\r
+       CRegStdWORD menuextlow;    /* ext menu mask */\r
+       CRegStdWORD menuexthigh;\r
        CRegStdWORD simplecontext;\r
        CRegStdWORD menumasklow_lm;\r
        CRegStdWORD menumaskhigh_lm;\r
        CRegStdWORD simplecontext;\r
        CRegStdWORD menumasklow_lm;\r
        CRegStdWORD menumaskhigh_lm;\r
@@ -628,6 +649,7 @@ private:
        DWORD driveticker;\r
        DWORD drivetypeticker;\r
        DWORD layoutticker;\r
        DWORD driveticker;\r
        DWORD drivetypeticker;\r
        DWORD layoutticker;\r
+       DWORD exticker;\r
        DWORD menumaskticker;\r
        DWORD langticker;\r
        DWORD blockstatusticker;\r
        DWORD menumaskticker;\r
        DWORD langticker;\r
        DWORD blockstatusticker;\r