Index: TortoiseShell/ContextMenu.cpp
===================================================================
--- TortoiseShell/ContextMenu.cpp	(revision 17154)
+++ TortoiseShell/ContextMenu.cpp	(working copy)
@@ -38,162 +38,162 @@
 CShellExt::MenuInfo CShellExt::menuInfo[] =
 {
 	{ ShellMenuCheckout,					MENUCHECKOUT,		IDI_CHECKOUT,			IDS_MENUCHECKOUT,			IDS_MENUDESCCHECKOUT,
-	ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuUpdate,						MENUUPDATE,			IDI_UPDATE,				IDS_MENUUPDATE,				IDS_MENUDESCUPDATE,				
-	ITEMIS_INSVN,	ITEMIS_ADDED, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN,	ITEMIS_ADDED}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuCommit,						MENUCOMMIT,			IDI_COMMIT,				IDS_MENUCOMMIT,				IDS_MENUDESCCOMMIT,
-	ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuDiff,						MENUDIFF,			IDI_DIFF,				IDS_MENUDIFF,				IDS_MENUDESCDIFF,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_NORMAL, ITEMIS_TWO, 0, ITEMIS_PROPMODIFIED, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_NORMAL}, {ITEMIS_TWO, 0}, {ITEMIS_PROPMODIFIED, 0}, {0, 0} },
 
 	{ ShellMenuPrevDiff,					MENUPREVDIFF,			IDI_DIFF,				IDS_MENUPREVDIFF,			IDS_MENUDESCPREVDIFF,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_ADDED}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuUrlDiff,						MENUURLDIFF,		IDI_DIFF,				IDS_MENUURLDIFF,			IDS_MENUDESCURLDIFF,
