Hello,

Michael Jung wrote:
On Tuesday 21 June 2005 03:11, Tobias Burnus wrote:
Well, I actually don't know what is supposed to be there; I saw quite
different menus on the different Windows versions. Some seem to have the
"Properties" and "Create Link" (and other stuff more) and others have
not. I will now now blindly assume that that what is in the .c file is
the right thing (TM) and will delete the rest.

I guess the "Properties" and "Create Link" entries will appear in the context menus, iff the corresponding IShellFolder sets the SFGAO_HASPROPSHEET and SFGAO_CANLINK flags in it's GetAttributesOf method. For example, you can't create a link on MyComputer, but you can on Desktop.
Ok, I re-added the out-commented/removed items and check now for uFlags & SFGAO_CANLINK and uFlags & SFGAO_HASPROPSHEET. I have the feeling no one sets this to uFlags (or to any other variable, if this is the wrong variable to check) and no one cares about the return value, but here it is.

Tobias
Index: shell32_Cs.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Cs.rc,v
retrieving revision 1.9
diff -u -r1.9 shell32_Cs.rc
--- shell32_Cs.rc	9 Dec 2004 11:39:31 -0000	1.9
+++ shell32_Cs.rc	22 Jun 2005 03:23:56 -0000
@@ -76,6 +76,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Vybrat",			FCIDM_SHVIEW_OPEN
 	  MENUITEM "P&rozkoumat",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "O&tevøít",			FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -85,7 +86,6 @@
 	  MENUITEM "Vytvoøit zástupc&e",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "O&dstranit",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Pøejmenovat",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Vlastnosti",		FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_De.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_De.rc,v
retrieving revision 1.17
diff -u -r1.17 shell32_De.rc
--- shell32_De.rc	25 Apr 2005 10:56:29 -0000	1.17
+++ shell32_De.rc	22 Jun 2005 03:23:56 -0000
@@ -76,8 +76,9 @@
 BEGIN
 	POPUP ""
 	BEGIN
-	  MENUITEM "E&rkunden",		FCIDM_SHVIEW_EXPLORE
-	  MENUITEM "&Öffnen",		FCIDM_SHVIEW_OPEN
+	  MENUITEM "&Auswählen",		FCIDM_SHVIEW_OPEN
+	  MENUITEM "&Explorer",		FCIDM_SHVIEW_EXPLORE
+	  MENUITEM "Ö&ffnen",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
 	  MENUITEM "&Ausschneiden",		FCIDM_SHVIEW_CUT
 	  MENUITEM "&Kopieren",		FCIDM_SHVIEW_COPY
@@ -85,7 +86,6 @@
 	  MENUITEM "Erstelle Ver&weis",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Löschen",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Umbenennen",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Eigenschaften",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_En.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_En.rc,v
retrieving revision 1.21
diff -u -r1.21 shell32_En.rc
--- shell32_En.rc	6 May 2005 15:44:32 -0000	1.21
+++ shell32_En.rc	22 Jun 2005 03:23:56 -0000
@@ -75,6 +75,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Select",		FCIDM_SHVIEW_OPEN
 	  MENUITEM "E&xplore",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&Open",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -84,7 +85,6 @@
 	  MENUITEM "Create &Link",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Delete",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Rename",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Properties",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_Es.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Es.rc,v
retrieving revision 1.14
diff -u -r1.14 shell32_Es.rc
--- shell32_Es.rc	16 Feb 2005 21:11:00 -0000	1.14
+++ shell32_Es.rc	22 Jun 2005 03:23:56 -0000
@@ -76,6 +76,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Seleccionar",              FCIDM_SHVIEW_OPEN
 	  MENUITEM "E&xplorar",			FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&Abrir",			FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -85,7 +86,6 @@
 	  MENUITEM "C&rear acceso directo",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Eliminar",			FCIDM_SHVIEW_DELETE
 	  MENUITEM "Re&nombrar",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Propiedades",		FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_Fr.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Fr.rc,v
retrieving revision 1.14
diff -u -r1.14 shell32_Fr.rc
--- shell32_Fr.rc	9 Dec 2004 11:39:31 -0000	1.14
+++ shell32_Fr.rc	22 Jun 2005 03:23:57 -0000
@@ -78,6 +78,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Sélectionner",      FCIDM_SHVIEW_OPEN
 	  MENUITEM "E&xplorer",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&Ouvrir",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -87,7 +88,6 @@
 	  MENUITEM "Créer un &lien",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Supprimer",	FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Renommer",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Propriétés",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_It.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_It.rc,v
retrieving revision 1.14
diff -u -r1.14 shell32_It.rc
--- shell32_It.rc	9 Dec 2004 11:39:31 -0000	1.14
+++ shell32_It.rc	22 Jun 2005 03:23:57 -0000
@@ -76,6 +76,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Selezione",        FCIDM_SHVIEW_OPEN
 	  MENUITEM "E&splora",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&Apri",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -85,7 +86,6 @@
 	  MENUITEM "&Crea Collegamento",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Cancella",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Rinomina",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Proprietà",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_Ja.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Ja.rc,v
