[ros-diffs] [janderwald] 31548: - revert changes which shouldnt be in (yet)

janderwald at svn.reactos.org janderwald at svn.reactos.org
Wed Jan 2 00:42:02 CET 2008


Author: janderwald
Date: Wed Jan  2 02:42:01 2008
New Revision: 31548

URL: http://svn.reactos.org/svn/reactos?rev=31548&view=rev
Log:
- revert changes which shouldnt be in (yet)

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

Removed: trunk/reactos/dll/win32/shell32/shv_default_context_menu.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shv_default_context_menu.c?rev=31547&view=auto
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_default_context_menu.c (original)
+++ trunk/reactos/dll/win32/shell32/shv_default_context_menu.c (removed)
@@ -1,1246 +1,0 @@
-/*
- * PROJECT:     shell32
- * LICENSE:     GPL - See COPYING in the top level directory
- * FILE:        dll/win32/shell32/shv_item_new.c
- * PURPOSE:     provides default context menu implementation
- * PROGRAMMERS: Johannes Anderwald (janderwald at reactos.org)
- */
-
-#include <string.h>
-
-#define COBJMACROS
-#define NONAMELESSUNION
-#define NONAMELESSSTRUCT
-#define YDEBUG
-#include "winerror.h"
-#include "wine/debug.h"
-
-#include "windef.h"
-#include "wingdi.h"
-#include "pidl.h"
-#include "undocshell.h"
-#include "shlobj.h"
-#include "objbase.h"
-
-#include "shlwapi.h"
-#include "shell32_main.h"
-#include "shellfolder.h"
-#include "debughlp.h"
-#include "shresdef.h"
-#include "shlguid.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(dmenu);
-
-typedef struct _DynamicShellEntry_
-{
-    UINT iIdCmdFirst;
-    UINT NumIds;
-    IContextMenu * CMenu;
-    struct _DynamicShellEntry_ * Next;
-}DynamicShellEntry, *PDynamicShellEntry;
-
-typedef struct _StaticShellEntry_
-{
-   LPWSTR szVerb;
-   LPWSTR szClass;
-   struct _StaticShellEntry_ * Next;
-}StaticShellEntry, *PStaticShellEntry;
-
-
-typedef struct
-{
-	const IContextMenu2Vtbl *lpVtbl;
-	LONG		ref;
-    DEFCONTEXTMENU dcm;
-    IDataObject * pDataObj;
-    DWORD bGroupPolicyActive;
-    PDynamicShellEntry dhead; /* first dynamic shell extension entry */
-    UINT           iIdSHEFirst; /* first used id */
-    UINT           iIdSHELast; /* last used id */
-    PStaticShellEntry shead; /* first static shell extension entry */
-    UINT           iIdSCMFirst; /* first static used id */
-    UINT           iIdSCMLast; /* last static used id */
-}IDefaultContextMenuImpl;
-
-static inline IDefaultContextMenuImpl *impl_from_IContextMenu( IContextMenu2 *iface )
-{
-    return (IDefaultContextMenuImpl *)((char*)iface - FIELD_OFFSET(IDefaultContextMenuImpl, lpVtbl));
-}
-
-static
-HRESULT
-WINAPI
-IDefaultContextMenu_fnQueryInterface(
-	IContextMenu2 *iface,
-    REFIID riid,
-    LPVOID *ppvObj)
-{
-	IDefaultContextMenuImpl *This = (IDefaultContextMenuImpl *)iface;
-
-	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
-
-	*ppvObj = NULL;
-
-    if(IsEqualIID(riid, &IID_IUnknown) ||
-       IsEqualIID(riid, &IID_IContextMenu) ||
-       IsEqualIID(riid, &IID_IContextMenu2))
-	{
-	  *ppvObj = This;
-	}
-
-	if(*ppvObj)
-	{
-	  IUnknown_AddRef((IUnknown*)*ppvObj);
-	  TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
-	  return S_OK;
-	}
-	TRACE("-- Interface: E_NOINTERFACE\n");
-	return E_NOINTERFACE;
-}
-
-
-static
-ULONG
-WINAPI
-IDefaultContextMenu_fnAddRef(
-	IContextMenu2 *iface)
-{
-	IDefaultContextMenuImpl *This = (IDefaultContextMenuImpl *)iface;
-	ULONG refCount = InterlockedIncrement(&This->ref);
-
-	TRACE("(%p)->(count=%u)\n", This, refCount - 1);
-
-	return refCount;
-}
-
-static
-ULONG
-WINAPI
-IDefaultContextMenu_fnRelease(
-	IContextMenu2 *iface)
-{
-	IDefaultContextMenuImpl *This = (IDefaultContextMenuImpl *)iface;
-	ULONG refCount = InterlockedDecrement(&This->ref);
-
-	TRACE("(%p)->(count=%u)\n", This, refCount + 1);
-    if (!refCount)
-    {
-	  TRACE(" destroying IContextMenu(%p)\n",This);
-
-	  HeapFree(GetProcessHeap(),0,This);
-    }
-
-	return refCount;
-}
-
-static
-void
-SH_AddStaticEntry(IDefaultContextMenuImpl * This, HKEY hKey, WCHAR *szVerb, WCHAR * szClass)
-{
-  PStaticShellEntry curEntry;
-  PStaticShellEntry lastEntry = NULL;
-
-  curEntry = This->shead;
-
-  while(curEntry)
-  {
-    if (!wcsicmp(curEntry->szVerb, szVerb))
-    {
-       /* entry already exists */
-       return;
-    }
-    lastEntry = curEntry;
-    curEntry = curEntry->Next;
-  }
-  
-  TRACE("adding verb %s szClass %s\n", debugstr_w(szVerb), debugstr_w(szClass));
-
-  curEntry = malloc(sizeof(StaticShellEntry));
-  if (curEntry)
-  {
-      curEntry->Next = NULL;
-      curEntry->szVerb = wcsdup(szVerb);
-      curEntry->szClass = wcsdup(szClass);
-  }
-
-  if (lastEntry)
-  {
-    lastEntry->Next = curEntry;
-  }
-  else
-  {
-    This->shead = curEntry;
-  }
-}
-
-static
-void
-SH_AddStaticEntryForKey(IDefaultContextMenuImpl * This, HKEY hKey, WCHAR * szClass)
-{
-    LONG result;
-    DWORD dwIndex;
-    WCHAR szName[40];
-    DWORD dwName;
-
-    dwIndex = 0;
-    do
-    {
-        szName[0] = 0;
-        dwName = sizeof(szName) / sizeof(WCHAR);
-        result = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL);
-        szName[39] = 0;   
-        if (result == ERROR_SUCCESS)
-        {
-            SH_AddStaticEntry(This, hKey, szName, szClass);
-        }
-        dwIndex++;
-    }while(result == ERROR_SUCCESS);
-}
-
-static
-void
-SH_AddStaticEntryForFileClass(IDefaultContextMenuImpl * This, WCHAR * szExt)
-{
-    WCHAR szBuffer[100];
-    HKEY hKey;
-    LONG result;
-    DWORD dwBuffer;
-
-    TRACE("SH_AddStaticEntryForFileClass entered with %s\n", debugstr_w(szExt));
-
-    wcscpy(szBuffer, szExt);
-    wcscat(szBuffer, L"\\shell");
-    result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey);
-    if (result == ERROR_SUCCESS)
-    {
-        SH_AddStaticEntryForKey(This, hKey, szExt);
-        RegCloseKey(hKey);
-    }
-
-    dwBuffer = sizeof(szBuffer);
-    result = RegGetValueW(HKEY_CLASSES_ROOT, szExt, NULL, RRF_RT_REG_SZ, NULL, (LPBYTE)szBuffer, &dwBuffer);
-    if (result == ERROR_SUCCESS)
-    {
-        UINT length = strlenW(szBuffer);
-        wcscat(szBuffer, L"\\shell");
-        TRACE("szBuffer %s\n", debugstr_w(szBuffer));
-
-        result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey);
-        if (result == ERROR_SUCCESS)
-        {
-           szBuffer[length] = 0;
-           SH_AddStaticEntryForKey(This, hKey, szBuffer);
-           RegCloseKey(hKey);
-        }
-    }
-
-    strcpyW(szBuffer, "SystemFileAssociations\\");
-    dwBuffer = sizeof(szBuffer) - strlenW(szBuffer) * sizeof(WCHAR);
-    result = RegGetValueW(HKEY_CLASSES_ROOT, szExt, L"PerceivedType", RRF_RT_REG_SZ, NULL, (LPBYTE)&szBuffer[23], &dwBuffer);
-    if (result == ERROR_SUCCESS)
-    {
-        UINT length = strlenW(szBuffer);
-        wcscat(szBuffer, L"\\shell");
-        TRACE("szBuffer %s\n", debugstr_w(szBuffer));
-
-        result = RegOpenKeyExW(HKEY_CLASSES_ROOT, szBuffer, 0, KEY_READ | KEY_QUERY_VALUE, &hKey);
-        if (result == ERROR_SUCCESS)
-        {
-           szBuffer[length] = 0;
-           SH_AddStaticEntryForKey(This, hKey, szBuffer);
-           RegCloseKey(hKey);
-        }
-    }
-    RegCloseKey(hKey);
-}
-
-static
-BOOL 
-HasClipboardData()
-{
-    BOOL ret = FALSE;
-    IDataObject * pda;
-
-    if(SUCCEEDED(OleGetClipboard(&pda)))
-    {
-      STGMEDIUM medium;
-      FORMATETC formatetc;
-
-      TRACE("pda=%p\n", pda);
-
-      /* Set the FORMATETC structure*/
-      InitFormatEtc(formatetc, RegisterClipboardFormatA(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
-      if(SUCCEEDED(IDataObject_GetData(pda,&formatetc,&medium)))
-      {
-          ret = TRUE;
-      }
-
-      IDataObject_Release(pda);
-      ReleaseStgMedium(&medium);
-    }
-
-    return ret;
-}
-
-VOID
-DisablePasteOptions(HMENU hMenu)
-{
-    MENUITEMINFOW mii;
-
-    mii.cbSize = sizeof(mii);
-    mii.fMask = MIIM_STATE;
-    mii.fState = MFS_DISABLED;
-
-    TRACE("result %d\n", SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERT, FALSE, &mii));
-    TRACE("result %d\n", SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERTLINK, FALSE, &mii));
-}
-
-static
-HRESULT
-SH_LoadDynamicContextMenuHandler(IDefaultContextMenuImpl * This, HKEY hKey, const CLSID * szClass, BOOL bExternalInit)
-{
-  HRESULT hr;
-  IContextMenu * cmobj;
-  IShellExtInit *shext;
-  PDynamicShellEntry curEntry;
-  TRACE("SH_LoadDynamicContextMenuHandler entered with This %p hKey %p szClass %s bExternalInit %u\n",This, hKey, wine_dbgstr_guid(szClass), bExternalInit);
-
-  hr = SHCoCreateInstance(NULL, szClass, NULL, &IID_IContextMenu, (void**)&cmobj);
-  if (hr != S_OK)
-  {
-      TRACE("SHCoCreateInstance failed %x\n", GetLastError());
-      return hr;
-  }
-
-  if (bExternalInit)
-  {
-      hr = cmobj->lpVtbl->QueryInterface(cmobj, &IID_IShellExtInit, (void**)&shext);
-      if (hr != S_OK)
-      {
-        TRACE("Failed to query for interface IID_IShellExtInit\n");
-        cmobj->lpVtbl->Release(cmobj);
-        return FALSE;
-      }
-      hr = shext->lpVtbl->Initialize(shext, NULL, This->pDataObj, hKey);
-      shext->lpVtbl->Release(shext);
-      if (hr != S_OK)
-      {
-        TRACE("Failed to initialize shell extension error %x\n", hr);
-        cmobj->lpVtbl->Release(cmobj);
-        return hr;
-      }
-  }
-
-  curEntry = malloc(sizeof(DynamicShellEntry));
-  if(!curEntry)
-  {
-      return E_OUTOFMEMORY;
-  }
-
-  curEntry->iIdCmdFirst = 0;
-  curEntry->Next = NULL;
-  curEntry->NumIds = 0;
-  curEntry->CMenu = cmobj;
-
-  if (This->dhead)
-  {
-      PDynamicShellEntry pEntry = This->dhead;
-
-      while(pEntry->Next)
-      {
-         pEntry = pEntry->Next;
-      }
-
-      pEntry->Next = curEntry;
-  }
-  else
-  {
-      This->dhead = curEntry;
-  }
-
-  return hr;
-}
-
-static
-UINT
-EnumerateDynamicContextHandlerForKey(IDefaultContextMenuImpl *This, HKEY hRootKey)
-{
-   WCHAR szKey[MAX_PATH] = {0};
-   WCHAR szName[MAX_PATH] = {0};
-   DWORD dwIndex, dwName;
-   LONG res;
-   HRESULT hResult;
-   UINT index;
-   CLSID clsid;
-   HKEY hKey;
-
-   static const WCHAR szShellEx[] = { 's','h','e','l','l','e','x','\\','C','o','n','t','e','x','t','M','e','n','u','H','a','n','d','l','e','r','s',0 };
-
-   if (RegOpenKeyExW(hRootKey, szShellEx, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
-   {
-      TRACE("RegOpenKeyExW failed for key %s\n", debugstr_w(szKey));
-      return 0;
-   }
-
-   dwIndex = 0;
-   index = 0;
-   do
-   {
-      dwName = MAX_PATH;
-      res = RegEnumKeyExW(hKey, dwIndex, szName, &dwName, NULL, NULL, NULL, NULL);
-      if (res == ERROR_SUCCESS)
-      {
-         hResult = CLSIDFromString(szName, &clsid);
-         if (hResult != S_OK)
-         {
-             dwName = MAX_PATH;
-             if (RegGetValueW(hKey, szName, NULL, RRF_RT_REG_SZ, NULL, szKey, &dwName) == ERROR_SUCCESS)
-             {
-                if (CLSIDFromString(szKey, &clsid) == S_OK)
-                {
-                    if (This->bGroupPolicyActive)
-                    {
-                        if (RegGetValueW(HKEY_LOCAL_MACHINE,
-                                         L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
-                                         szKey,
-                                         RRF_RT_REG_SZ,
-                                         NULL,
-                                         NULL,
-                                         &dwName) == ERROR_SUCCESS)
-                        {
-                            SH_LoadDynamicContextMenuHandler(This, hKey, &clsid, TRUE);
-                        }
-
-                    }
-                    else
-                    {
-                        SH_LoadDynamicContextMenuHandler(This, hKey, &clsid, TRUE);
-                    }
-                }
-             }
-         }
-         if (hResult == S_OK)
-         {
-            if (This->bGroupPolicyActive)
-            {
-                if (RegGetValueW(HKEY_LOCAL_MACHINE,
-                                 L"Software\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",
-                                 szKey,
-                                 RRF_RT_REG_SZ,
-                                 NULL,
-                                NULL,
-                                &dwName) == ERROR_SUCCESS)
-                {
-                    SH_LoadDynamicContextMenuHandler(This, hKey, &clsid, TRUE);
-                }
-            }
-            else
-            {
-                SH_LoadDynamicContextMenuHandler(This, hKey, &clsid, TRUE);
-            }
-         }
-      }
-      dwIndex++;
-   }while(res == ERROR_SUCCESS);
-
-   RegCloseKey(hKey);
-   return index;
-}
-
-
-static 
-UINT
-InsertMenuItemsOfDynamicContextMenuExtension(IDefaultContextMenuImpl * This, HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast)
-{
-    PDynamicShellEntry curEntry;
-    HRESULT hResult;
-    MENUITEMINFOW mii;
-    if (!This->dhead)
-    {
-        This->iIdSHEFirst = 0;
-        This->iIdSHELast = 0;
-        return indexMenu;
-    }
-
-    curEntry = This->dhead;
-    This->iIdSHEFirst = idCmdFirst;
-
-    mii.cbSize = sizeof(mii);
-    mii.fMask = MIIM_FTYPE | MIIM_STATE;
-    mii.fType = MFT_SEPARATOR;
-    mii.fState = MFS_ENABLED;
-    InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii);
-
-    do
-    {
-        hResult = IContextMenu_QueryContextMenu(curEntry->CMenu, hMenu, indexMenu, idCmdFirst, idCmdLast, CMF_NORMAL);
-        if (SUCCEEDED(hResult))
-        {
-            curEntry->iIdCmdFirst = idCmdFirst;
-            curEntry->NumIds = LOWORD(hResult);
-            indexMenu += curEntry->NumIds;
-            idCmdFirst += curEntry->NumIds + 0x10;
-        }
-        TRACE("curEntry %p hresult %x contextmenu %p cmdfirst %x num ids %x\n", curEntry, hResult, curEntry->CMenu, curEntry->iIdCmdFirst, curEntry->NumIds);
-        curEntry = curEntry->Next;
-    }while(curEntry);
-
-    This->iIdSHELast = idCmdFirst;
-    TRACE("SH_LoadContextMenuHandlers first %x last %x\n", This->iIdSHEFirst, This->iIdSHELast);
-    return indexMenu;
-}
-
-UINT
-BuildBackgroundContextMenu(
-    IDefaultContextMenuImpl * This,
-    HMENU hMenu,
-    UINT iIdCmdFirst,
-    UINT iIdCmdLast,
-    UINT uFlags)
-{
-    MENUITEMINFOW mii;
-    WCHAR szBuffer[MAX_PATH];
-    UINT indexMenu = 0;
-    HMENU hSubMenu;
-    HKEY hKey;
-
-    ZeroMemory(&mii, sizeof(mii));
-
-    TRACE("BuildBackgroundContextMenu entered\n");
-
-    if (!_ILIsDesktop(This->dcm.pidlFolder))
-    {
-        /* view option is only available in browsing mode */
-        hSubMenu = LoadMenuA(shell32_hInstance, "MENU_001");
-        if (hSubMenu)
-        {
-            szBuffer[0] = 0;
-            LoadStringW(shell32_hInstance, FCIDM_SHVIEW_VIEW, szBuffer, MAX_PATH);
-            szBuffer[MAX_PATH-1] = 0;
-            
-            TRACE("szBuffer %s\n", debugstr_w(szBuffer));
-
-            mii.cbSize = sizeof(mii);
-            mii.fMask = MIIM_TYPE | MIIM_STATE | MIIM_SUBMENU | MIIM_ID;
-            mii.fType = MFT_STRING;
-            mii.wID = iIdCmdFirst++;
-            mii.dwTypeData = szBuffer;
-            mii.cch = strlenW( mii.dwTypeData );
-            mii.fState = MFS_ENABLED;
-            mii.hSubMenu = hSubMenu;
-            InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii);
-            DestroyMenu(hSubMenu);
-        }
-    }
-    hSubMenu = LoadMenuA(shell32_hInstance, "MENU_002");
-    if (hSubMenu)
-    {
-        /* merge general background context menu in */
-        iIdCmdFirst = Shell_MergeMenus(hMenu, hSubMenu, indexMenu, 0, iIdCmdLast, MM_DONTREMOVESEPS | MM_SUBMENUSHAVEIDS) + 1;
-        DestroyMenu(hSubMenu);
-    }
-
-    if (!HasClipboardData())
-    {
-        TRACE("disabling paste options\n");
-        DisablePasteOptions(hMenu);
-    }
-    /* load extensions from HKCR\* key */
-    if (RegOpenKeyExW(HKEY_CLASSES_ROOT,
-                     L"*",
-                     0,
-                     KEY_READ,
-                     &hKey) == ERROR_SUCCESS)
-    {
-        EnumerateDynamicContextHandlerForKey(This, hKey);
-        RegCloseKey(hKey);
-    }
-
-    /* load create new shell extension */
-    if (RegOpenKeyExW(HKEY_CLASSES_ROOT,
-                     L"CLSID\\{D969A300-E7FF-11d0-A93B-00A0C90F2719}",
-                     0,
-                     KEY_READ,
-                     &hKey) == ERROR_SUCCESS)
-    {
-        static const GUID dummy1 = {0xD969A300, 0xE7FF, 0x11d0, {0xA9, 0x3B, 0x00, 0xA0, 0xC9, 0x0F, 0x27, 0x19} };
-        SH_LoadDynamicContextMenuHandler(This, hKey, &dummy1, FALSE);
-        RegCloseKey(hKey);
-    }
-    
-    InsertMenuItemsOfDynamicContextMenuExtension(This, hMenu, GetMenuItemCount(hMenu), iIdCmdFirst, iIdCmdLast);
-    return iIdCmdLast;
-}
-
-static
-UINT
-AddStaticContextMenusToMenu(
-    HMENU hMenu,
-    UINT indexMenu,
-    IDefaultContextMenuImpl * This)
-{
-    MENUITEMINFOW mii;
-    PStaticShellEntry curEntry;
-
-    mii.cbSize = sizeof(mii);
-    mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA;
-    mii.fType = MFT_STRING;
-    mii.fState = MFS_ENABLED | MFS_DEFAULT;
-    mii.wID = 0x4000;
-    This->iIdSCMFirst = mii.wID;
-
-    curEntry = This->shead;
-
-    while(curEntry)
-    {
-       /* FIXME
-        * load localized verbs if its an open edit find print printto openas properties verb
-        */
-
-       mii.dwTypeData = curEntry->szVerb;
-       mii.cch = strlenW(mii.dwTypeData);
-       InsertMenuItemW(hMenu, indexMenu++, TRUE, &mii);
-       mii.fState = MFS_ENABLED;
-       mii.wID++;
-       curEntry = curEntry->Next;
-    }
-    This->iIdSCMLast = mii.wID - 1;
-    return indexMenu;
-}
-
-static
-const char * 
-GetLocalizedString(
-    HMENU hMenu,
-    UINT wID,
-    char * sResult)
-{
-   MENUITEMINFOA mii;
-
-   sResult[0] = 0;
-   if (!hMenu)
-   {
-       return sResult;
-   }
-
-   mii.cbSize = sizeof(mii);
-   mii.fMask = MIIM_TYPE;
-   mii.fType = MFT_STRING;
-   mii.dwTypeData = sResult;
-   mii.cch = 100;
-
-   GetMenuItemInfoA(hMenu, wID, FALSE, &mii);
-   return sResult;
-}
-#if 0
-UINT
-BuildControlPanelContextMenu(
-    IDefaultContextMenuImpl * This,
-    HMENU hMenu,
-    UINT iIdCmdFirst,
-    UINT iIdCmdLast)
-{
-    GUID * guid;
-    SFGAOF attributes;
-    DWORD dwSize;
-    UINT indexMenu = 0;
-    LPOLESTR pwszCLSID;
-    WCHAR szClass[80];
-    UINT length;
-    MENUITEMINFOW mii;
-
-
-    ZeroMemory(&mii, sizeof(MENUITEMINFOW));
-
-    mii.cbSize = sizeof(MENUITEMINFOW);
-    mii.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID;
-    mii.fType = MFT_STRING;
-    mii.fState = MFS_ENABLED;
-
-    guid = _ILGetGUIDPointer(This->dcm.apidl[0]);
-    if (guid) 
-    {
-        /* the cpl is registered as a namespace extension */
-        dwSize = sizeof(SFGAOF);
-        wcscpy(szClass, L"CLSID\\");
-        if (SUCCEEDED(StringFromCLSID(guid, &pwszCLSID)))
-        {
-            wcscpy(&szClass[6], pwszCLSID);
-            length = strlenW(szClass);
-
-            CoTaskMemFree(pwszCLSID);
-
-            /* check if the CLSID is a folder */
-            wcscat(szClass, L"\\ShellFolder");
-
-            if (RegGetValueW(HKEY_CLASSES_ROOT, szClass, L"Attributes", RRF_RT_REG_BINARY, NULL, &attributes, &dwSize) == ERROR_SUCCESS)
-            {
-                if (attributes & SFGAO_FOLDER)
-                {
-                    WCHAR szBuffer[100];
-                    /* insert explore string */
-                    LoadStringW(shell32_hInstance, FCIDM_SHVIEW_EXPLORE, szBuffer, sizeof(szBuffer) / sizeof(WCHAR));
-                    szBuffer[99] = 0;
-                    mii.wID = FCIDM_SHVIEW_EXPLORE;
-                    mii.dwTypeData = szBuffer;
-                    mii.fState |= MFS_DEFAULT;
-                    InsertMenuItem(hMenu, indexMenu++, TRUE, &mii);
-                    mii.fState = MFS_ENABLED;
-                }
-            }
-
-            /* add static handlers*/
-            szClass[length] = 0;
-            SH_AddStaticEntryForFileClass(This, szClass);         
-            indexMenu = AddStaticContextMenusToMenu(hMenu, indexMenu, This);
-        }
-    }
-    else
-    {
-        /* cpl is registered with full path */
-        SH_AddStaticEntryForFileClass(This, L".cpl");
-    }
-
-    if (AppendMenu(hMenu, MF_SEPARATOR, -1, NULL))
-    {
-        LoadStringW(shell32_hInstance, FCIDM_SHVIEW_CREATELINK, szClass, sizeof(szClass) / sizeof(WCHAR));
-        szClass[79] = 0;
-        InsertMenuItem(hMenu, indexMenu++, TRUE, &mii);
-    }
-}
-#endif
-
-UINT
-BuildShellItemContextMenu(
-    IDefaultContextMenuImpl * This,
-    HMENU hMenu,
-    UINT iIdCmdFirst,
-    UINT iIdCmdLast,
-    UINT uFlags)
-{
-    WCHAR szExt[10];
-    char sBuffer[100];
-    HKEY hKey;
-    UINT indexMenu;
-    SFGAOF rfg;
-    HRESULT hr;
-    BOOL bAddSep;
-    HMENU hLocalMenu;
-    GUID * guid;
-
-    TRACE("BuildShellItemContextMenu entered\n");
-
-    if (_ILGetExtension(This->dcm.apidl[0], &sBuffer[1], sizeof(sBuffer)))
-    {
-        sBuffer[9] = 0;
-        sBuffer[0] = '.';
-
-        if (MultiByteToWideChar( CP_ACP, 0, sBuffer, -1, (LPWSTR)szExt, 10))
-        {
-            TRACE("szExt %d\n", debugstr_w(szExt));
-            SH_AddStaticEntryForFileClass(This, szExt);
-            if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szExt, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-            {
-                EnumerateDynamicContextHandlerForKey(This, hKey);
-                RegCloseKey(hKey);
-            }
-        }
-        if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"*", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-        {
-            /* load default extensions */
-            EnumerateDynamicContextHandlerForKey(This, hKey);
-            RegCloseKey(hKey);
-        }
-    }
-
-    if (!_ILIsPidlSimple(This->dcm.apidl[0])|| _ILIsFolder(This->dcm.apidl[0]))
-    {
-        /* add the default verbs open / explore */
-        SH_AddStaticEntryForFileClass(This, L"Folder");
-        if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Folder", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-        {
-            EnumerateDynamicContextHandlerForKey(This, hKey);
-            RegCloseKey(hKey);
-        }
-    }
-
-    guid = _ILGetGUIDPointer(This->dcm.apidl[0]);
-    if (guid)
-    {
-        LPOLESTR pwszCLSID;
-        WCHAR buffer[60];
-
-        wcscpy(buffer, L"CLSID\\");
-        hr = StringFromCLSID(guid, &pwszCLSID);
-        if (hr == S_OK)
-        {
-            wcscpy(&buffer[6], pwszCLSID);
-            TRACE("buffer %s\n", debugstr_w(buffer));
-            if (RegOpenKeyExW(HKEY_CLASSES_ROOT, buffer, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-            {
-                EnumerateDynamicContextHandlerForKey(This, hKey);
-                SH_AddStaticEntryForFileClass(This, buffer);
-                RegCloseKey(hKey);
-            }
-            CoTaskMemFree(pwszCLSID);
-        }
-    }
-
-
-    if (_ILIsDrive(This->dcm.apidl[0]))
-    {
-        SH_AddStaticEntryForFileClass(This, L"Drive");
-        if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Drive", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-        {
-            EnumerateDynamicContextHandlerForKey(This, hKey);
-            RegCloseKey(hKey);
-        }
-    }
-    
-
-    /* add static actions */
-    rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM;
-	hr = IShellFolder_GetAttributesOf(This->dcm.psf, This->dcm.cidl, This->dcm.apidl, &rfg);
-    if (!SUCCEEDED(hr))
-        rfg = 0;
-
-    if (rfg & SFGAO_FILESYSTEM)
-    {
-        if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"AllFilesystemObjects", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
-        {
-            /* sendto service is registered there */
-            EnumerateDynamicContextHandlerForKey(This, hKey);
-            RegCloseKey(hKey);
-        }
-    }
-
-    /* add static context menu handlers */
-    indexMenu = AddStaticContextMenusToMenu(hMenu, 0, This);
-    /* now process dynamic context menu handlers */
-    indexMenu = InsertMenuItemsOfDynamicContextMenuExtension(This, hMenu, indexMenu, iIdCmdFirst, iIdCmdLast);
-    TRACE("indexMenu %d\n", indexMenu);
-
-    hLocalMenu = LoadMenuW(shell32_hInstance, L"MENU_SHV_FILE");
-    if (!hLocalMenu)
-    {
-        return iIdCmdLast;
-    }
-
-	if (rfg & (SFGAO_CANCOPY | SFGAO_CANMOVE))
-	{
-	      _InsertMenuItem(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-          if (rfg & SFGAO_CANMOVE)
-	          _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CUT, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_CUT, sBuffer), MFS_ENABLED);
-		      if (rfg & SFGAO_CANCOPY)
-	          _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_COPY, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_COPY, sBuffer), MFS_ENABLED);
-	}
-
-    bAddSep = TRUE;
-    if (rfg & SFGAO_CANLINK)
-    {
-        bAddSep = FALSE;
-        _InsertMenuItem(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-        _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_CREATELINK, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_CREATELINK, sBuffer), MFS_ENABLED);
-    }
-
-
-    if (rfg & SFGAO_CANDELETE)
-	{
-        if (bAddSep)
-        {
-            bAddSep = FALSE;
-            _InsertMenuItem(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-        }
-        _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_DELETE, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_DELETE, sBuffer), MFS_ENABLED);
-	}
-
-    if (rfg & SFGAO_CANRENAME)
-    {
-        if (bAddSep)
-        {
-            bAddSep = FALSE;
-            _InsertMenuItem(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-        }
-        _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_RENAME, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_RENAME, sBuffer), MFS_ENABLED);
-    }
-
-    _InsertMenuItem(hMenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
-    _InsertMenuItem(hMenu, indexMenu++, TRUE, FCIDM_SHVIEW_PROPERTIES, MFT_STRING, GetLocalizedString(hLocalMenu, FCIDM_SHVIEW_PROPERTIES, sBuffer), MFS_ENABLED);
-
-    DestroyMenu(hLocalMenu);
-    return iIdCmdLast;
-}
-
-static
-HRESULT
-WINAPI
-IDefaultContextMenu_fnQueryContextMenu(
-	IContextMenu2 *iface,
-	HMENU hmenu,
-	UINT indexMenu,
-	UINT idCmdFirst,
-	UINT idCmdLast,
-	UINT uFlags)
-{
-    IDefaultContextMenuImpl * This = impl_from_IContextMenu(iface);
-
-    if (This->dcm.cidl)
-    {
-        idCmdFirst = BuildShellItemContextMenu(This, hmenu, idCmdFirst, idCmdLast, uFlags);
-    }
-    else
-    {
-        idCmdFirst = BuildBackgroundContextMenu(This, hmenu, idCmdFirst, idCmdLast, uFlags);
-    }
-
-    return S_OK;
-}
-
-static
-HRESULT
-NotifyShellViewWindow(LPCMINVOKECOMMANDINFO lpcmi)
-{
-	LPSHELLBROWSER	lpSB;
-	LPSHELLVIEW lpSV = NULL;
-    HWND hwndSV = NULL;
-
-	if((lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0)))
-	{
-        if(SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV)))
-        {
-            IShellView_GetWindow(lpSV, &hwndSV);
-        }
-	}
-
-    if (LOWORD(lpcmi->lpVerb) == FCIDM_SHVIEW_REFRESH)
-    {
-        if (lpSV)
-            IShellView_Refresh(lpSV);
-
-        return S_OK;
-    }
-
-    SendMessageW(hwndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0), 0);
-
-    return S_OK;
-}
-
-static
-HRESULT
-DoPaste(
-	IDefaultContextMenuImpl *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoOpenOrExplore(
-	IDefaultContextMenuImpl *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoCopyOrCut(
-	IDefaultContextMenuImpl *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoCreateLink(
-	IDefaultContextMenuImpl *iface)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoDelete(
-	IDefaultContextMenuImpl *iface)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoRename(
-	IDefaultContextMenuImpl *iface)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoProperties(
-	IDefaultContextMenuImpl *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-
-
-    return E_FAIL;
-}
-
-static
-HRESULT
-DoDynamicShellExtensions(
-	IDefaultContextMenuImpl *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-
-
-    return E_FAIL;
-}
-
-
-static
-HRESULT
-DoStaticShellExtensions(
-	IDefaultContextMenuImpl *This,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-    SHELLEXECUTEINFOW sei;
-    PStaticShellEntry pCurrent = This->shead;
-    int verb = LOWORD(lpcmi->lpVerb) - This->iIdSCMFirst;
-
-    
-    while(pCurrent && verb-- > 0)
-       pCurrent = pCurrent->Next;
-
-    if (verb > 0)
-        return E_FAIL;
-
-
-	ZeroMemory(&sei, sizeof(sei));
-	sei.cbSize = sizeof(sei);
-	sei.fMask = SEE_MASK_CLASSNAME;
-	sei.lpClass = pCurrent->szClass;
-	sei.hwnd = lpcmi->hwnd;
-	sei.nShow = SW_SHOWNORMAL;
-	sei.lpVerb = pCurrent->szVerb;
-	ShellExecuteExW(&sei);
-    return S_OK;    
-
-
-}
-
-static
-HRESULT
-WINAPI
-IDefaultContextMenu_fnInvokeCommand(
-	IContextMenu2 *iface,
-	LPCMINVOKECOMMANDINFO lpcmi)
-{
-    IDefaultContextMenuImpl * This = impl_from_IContextMenu(iface);
-
-    switch(LOWORD(lpcmi->lpVerb))
-    {
-        case FCIDM_SHVIEW_BIGICON:
-        case FCIDM_SHVIEW_SMALLICON:
-        case FCIDM_SHVIEW_LISTVIEW:
-        case FCIDM_SHVIEW_REPORTVIEW:
-        case 0x30: /* FIX IDS in resource files */
-        case 0x31:
-        case 0x32:
-        case 0x33:
-        case FCIDM_SHVIEW_AUTOARRANGE:
-        case FCIDM_SHVIEW_SNAPTOGRID:
-        case FCIDM_SHVIEW_REFRESH:
-            return NotifyShellViewWindow(lpcmi);
-        case FCIDM_SHVIEW_INSERT:
-        case FCIDM_SHVIEW_INSERTLINK:
-            return DoPaste(This, lpcmi);
-        case FCIDM_SHVIEW_OPEN:
-        case FCIDM_SHVIEW_EXPLORE:
-            return DoOpenOrExplore(This, lpcmi);
-        case FCIDM_SHVIEW_COPY:
-        case FCIDM_SHVIEW_CUT:
-            return DoCopyOrCut(This, lpcmi);
-        case FCIDM_SHVIEW_CREATELINK:
-            return DoCreateLink(This);
-        case FCIDM_SHVIEW_DELETE:
-            return DoDelete(This);
-        case FCIDM_SHVIEW_RENAME:
-            return DoRename(This);
-        case FCIDM_SHVIEW_PROPERTIES:
-            return DoProperties(This, lpcmi);
-    }
-
-    if (This->iIdSHEFirst && This->iIdSHELast)
-    {
-        if (LOWORD(lpcmi->lpVerb) >= This->iIdSHEFirst && LOWORD(lpcmi->lpVerb) <= This->iIdSHELast)
-        {
-            return DoDynamicShellExtensions(This, lpcmi);
-        }
-    }
-
-    if (This->iIdSCMFirst && This->iIdSCMLast)
-    {
-        if (LOWORD(lpcmi->lpVerb) >= This->iIdSCMFirst && LOWORD(lpcmi->lpVerb) <= This->iIdSCMLast)
-        {
-            return DoStaticShellExtensions(This, lpcmi);
-        }
-    }
-
-    FIXME("Unhandled Verb %xl\n",LOWORD(lpcmi->lpVerb));
-    return E_UNEXPECTED;
-}
-
-static
-HRESULT
-WINAPI
-IDefaultContextMenu_fnGetCommandString(
-	IContextMenu2 *iface,
-	UINT_PTR idCommand,
-	UINT uFlags,
-	UINT* lpReserved,
-	LPSTR lpszName,
-	UINT uMaxNameLen)
-{
-
-    return S_OK;
-}
-
-static
-HRESULT
-WINAPI
-IDefaultContextMenu_fnHandleMenuMsg(
-	IContextMenu2 *iface,
-	UINT uMsg,
-	WPARAM wParam,
-	LPARAM lParam)
-{
-
-    return S_OK;
-}
-
-static const IContextMenu2Vtbl cmvt =
-{
-	IDefaultContextMenu_fnQueryInterface,
-	IDefaultContextMenu_fnAddRef,
-	IDefaultContextMenu_fnRelease,
-	IDefaultContextMenu_fnQueryContextMenu,
-	IDefaultContextMenu_fnInvokeCommand,
-	IDefaultContextMenu_fnGetCommandString,
-	IDefaultContextMenu_fnHandleMenuMsg
-};
-
-static 
-HRESULT
-IDefaultContextMenu_Constructor( 
-	const DEFCONTEXTMENU *pdcm,
-	REFIID riid,
-	void **ppv)
-{
-   IDefaultContextMenuImpl * This;
-   HRESULT hr = E_FAIL;
-   IDataObject * pDataObj;
-
-   This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDefaultContextMenuImpl));
-   if (This)
-   {
-       This->lpVtbl = &cmvt;
-       This->ref = 1;
-       TRACE("cidl %u\n", This->dcm.cidl);
-       if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, &IID_IDataObject, (void**)&pDataObj)))
-       {
-            This->pDataObj = pDataObj;
-       }
-       CopyMemory(&This->dcm, pdcm, sizeof(DEFCONTEXTMENU));
-       hr = IDefaultContextMenu_fnQueryInterface((IContextMenu2*)This, riid, ppv);
-   }
-
-   TRACE("This(%p)(%x) cidl %u\n",This, hr, This->dcm.cidl);
-   return hr;
-}
-
-
-/*************************************************************************
- * SHCreateDefaultContextMenu			[SHELL32.325] Vista API
- *
- */
-
-HRESULT
-WINAPI
-SHCreateDefaultContextMenu(
-	const DEFCONTEXTMENU *pdcm,
-	REFIID riid,
-	void **ppv)
-{
-#if 1
-   HRESULT hr = E_FAIL;
-
-   *ppv = NULL;
-   hr = IDefaultContextMenu_Constructor( pdcm, riid, ppv );
-
-   TRACE("pcm %p hr %x\n", pdcm, hr);
-   return hr;
-#else
-   HRESULT hr;
-   IContextMenu2 * pcm;
-
-   if (pdcm->cidl > 0)
-      pcm = ISvItemCm_Constructor( pdcm->psf, pdcm->pidlFolder, pdcm->apidl, pdcm->cidl );
-   else
-      pcm = ISvBgCm_Constructor( pdcm->psf, TRUE );
-
-   hr = S_OK;
-   *ppv = pcm;
-
-   return hr;
-#endif
-}
-
-/*************************************************************************
- * CDefFolderMenu_Create2			[SHELL32.701]
- *
- */
-
-INT
-WINAPI
-CDefFolderMenu_Create2(
-	LPCITEMIDLIST pidlFolder,
-	HWND hwnd,
-	UINT cidl,
-	LPCITEMIDLIST *apidl,
-	IShellFolder *psf,
-	LPFNDFMCALLBACK lpfn,
-	UINT nKeys,
-	HKEY *ahkeyClsKeys,
-	IContextMenu **ppcm)
-{
-   DEFCONTEXTMENU pdcm;
-   HRESULT hr;
-
-   pdcm.hwnd = hwnd;
-   pdcm.pcmcb = NULL;
-   pdcm.pidlFolder = pidlFolder;
-   pdcm.psf = psf;
-   pdcm.cidl = cidl;
-   pdcm.apidl = apidl;
-   pdcm.punkAssociationInfo = NULL;
-   pdcm.cKeys = nKeys;
-   pdcm.aKeys = ahkeyClsKeys;
-
-   hr = SHCreateDefaultContextMenu(&pdcm, &IID_IContextMenu, (void**)ppcm);
-   return hr;
-}
-

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=31548&r1=31547&r2=31548&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_item_cmenu.c (original)
+++ trunk/reactos/dll/win32/shell32/shv_item_cmenu.c Wed Jan  2 02:42:01 2008
@@ -1262,3 +1262,62 @@
    RegCloseKey(hKey);
    return index;
 }
