[ros-diffs] [janderwald] 30055: - fix position of dynamic context menus

janderwald at svn.reactos.org janderwald at svn.reactos.org
Thu Nov 1 22:30:44 CET 2007


Author: janderwald
Date: Fri Nov  2 00:30:44 2007
New Revision: 30055

URL: http://svn.reactos.org/svn/reactos?rev=30055&view=rev
Log:
- fix position of dynamic context menus

Modified:
    trunk/reactos/dll/win32/shell32/shv_item_cmenu.c

Modified: trunk/reactos/dll/win32/shell32/shv_item_cmenu.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shv_item_cmenu.c?rev=30055&r1=30054&r2=30055&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_item_cmenu.c (original)
+++ trunk/reactos/dll/win32/shell32/shv_item_cmenu.c Fri Nov  2 00:30:44 2007
@@ -310,7 +310,7 @@
     return ret;
 }
 
-VOID
+UINT
 SH_LoadContextMenuHandlers(ItemCmImpl *This, IDataObject * pDataObj, HMENU hMenu, UINT indexMenu )
 {
     UINT i;
@@ -356,11 +356,15 @@
     {
        cmenu = This->ecmenu[i];
        hResult = cmenu->lpVtbl->QueryContextMenu(cmenu, hMenu, indexMenu, idCmdFirst, idCmdLast, CMF_NORMAL);
-       idCmdFirst += (hResult & 0xFFFF);
+       if (SUCCEEDED(hResult))
+       {
+           idCmdFirst += (hResult & 0xFFFF);
+           indexMenu +=(hResult & 0xFFFF);
+       }
     }
     This->iIdSHELast = idCmdFirst;
-
     TRACE("SH_LoadContextMenuHandlers first %x last %x\n", This->iIdSHEFirst, This->iIdSHELast);
+    return indexMenu;
 }
 
 void
@@ -599,18 +603,15 @@
         MultiByteToWideChar( CP_ACP, 0, sBuffer, -1, (LPWSTR)szExt, 10);
         SH_AddStaticEntryForFileClass(This, szExt);
         indexMenu = SH_AddStaticEntryToMenu(hmenu, indexMenu, This);
+        _InsertMenuItem(hmenu, ++indexMenu, TRUE, 0, MFT_SEPARATOR, NULL, 0);
     }
 
     pDataObj = IDataObject_Constructor(NULL, This->pidl, This->apidl, This->cidl);
     if (pDataObj)
     {
-        SH_LoadContextMenuHandlers(This, pDataObj, hmenu, indexMenu);
+        indexMenu = SH_LoadContextMenuHandlers(This, pDataObj, hmenu, indexMenu);
         IDataObject_Release(pDataObj);
     }
-
-
-	if (idCmdFirst != 0)
-	  FIXME("We should use idCmdFirst=%d and idCmdLast=%d for command ids\n", idCmdFirst, idCmdLast);
 
 	if(!(CMF_DEFAULTONLY & uFlags) && This->cidl>0)
 	{
@@ -1193,7 +1194,7 @@
       cmobj->lpVtbl->Release(cmobj);
       return FALSE;
   }
-  hr = shext->lpVtbl->Initialize(shext, pidlFolder, pDataObj, hKey);
+  hr = shext->lpVtbl->Initialize(shext, NULL, pDataObj, hKey);
   if (hr != S_OK)
   {
       TRACE("Failed to initialize shell extension\n");




More information about the Ros-diffs mailing list