retrieving revision 1.10
diff -u -r1.10 shell32_Ja.rc
--- shell32_Ja.rc	9 Dec 2004 11:39:31 -0000	1.10
+++ shell32_Ja.rc	22 Jun 2005 03:23:57 -0000
@@ -65,13 +65,15 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "‘I‘ð (&S)",		FCIDM_SHVIEW_OPEN
+	  MENUITEM "ŠJ‚­"				FCIDM_SHVIEW_OPEN
+	  MENUITEM SEPARATOR
 	  MENUITEM "Ø‚èŽæ‚è(&U)",		FCIDM_SHVIEW_CUT
 	  MENUITEM "ƒRƒs[(&C)",	FCIDM_SHVIEW_COPY
 	  MENUITEM SEPARATOR
 	  MENUITEM "ƒVƒ‡[ƒgƒJƒbƒg‚̍쐬(&L)",	0x7051
 	  MENUITEM "íœ(&D)",	FCIDM_SHVIEW_DELETE
 	  MENUITEM "–¼‘O‚̕ύX(&R)",	0x7050
-	  MENUITEM SEPARATOR
 	  MENUITEM "ƒvƒƒpƒeƒB(&P)",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_Pl.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Pl.rc,v
retrieving revision 1.9
diff -u -r1.9 shell32_Pl.rc
--- shell32_Pl.rc	9 Dec 2004 11:39:31 -0000	1.9
+++ shell32_Pl.rc	22 Jun 2005 03:23:57 -0000
@@ -76,6 +76,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+          MENUITEM "&Zaznacz",          FCIDM_SHVIEW_OPEN
 	  MENUITEM "&Eksploruj",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&Otwórz",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -85,7 +86,6 @@
 	  MENUITEM "Utwórz &Skrót",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "&Usuñ",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "&Zmieñ nazwê",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "W³&aœciwoœci",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shell32_Pt.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Pt.rc,v
retrieving revision 1.17
diff -u -r1.17 shell32_Pt.rc
--- shell32_Pt.rc	14 Feb 2005 11:12:30 -0000	1.17
+++ shell32_Pt.rc	22 Jun 2005 03:23:57 -0000
@@ -76,6 +76,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+          MENUITEM "&Selecionar",        FCIDM_SHVIEW_OPEN
 	  MENUITEM "&Explorar",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "A&brir",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -84,7 +85,6 @@
 	  MENUITEM SEPARATOR
 	  MENUITEM "Criar a&talho",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "E&xcluir",		FCIDM_SHVIEW_DELETE
-	  MENUITEM "&Renomear",		FCIDM_SHVIEW_RENAME
 	  MENUITEM SEPARATOR
 	  MENUITEM "&Propriedades",	FCIDM_SHVIEW_PROPERTIES
 	END
Index: shell32_Uk.rc
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shell32_Uk.rc,v
retrieving revision 1.7
diff -u -r1.7 shell32_Uk.rc
--- shell32_Uk.rc	9 Dec 2004 11:39:31 -0000	1.7
+++ shell32_Uk.rc	22 Jun 2005 03:23:58 -0000
@@ -75,6 +75,7 @@
 BEGIN
 	POPUP ""
 	BEGIN
+	  MENUITEM "&Âè&áðàòè",		FCIDM_SHVIEW_OPEN
 	  MENUITEM "&Ïðîâ³äíèê",		FCIDM_SHVIEW_EXPLORE
 	  MENUITEM "&³äêðèòè",		FCIDM_SHVIEW_OPEN
 	  MENUITEM SEPARATOR
@@ -84,7 +85,6 @@
 	  MENUITEM "&Ñòâîðèòè Ïîñèëàííÿ",	FCIDM_SHVIEW_CREATELINK
 	  MENUITEM "Âè&äàëèòè",		FCIDM_SHVIEW_DELETE
 	  MENUITEM "Ïåðå&éìåíóâàòè",		FCIDM_SHVIEW_RENAME
-	  MENUITEM SEPARATOR
 	  MENUITEM "&Âëàñòèâîñò³",	FCIDM_SHVIEW_PROPERTIES
 	END
 END
Index: shv_item_cmenu.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shv_item_cmenu.c,v
retrieving revision 1.33
diff -u -r1.33 shv_item_cmenu.c
--- shv_item_cmenu.c	9 Jun 2005 09:46:23 -0000	1.33
+++ shv_item_cmenu.c	22 Jun 2005 03:23:58 -0000
@@ -36,6 +36,7 @@
 
 #include "shell32_main.h"
 #include "shellfolder.h"
