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