[SHELL32] - Initialize the shell icon cache only when needed or when FileIconInit...
[reactos.git] / reactos / dll / win32 / shell32 / wine / shellord.c
index 09984d3..df2c520 100644 (file)
 
 #include <windef.h>
 #include <winbase.h>
-#include <winternl.h>
+#include <wine/winternl.h>
 #include <shlobj.h>
 #include <undocshell.h>
 #include <shlwapi.h>
 #include <commdlg.h>
 #include <commoncontrols.h>
-#include <recyclebin.h>
+#include "../shellrecyclebin/recyclebin.h"
 
 #include <wine/debug.h>
 #include <wine/unicode.h>
@@ -69,20 +69,6 @@ extern INT    WINAPI FindMRUData(HANDLE hList, LPCVOID lpData, DWORD cbData, LPI
 extern INT    WINAPI EnumMRUListA(HANDLE hList, INT nItemPos, LPVOID lpBuffer, DWORD nBufferSize);
 
 
-/* Get a function pointer from a DLL handle */
-#define GET_FUNC(func, funcType, module, name, fail) \
-  do { \
-    if (!func) { \
-      if (!SHELL32_h##module && !(SHELL32_h##module = LoadLibraryA(#module ".dll"))) return fail; \
-      func = (funcType)GetProcAddress(SHELL32_h##module, name); \
-      if (!func) return fail; \
-    } \
-  } while (0)
-
-/* Function pointers for GET_FUNC macro */
-static HMODULE SHELL32_hshlwapi=NULL;
-
-
 /*************************************************************************
  * ParseFieldA                                 [internal]
  *
@@ -324,9 +310,14 @@ BOOL WINAPI RegisterShellHook(
        DWORD dwType)
 {
     if (dwType == 3)
+    {
+        SetTaskmanWindow(hWnd);
         return RegisterShellHookWindow(hWnd);
+    }
     else if (dwType == 0)
+    {
         return DeregisterShellHookWindow(hWnd);
+    }
 
     ERR("Unsupported argument");
     return FALSE;
@@ -809,7 +800,11 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
     switch (uFlags)
     {
     case SHARD_PIDL:
-        SHGetPathFromIDListA(pv, doc_name);
+        if (!SHGetPathFromIDListA(pv, doc_name))
+        {
+            WARN("can't get path from PIDL\n");
+            return;
+        }
         break;
 
     case SHARD_PATHA:
@@ -832,8 +827,13 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
     ext = strrchr(doc_name, '.');
     if (!lstrcmpiA(ext, ".lnk"))
     {
+        WCHAR doc_nameW[MAX_PATH];
         IShellLinkA* ShellLink;
-        IShellLink_ConstructFromFile(NULL, &IID_IShellLinkA, (LPCITEMIDLIST)SHSimpleIDListFromPathA(doc_name), (LPVOID*)&ShellLink);
+        int nLength = MultiByteToWideChar(CP_ACP, 0, doc_name, -1, doc_nameW, MAX_PATH);
+        if (nLength == 0)
+            return;
+
+        IShellLink_ConstructFromPath(doc_nameW, &IID_IShellLinkA, (LPVOID*)&ShellLink);
         IShellLinkA_GetPath(ShellLink, doc_name, MAX_PATH, NULL, 0);
         IShellLinkA_Release(ShellLink);
     }
@@ -900,7 +900,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
                /* buffer size looks good */
                ptr += 12; /* get to string */
                len = bufused - (ptr-buffer);  /* get length of buf remaining */
-               if ((lstrlenA(ptr) > 0) && (lstrlenA(ptr) <= len-1)) {
+                if (ptr[0] && (lstrlenA(ptr) <= len-1)) {
                    /* appears to be good string */
                    lstrcpyA(old_lnk_name, link_dir);
                    PathAppendA(old_lnk_name, ptr);
@@ -1231,10 +1231,10 @@ BOOL WINAPI ReadCabinetState(CABINETSTATE *cs, int length)
        if( r == ERROR_SUCCESS )
        {
                type = REG_BINARY;
-               r = RegQueryValueExW( hkey, szwSettings, 
+               r = RegQueryValueExW( hkey, szwSettings,
                        NULL, &type, (LPBYTE)cs, (LPDWORD)&length );
                RegCloseKey( hkey );
-                       
+
        }
 
        /* if we can't read from the registry, create default values */
@@ -1256,7 +1256,7 @@ BOOL WINAPI ReadCabinetState(CABINETSTATE *cs, int length)
                cs->fAdminsCreateCommonGroups = TRUE;
                cs->fMenuEnumFilter  = 96;
        }
-       
+
        return TRUE;
 }
 
@@ -1278,7 +1278,7 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *cs)
                 NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL);
        if( r == ERROR_SUCCESS )
        {
-               r = RegSetValueExW( hkey, szwSettings, 0, 
+               r = RegSetValueExW( hkey, szwSettings, 0,
                        REG_BINARY, (LPBYTE) cs, cs->cLength);
 
                RegCloseKey( hkey );
@@ -1292,8 +1292,8 @@ BOOL WINAPI WriteCabinetState(CABINETSTATE *cs)
  *
  */
 BOOL WINAPI FileIconInit(BOOL bFullInit)
-{      FIXME("(%s)\n", bFullInit ? "true" : "false");
-       return FALSE;
+{
+    return SIC_Initialize();
 }
 
 /*************************************************************************
@@ -1370,62 +1370,6 @@ BOOL WINAPI IsUserAnAdmin(VOID)
     return bResult;
 }
 
-/*************************************************************************
- * SHAllocShared                               [SHELL32.520]
- *
- * See shlwapi.SHAllocShared
- */
-HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
-{
-    typedef HANDLE (WINAPI *SHAllocSharedProc)(LPCVOID, DWORD, DWORD);
-    static SHAllocSharedProc        pSHAllocShared;
-
-    GET_FUNC(pSHAllocShared, SHAllocSharedProc, shlwapi, (char*)7, NULL);
-    return pSHAllocShared(lpvData, dwSize, dwProcId);
-}
-
-/*************************************************************************
- * SHLockShared                                        [SHELL32.521]
- *
- * See shlwapi.SHLockShared
- */
-LPVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
-{
-    typedef HANDLE (WINAPI *SHLockSharedProc)(HANDLE, DWORD);
-    static SHLockSharedProc            pSHLockShared;
-
-    GET_FUNC(pSHLockShared, SHLockSharedProc, shlwapi, (char*)8, NULL);
-    return pSHLockShared(hShared, dwProcId);
-}
-
-/*************************************************************************
- * SHUnlockShared                              [SHELL32.522]
- *
- * See shlwapi.SHUnlockShared
- */
-BOOL WINAPI SHUnlockShared(LPVOID lpView)
-{
-    typedef HANDLE (WINAPI *SHUnlockSharedProc)(LPCVOID);
-    static SHUnlockSharedProc        pSHUnlockShared;
-
-    GET_FUNC(pSHUnlockShared, SHUnlockSharedProc, shlwapi, (char*)9, FALSE);
-    return pSHUnlockShared(lpView) != NULL;
-}
-
-/*************************************************************************
- * SHFreeShared                                        [SHELL32.523]
- *
- * See shlwapi.SHFreeShared
- */
-BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
-{
-    typedef HANDLE (WINAPI *SHFreeSharedProc)(HANDLE, DWORD);
-    static SHFreeSharedProc            pSHFreeShared;
-
-    GET_FUNC(pSHFreeShared, SHFreeSharedProc, shlwapi, (char*)10, FALSE);
-    return pSHFreeShared(hShared, dwProcId) != NULL;
-}
-
 /*************************************************************************
  * SetAppStartingCursor                                [SHELL32.99]
  */
@@ -1616,7 +1560,7 @@ DWORD WINAPI DoEnvironmentSubstW(LPWSTR pszString, UINT cchString)
 /************************************************************************
  *     DoEnvironmentSubst                      [SHELL32.53]
  *
- * See DoEnvironmentSubstA.  
+ * See DoEnvironmentSubstA.
  */
 DWORD WINAPI DoEnvironmentSubstAW(LPVOID x, UINT y)
 {
@@ -1902,9 +1846,9 @@ void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
  *  Create IDataObject from PIDLs??
  */
 HRESULT WINAPI CIDLData_CreateFromIDArray(
-       LPCITEMIDLIST pidlFolder,
+       PCIDLIST_ABSOLUTE pidlFolder,
     UINT cpidlFiles,
-       LPCITEMIDLIST *lppidlFiles,
+       PCUIDLIST_RELATIVE_ARRAY lppidlFiles,
        LPDATAOBJECT *ppdataObject)
 {
     UINT i;
@@ -2101,7 +2045,7 @@ BOOL WINAPI LinkWindow_RegisterClass(void)
 /*************************************************************************
  *              LinkWindow_UnregisterClass (SHELL32.259)
  */
-BOOL WINAPI LinkWindow_UnregisterClass(void)
+BOOL WINAPI LinkWindow_UnregisterClass(DWORD dwUnused)
 {
     FIXME("()\n");
     return TRUE;