+#include "shresdef.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
@@ -210,55 +211,75 @@
 
 /**************************************************************************
 * ISvItemCm_fnQueryContextMenu()
-* FIXME: load menu MENU_SHV_FILE out of resources instead if creating
-*		 each menu item by calling _InsertMenuItem()
 */
 static HRESULT WINAPI ISvItemCm_fnQueryContextMenu(
 	IContextMenu2 *iface,
-	HMENU hmenu,
+	HMENU hMenu,
 	UINT indexMenu,
 	UINT idCmdFirst,
 	UINT idCmdLast,
 	UINT uFlags)
 {
+	LPWSTR szString;
+	HMENU hMyMenu, hMySubMenu;
+	HRESULT hr;
+	UINT idMax;
+	MENUITEMINFOW mii;
+
 	ItemCmImpl *This = (ItemCmImpl *)iface;
 
-	TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",This, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
+	TRACE("(%p)->(hMenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",
+	      This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
 
 	if (idCmdFirst != 0)
-	  FIXME("We should use idCmdFirst=%d and idCmdLast=%d for command ids\n", idCmdFirst, idCmdLast);
+		FIXME("We should use idCmdFirst=%d and idCmdLast=%d for command ids\n", idCmdFirst, idCmdLast);
 
 	if(!(CMF_DEFAULTONLY & uFlags) && This->cidl>0)
 	{
-	  if(!(uFlags & CMF_EXPLORE))
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Select", MFS_ENABLED);
-
-	  if(This->bAllValues)
-	  {
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Open", MFS_ENABLED);
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED);
-	  }
-	  else
-	  {
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_EXPLORE, MFT_STRING, "&Explore", MFS_ENABLED);
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_OPEN, MFT_STRING, "&Open", MFS_ENABLED);
-	  }
-
-	  SetMenuDefaultItem(hmenu, 0, MF_BYPOSITION);
-
-	  _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-	  _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_COPY, MFT_STRING, "&Copy", MFS_ENABLED);
-	  _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_CUT, MFT_STRING, "&Cut", MFS_ENABLED);
+		hMyMenu = LoadMenuA(shell32_hInstance, "MENU_SHV_FILE");
+		hMySubMenu = GetSubMenu(hMyMenu, 0);
 
-	  _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-	  _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_DELETE, MFT_STRING, "&Delete", MFS_ENABLED);
-
-	  if(uFlags & CMF_CANRENAME)
-	    _InsertMenuItem(hmenu, indexMenu++, TRUE, FCIDM_SHVIEW_RENAME, MFT_STRING, "&Rename", ISvItemCm_CanRenameItems(This) ? MFS_ENABLED : MFS_DISABLED);
-
-	  return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (FCIDM_SHVIEWLAST));
+		if(!This->bAllValues) { /* Change order of OPEN and EXPLORE */
+			ZeroMemory(&mii, sizeof(mii));
+			mii.fMask  = MIIM_STRING | MIIM_STATE | MIIM_ID | MIIM_BITMAP | MIIM_FTYPE | MIIM_TYPE;
+			mii.cbSize = sizeof(mii);
+			GetMenuItemInfoW(hMySubMenu, 2, TRUE, &mii); /* 2 = Open */
+			mii.cch++;
+			mii.dwTypeData = (LPWSTR)LocalAlloc(LPTR, mii.cch * sizeof(WCHAR));
+			GetMenuItemInfoW(hMySubMenu, 2, TRUE, &mii); /* 2 = Open */
+			RemoveMenu(hMySubMenu, 2, MF_BYPOSITION);
+			InsertMenuItemW(hMySubMenu,  1, TRUE, &mii); /* 1 = Explore */  
+		}
+
+		if(uFlags | CMF_EXPLORE) { /* Remove Select */
+			RemoveMenu(hMySubMenu, 0, MF_BYPOSITION);
+		}
+
+		if(ISvItemCm_CanRenameItems(This) == MFS_DISABLED) {
+			EnableMenuItem(hMyMenu, FCIDM_SHVIEW_RENAME, MFS_DISABLED);
+		}
+
+		if(!(uFlags & SFGAO_CANLINK)) { /* Remove Create Link */
+			RemoveMenu(hMySubMenu, FCIDM_SHVIEW_CREATELINK, MF_BYCOMMAND);
+		}
+
+		if(!(uFlags & SFGAO_HASPROPSHEET)) { /* Remove Properties */
+			RemoveMenu(hMySubMenu, FCIDM_SHVIEW_PROPERTIES, MF_BYCOMMAND);
+		} else { /* add separator before Properties */
+			_InsertMenuItem(hMySubMenu, FCIDM_SHVIEW_PROPERTIES, FALSE, 0, MFT_SEPARATOR, NULL, 0);
+		}
+
+		idMax = Shell_MergeMenus (hMenu, GetSubMenu(hMyMenu,0), indexMenu,
+		                          idCmdFirst, idCmdLast, MM_SUBMENUSHAVEIDS);
+		hr =  MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, idMax-idCmdFirst+1);
+		SetMenuDefaultItem(hMenu, 0, MF_BYPOSITION);
+
+		DestroyMenu(hMyMenu);
+	} else {
+		return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);
 	}
-	return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0);
+	TRACE("(%p)->returning 0x%lx\n",This,hr);
+	return hr;
 }
 
 /**************************************************************************

Reply via email to