-	ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuLog,							MENULOG,			IDI_LOG,				IDS_MENULOG,				IDS_MENUDESCLOG,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {0, 0} },
 
 	{ ShellMenuRepoBrowse,					MENUREPOBROWSE,		IDI_REPOBROWSE,			IDS_MENUREPOBROWSE,			IDS_MENUDESCREPOBROWSE,
-	ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_ONLYONE, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuShowChanged,					MENUSHOWCHANGED,	IDI_SHOWCHANGED,		IDS_MENUSHOWCHANGED,		IDS_MENUDESCSHOWCHANGED,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0},
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, 0}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuRevisionGraph,				MENUREVISIONGRAPH,	IDI_REVISIONGRAPH,		IDS_MENUREVISIONGRAPH,		IDS_MENUDESCREVISIONGRAPH,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0, 0, 0},
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {0, 0}, {0, 0}},
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuConflictEditor,				MENUCONFLICTEDITOR,	IDI_CONFLICT,			IDS_MENUCONFLICT,			IDS_MENUDESCCONFLICT,
-	ITEMIS_CONFLICTED, 0, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_CONFLICTED, 0}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuResolve,						MENURESOLVE,		IDI_RESOLVE,			IDS_MENURESOLVE,			IDS_MENUDESCRESOLVE,
-	ITEMIS_CONFLICTED, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },
+		{ITEMIS_CONFLICTED, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuUpdateExt,					MENUUPDATEEXT,		IDI_UPDATE,				IDS_MENUUPDATEEXT,			IDS_MENUDESCUPDATEEXT,
-	ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, ITEMIS_ADDED}, {ITEMIS_FOLDERINSVN, ITEMIS_ADDED}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRename,						MENURENAME,			IDI_RENAME,				IDS_MENURENAME,				IDS_MENUDESCRENAME,
-	ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER, ITEMIS_FILEEXTERNAL, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER, ITEMIS_FILEEXTERNAL}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRemove,						MENUREMOVE,			IDI_DELETE,				IDS_MENUREMOVE,				IDS_MENUDESCREMOVE,
-	ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER, ITEMIS_ADDED|ITEMIS_FILEEXTERNAL, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER, ITEMIS_ADDED|ITEMIS_FILEEXTERNAL}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRemoveKeep,					MENUREMOVE,			IDI_DELETE,				IDS_MENUREMOVEKEEP,			IDS_MENUDESCREMOVEKEEP,
-	ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER|ITEMIS_EXTENDED, ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER|ITEMIS_EXTENDED, ITEMIS_ADDED}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRevert,						MENUREVERT,			IDI_REVERT,				IDS_MENUREVERT,				IDS_MENUDESCREVERT,
-	ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED}, {ITEMIS_FOLDERINSVN, ITEMIS_ADDED}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRevert,						MENUREVERT,			IDI_REVERT,				IDS_MENUUNDOADD,			IDS_MENUDESCUNDOADD,
-	ITEMIS_ADDED, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN|ITEMIS_ADDED, 0, 0, 0, 0, 0 },
+		{ITEMIS_ADDED, ITEMIS_NORMAL}, {ITEMIS_FOLDERINSVN|ITEMIS_ADDED, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuDelUnversioned,				MENUDELUNVERSIONED,	IDI_DELUNVERSIONED,		IDS_MENUDELUNVERSIONED,		IDS_MENUDESCDELUNVERSIONED,
-	ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED, 0}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuCleanup,						MENUCLEANUP,		IDI_CLEANUP,			IDS_MENUCLEANUP,			IDS_MENUDESCCLEANUP,
-	ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_FOLDER, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuLock,						MENULOCK,			IDI_LOCK,				IDS_MENU_LOCK,				IDS_MENUDESC_LOCK,
-	ITEMIS_INSVN, ITEMIS_LOCKED|ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_LOCKED|ITEMIS_ADDED, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, ITEMIS_LOCKED|ITEMIS_ADDED}, {ITEMIS_FOLDERINSVN, ITEMIS_LOCKED|ITEMIS_ADDED}, {0, 0}, {0, 0} },
 
 	{ ShellMenuUnlock,						MENUUNLOCK,			IDI_UNLOCK,				IDS_MENU_UNLOCK,			IDS_MENUDESC_UNLOCK,
-	ITEMIS_INSVN|ITEMIS_LOCKED, 0, ITEMIS_FOLDER|ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_LOCKED, 0}, {ITEMIS_FOLDER|ITEMIS_INSVN, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0} },
 
 	{ ShellMenuUnlockForce,					MENUUNLOCK,			IDI_UNLOCK,				IDS_MENU_UNLOCKFORCE,		IDS_MENUDESC_UNLOCKFORCE,
-	ITEMIS_INSVN|ITEMIS_LOCKED|ITEMIS_EXTENDED, 0, ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_LOCKED|ITEMIS_EXTENDED, 0}, {ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuCopy,						MENUCOPY,			IDI_COPY,				IDS_MENUBRANCH,				IDS_MENUDESCCOPY,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuSwitch,						MENUSWITCH,			IDI_SWITCH,				IDS_MENUSWITCH,				IDS_MENUDESCSWITCH,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuMerge,						MENUMERGE,			IDI_MERGE,				IDS_MENUMERGE,				IDS_MENUDESCMERGE,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 	{ ShellMenuMergeAll,					MENUMERGEALL,		IDI_MERGE,				IDS_MENUMERGEALL,			IDS_MENUDESCMERGEALL,
-	ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuExport,						MENUEXPORT,			IDI_EXPORT,				IDS_MENUEXPORT,				IDS_MENUDESCEXPORT,
-	ITEMIS_FOLDER|ITEMIS_ONLYONE, 0, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuRelocate,					MENURELOCATE,		IDI_RELOCATE,			IDS_MENURELOCATE,			IDS_MENUDESCRELOCATE,
-	ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuCreateRepos,					MENUCREATEREPOS,	IDI_CREATEREPOS,		IDS_MENUCREATEREPOS,		IDS_MENUDESCCREATEREPOS,
-	ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuAdd,							MENUADD,			IDI_ADD,				IDS_MENUADD,				IDS_MENUDESCADD,
-	ITEMIS_INVERSIONEDFOLDER, ITEMIS_INSVN, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_IGNORED, 0, ITEMIS_DELETED, ITEMIS_FOLDER|ITEMIS_ONLYONE },
+		{ITEMIS_INVERSIONEDFOLDER, ITEMIS_INSVN}, {ITEMIS_INSVN|ITEMIS_FOLDER, 0}, {ITEMIS_IGNORED, 0}, {ITEMIS_DELETED, ITEMIS_FOLDER|ITEMIS_ONLYONE} },
 
 	{ ShellMenuAddAsReplacement,			MENUADD,			IDI_ADD,				IDS_MENUADDASREPLACEMENT,	IDS_MENUADDASREPLACEMENT,
-	ITEMIS_DELETED|ITEMIS_ONLYONE, ITEMIS_FOLDER, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_DELETED|ITEMIS_ONLYONE, ITEMIS_FOLDER}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuImport,						MENUIMPORT,			IDI_IMPORT,				IDS_MENUIMPORT,				IDS_MENUDESCIMPORT,
-	ITEMIS_FOLDER, ITEMIS_INSVN, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, ITEMIS_INSVN}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuBlame,						MENUBLAME,			IDI_BLAME,				IDS_MENUBLAME,				IDS_MENUDESCBLAME,
-	ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_ADDED, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_FOLDER|ITEMIS_ADDED}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuIgnoreSub,					MENUIGNORE,			IDI_IGNORE,				IDS_MENUIGNORE,				IDS_MENUDESCIGNORE,
-	ITEMIS_INVERSIONEDFOLDER, ITEMIS_IGNORED|ITEMIS_INSVN, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INVERSIONEDFOLDER, ITEMIS_IGNORED|ITEMIS_INSVN}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuDeleteIgnoreSub,				MENUIGNORE,			IDI_IGNORE,				IDS_MENUDELETEIGNORE,		IDS_MENUDESCDELETEIGNORE,
-	ITEMIS_INVERSIONEDFOLDER|ITEMIS_INSVN, ITEMIS_IGNORED, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INVERSIONEDFOLDER|ITEMIS_INSVN, ITEMIS_IGNORED}, {0, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuUnIgnoreSub,					MENUIGNORE,			IDI_IGNORE,				IDS_MENUUNIGNORE,			IDS_MENUDESCUNIGNORE,
-	ITEMIS_IGNORED, 0, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_IGNORED, 0}, {0, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuCreatePatch,					MENUCREATEPATCH,	IDI_CREATEPATCH,		IDS_MENUCREATEPATCH,		IDS_MENUDESCCREATEPATCH,
-	ITEMIS_INSVN, ITEMIS_NORMAL, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, ITEMIS_NORMAL}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0} },
 
 	{ ShellMenuApplyPatch,					MENUAPPLYPATCH,		IDI_PATCH,				IDS_MENUAPPLYPATCH,			IDS_MENUDESCAPPLYPATCH,
-	ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_ADDED, ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_ADDED}, {ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0}, {ITEMIS_FOLDERINSVN, ITEMIS_ADDED}, {0, 0} },
 
 	{ ShellMenuProperties,					MENUPROPERTIES,		IDI_PROPERTIES,			IDS_MENUPROPERTIES,			IDS_MENUDESCPROPERTIES,
-	ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 	{ ShellMenuClipPaste,					MENUCLIPPASTE,		IDI_CLIPPASTE,			IDS_MENUCLIPPASTE,			IDS_MENUDESCCLIPPASTE,
-	ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 },
+		{ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0}, {0, 0}, {0, 0}, {0, 0} },
 
