1 // TortoiseOverlays - an overlay handler for Tortoise clients
\r
2 // Copyright (C) 2007 - TortoiseSVN
\r
4 #include "ShellExt.h"
\r
6 #include "ShellExtClassFactory.h"
\r
8 UINT g_cRefThisDll = 0; ///< reference count of this DLL.
\r
9 HINSTANCE g_hmodThisDll = NULL; ///< handle to this DLL itself.
\r
12 #pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
\r
14 extern "C" int APIENTRY
\r
15 DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /* lpReserved */)
\r
18 // if no debugger is present, then don't load the dll.
\r
19 // this prevents other apps from loading the dll and locking
\r
22 if (!::IsDebuggerPresent())
\r
28 if (dwReason == DLL_PROCESS_ATTACH)
\r
30 // Extension DLL one-time initialization
\r
31 g_hmodThisDll = hInstance;
\r
36 STDAPI DllCanUnloadNow(void)
\r
38 return (g_cRefThisDll == 0 ? S_OK : S_FALSE);
\r
41 STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
\r
45 FileState state = FileStateInvalid;
\r
46 if (IsEqualIID(rclsid, CLSID_Tortoise_NORMAL))
\r
47 state = FileStateNormal;
\r
48 else if (IsEqualIID(rclsid, CLSID_Tortoise_MODIFIED))
\r
49 state = FileStateModified;
\r
50 else if (IsEqualIID(rclsid, CLSID_Tortoise_CONFLICT))
\r
51 state = FileStateConflict;
\r
52 else if (IsEqualIID(rclsid, CLSID_Tortoise_DELETED))
\r
53 state = FileStateDeleted;
\r
54 else if (IsEqualIID(rclsid, CLSID_Tortoise_READONLY))
\r
55 state = FileStateReadOnly;
\r
56 else if (IsEqualIID(rclsid, CLSID_Tortoise_LOCKED))
\r
57 state = FileStateLocked;
\r
58 else if (IsEqualIID(rclsid, CLSID_Tortoise_ADDED))
\r
59 state = FileStateAdded;
\r
60 else if (IsEqualIID(rclsid, CLSID_Tortoise_IGNORED))
\r
61 state = FileStateIgnored;
\r
62 else if (IsEqualIID(rclsid, CLSID_Tortoise_UNVERSIONED))
\r
63 state = FileStateUnversioned;
\r
65 if (state != FileStateInvalid)
\r
67 CShellExtClassFactory *pcf = new CShellExtClassFactory(state);
\r
68 return pcf->QueryInterface(riid, ppvOut);
\r
71 return CLASS_E_CLASSNOTAVAILABLE;
\r