+
+/*************************************************************************
+ * SHCreateDefaultContextMenu			[SHELL32.325] Vista API
+ *
+ */
+
+HRESULT WINAPI SHCreateDefaultContextMenu(
+	const DEFCONTEXTMENU *pdcm,
+	REFIID riid,
+	void **ppv)
+{
+   HRESULT hr;
+   IContextMenu2 * pcm;
+
+   if (pdcm->cidl > 0)
+      pcm = ISvItemCm_Constructor( pdcm->psf, pdcm->pidlFolder, pdcm->apidl, pdcm->cidl );
+   else
+      pcm = ISvBgCm_Constructor( pdcm->psf, TRUE );
+
+   hr = S_OK;
+   *ppv = pcm;
+
+   return hr;
+}
+
+/*************************************************************************
+ * CDefFolderMenu_Create2			[SHELL32.701]
+ *
+ */
+
+INT 
+WINAPI
+CDefFolderMenu_Create2(
+	LPCITEMIDLIST pidlFolder,
+	HWND hwnd,
+	UINT cidl,
+	LPCITEMIDLIST *apidl,
+	IShellFolder *psf,
+	LPFNDFMCALLBACK lpfn,
+	UINT nKeys,
+	HKEY *ahkeyClsKeys,
+	IContextMenu **ppcm)
+{
+   DEFCONTEXTMENU pdcm;
+   HRESULT hr;
+
+   pdcm.hwnd = hwnd;
+   pdcm.pcmcb = NULL; //FIXME
+   pdcm.pidlFolder = pidlFolder;
+   pdcm.psf = psf;
+   pdcm.cidl = cidl;
+   pdcm.apidl = apidl;
+   pdcm.punkAssociationInfo = NULL;
+   pdcm.cKeys = nKeys;
+   pdcm.aKeys = ahkeyClsKeys;
+
+   hr = SHCreateDefaultContextMenu(&pdcm, &IID_IContextMenu, (void**)ppcm);
+   return hr;
+}




More information about the Ros-diffs mailing list