-	{ ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},
+	{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
 
 	{ ShellMenuSettings,					MENUSETTINGS,		IDI_SETTINGS,			IDS_MENUSETTINGS,			IDS_MENUDESCSETTINGS,
-	ITEMIS_FOLDER, 0, 0, ITEMIS_FOLDER, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0} },
 	{ ShellMenuHelp,						MENUHELP,			IDI_HELP,				IDS_MENUHELP,				IDS_MENUDESCHELP,
-	ITEMIS_FOLDER, 0, 0, ITEMIS_FOLDER, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0} },
 	{ ShellMenuAbout,						MENUABOUT,			IDI_ABOUT,				IDS_MENUABOUT,				IDS_MENUDESCABOUT,
-	ITEMIS_FOLDER, 0, 0, ITEMIS_FOLDER, 0, 0, 0, 0 },
+		{ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0} },
 
 	// the sub menus - they're not added like the the commands, therefore the menu ID is zero
 	// but they still need to be in here, because we use the icon and string information anyway.
 	{ ShellSubMenu,							NULL,				IDI_APP,				IDS_MENUSUBMENU,			0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	{ ShellSubMenuFile,						NULL,				IDI_MENUFILE,			IDS_MENUSUBMENU,			0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	{ ShellSubMenuFolder,					NULL,				IDI_MENUFOLDER,			IDS_MENUSUBMENU,			0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	{ ShellSubMenuLink,						NULL,				IDI_MENULINK,			IDS_MENUSUBMENU,			0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	{ ShellSubMenuMultiple,					NULL,				IDI_MENUMULTIPLE,		IDS_MENUSUBMENU,			0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	// mark the last entry to tell the loop where to stop iterating over this array
 	{ ShellMenuLastEntry,					0,					0,						0,							0,
-	0, 0, 0, 0, 0, 0, 0, 0 },
+		{0, 0}, {0, 0}, {0, 0}, {0, 0} },
 };
 
 
@@ -1058,56 +1058,7 @@
 		else
 		{
 			// check the conditions whether to show the menu entry or not
-			bool bInsertMenu = false;
-
-			if (menuInfo[menuIndex].firstyes && menuInfo[menuIndex].firstno)
-			{
-				if (((menuInfo[menuIndex].firstyes & itemStates) == menuInfo[menuIndex].firstyes)
-					&&
-					((menuInfo[menuIndex].firstno & (~itemStates)) == menuInfo[menuIndex].firstno))
-					bInsertMenu = true;
-			}
-			else if ((menuInfo[menuIndex].firstyes)&&((menuInfo[menuIndex].firstyes & itemStates) == menuInfo[menuIndex].firstyes))
-				bInsertMenu = true;
-			else if ((menuInfo[menuIndex].firstno)&&((menuInfo[menuIndex].firstno & (~itemStates)) == menuInfo[menuIndex].firstno))
-				bInsertMenu = true;
-
-			if (menuInfo[menuIndex].secondyes && menuInfo[menuIndex].secondno)
-			{
-				if (((menuInfo[menuIndex].secondyes & itemStates) == menuInfo[menuIndex].secondyes)
-					&&
-					((menuInfo[menuIndex].secondno & (~itemStates)) == menuInfo[menuIndex].secondno))
-					bInsertMenu = true;
-			}
-			else if ((menuInfo[menuIndex].secondyes)&&((menuInfo[menuIndex].secondyes & itemStates) == menuInfo[menuIndex].secondyes))
-				bInsertMenu = true;
-			else if ((menuInfo[menuIndex].secondno)&&((menuInfo[menuIndex].secondno & (~itemStates)) == menuInfo[menuIndex].secondno))
-				bInsertMenu = true;
-
-			if (menuInfo[menuIndex].thirdyes && menuInfo[menuIndex].thirdno)
-			{
-				if (((menuInfo[menuIndex].thirdyes & itemStates) == menuInfo[menuIndex].thirdyes)
-					&&
-					((menuInfo[menuIndex].thirdno & (~itemStates)) == menuInfo[menuIndex].thirdno))
-					bInsertMenu = true;
-			}
-			else if ((menuInfo[menuIndex].thirdyes)&&((menuInfo[menuIndex].thirdyes & itemStates) == menuInfo[menuIndex].thirdyes))
-				bInsertMenu = true;
-			else if ((menuInfo[menuIndex].thirdno)&&((menuInfo[menuIndex].thirdno & (~itemStates)) == menuInfo[menuIndex].thirdno))
-				bInsertMenu = true;
-
-			if (menuInfo[menuIndex].fourthyes && menuInfo[menuIndex].fourthno)
-			{
-				if (((menuInfo[menuIndex].fourthyes & itemStates) == menuInfo[menuIndex].fourthyes)
-					&&
-					((menuInfo[menuIndex].fourthno & (~itemStates)) == menuInfo[menuIndex].fourthno))
-					bInsertMenu = true;
-			}
-			else if ((menuInfo[menuIndex].fourthyes)&&((menuInfo[menuIndex].fourthyes & itemStates) == menuInfo[menuIndex].fourthyes))
-				bInsertMenu = true;
-			else if ((menuInfo[menuIndex].fourthno)&&((menuInfo[menuIndex].fourthno & (~itemStates)) == menuInfo[menuIndex].fourthno))
-				bInsertMenu = true;
-
+			const bool bInsertMenu = ShouldInsertItem(menuInfo[menuIndex]);
 			if (menuInfo[menuIndex].menuID & (~menumask))
 			{
 				if (bInsertMenu)
@@ -2494,3 +2445,23 @@
 	CFormatMessageWrapper errorDetails;
 	MessageBox( NULL, errorDetails, errorMessage, MB_OK | MB_ICONINFORMATION );
 }
+
+bool CShellExt::ShouldInsertItem(const MenuInfo& item) const
+{
+	return ShouldInsertMenu(item.first) || ShouldInsertMenu(item.second) ||
+		ShouldInsertMenu(item.third) || ShouldInsertMenu(item.fourth);
+}
+
+bool CShellExt::ShouldEnableMenu(const YesNoPair& pair) const
+{
+	if (pair.yes && pair.no)
+	{
+		if (((pair.yes & itemStates) == pair.yes) && ((pair.no & (~itemStates)) == pair.no))
+			return true;
+	}
+	else if ((pair.yes)&&((pair.yes & itemStates) == pair.yes))
+		return true;
+	else if ((pair.no)&&(pair.no & (~itemStates)) == pair.no))
+		return true;
+	return false;
+}
Index: TortoiseShell/ShellExt.h
===================================================================
--- TortoiseShell/ShellExt.h	(revision 17154)
+++ TortoiseShell/ShellExt.h	(working copy)
@@ -154,6 +154,11 @@
 	};
 
 	// helper struct for context menu entries
+	typedef struct YesNoPair
+	{
+		DWORD				yes;
+		DWORD				no;
+	};
 	typedef struct MenuInfo
 	{
 		SVNCommands			command;		///< the command which gets executed for this menu entry
@@ -165,14 +170,10 @@
 		/// be added automatically, based on states of the selected item(s).
 		/// The 'yes' states must be set, the 'no' states must not be set
 		/// the four pairs are OR'ed together, the 'yes'/'no' states are AND'ed together.
-		DWORD				firstyes;
-		DWORD				firstno;
-		DWORD				secondyes;
-		DWORD				secondno;
-		DWORD				thirdyes;
-		DWORD				thirdno;
-		DWORD				fourthyes;
-		DWORD				fourthno;
+		YesNoPair			first;
+		YesNoPair			second;
+		YesNoPair			third;
+		YesNoPair			fourth;
 	};
 
 	static MenuInfo menuInfo[];
@@ -226,6 +227,8 @@
 	bool			HasAlpha(__in ARGB *pargb, SIZE& sizImage, int cxRow);
 	HRESULT			ConvertToPARGB32(HDC hdc, __inout ARGB *pargb, HBITMAP hbmp, SIZE& sizImage, int cxRow);
 	static void		RunCommand( const tstring& path, const tstring& command, const tstring& folder, LPCTSTR errorMessage );
+	bool			ShouldInsertItem(const MenuInfo& pair) const;
+	bool			ShouldInsertItem(const YesNoPair& pair) const;
 
 public:
 	CShellExt(FileState state);
