OSDN Git Service

Enable Sync Dialog Resize
[tortoisegit/TortoiseGitJp.git] / src / TortoiseShell / IconOverlay.cpp
index 28a59a0..c8b5a33 100644 (file)
@@ -22,7 +22,7 @@
 #include "PreserveChdir.h"\r
 #include "UnicodeUtils.h"\r
 #include "GitStatus.h"\r
-//#include "..\TSVNCache\CacheInterface.h"\r
+#include "..\TGitCache\CacheInterface.h"\r
 \r
 // "The Shell calls IShellIconOverlayIdentifier::GetOverlayInfo to request the\r
 //  location of the handler's icon overlay. The icon overlay handler returns\r
@@ -137,18 +137,16 @@ STDMETHODIMP CShellExt::IsMemberOf(LPCWSTR pwszPath, DWORD /*dwAttrib*/)
                {\r
                case ShellCache::exe:\r
                        {\r
-#if 0\r
                                TSVNCacheResponse itemStatus;\r
                                SecureZeroMemory(&itemStatus, sizeof(itemStatus));\r
                                if (m_remoteCacheLink.GetStatusFromRemoteCache(CTGitPath(pPath), &itemStatus, true))\r
                                {\r
                                        status = GitStatus::GetMoreImportant(itemStatus.m_status.text_status, itemStatus.m_status.prop_status);\r
-                                       if ((itemStatus.m_kind == git_node_file)&&(status == git_wc_status_normal)&&((itemStatus.m_needslock && itemStatus.m_owner[0]==0)||(itemStatus.m_readonly)))\r
+/*                                     if ((itemStatus.m_kind == git_node_file)&&(status == git_wc_status_normal)&&((itemStatus.m_needslock && itemStatus.m_owner[0]==0)||(itemStatus.m_readonly)))\r
                                                readonlyoverlay = true;\r
                                        if (itemStatus.m_owner[0]!=0)\r
-                                               lockedoverlay = true;\r
+                                               lockedoverlay = true;*/\r
                                }\r
-#endif\r
                        }\r
                        break;\r
                case ShellCache::dll:\r
@@ -207,6 +205,10 @@ STDMETHODIMP CShellExt::IsMemberOf(LPCWSTR pwszPath, DWORD /*dwAttrib*/)
                                        lockedoverlay = true;\r
                        }\r
 \r
+                       // index based version does not enumerate unversioned files, so default to unversioned\r
+                       if (g_ShellCache.GetCacheType() == ShellCache::dll\r
+                               && status == git_wc_status_none && g_ShellCache.HasSVNAdminDir(pPath, true))\r
+                               status = git_wc_status_unversioned;\r
                        break;\r
                default:\r
                case ShellCache::none:\r
@@ -244,11 +246,6 @@ STDMETHODIMP CShellExt::IsMemberOf(LPCWSTR pwszPath, DWORD /*dwAttrib*/)
        //if other handlers would return S_OK too (they're never called on my machine!)\r
        //So we return S_OK for ONLY ONE handler!\r
 \r
-       // TODO: not sure this should be here. if anywhere it should be in case 'dll' above\r
-       //       because if overlay type 'none' is selected we don't want this to change status to unversioned (which may have overlay)\r
-       if(g_ShellCache.HasSVNAdminDir(pPath, true) && status == git_wc_status_none)\r
-               status = git_wc_status_unversioned;\r
-\r
        switch (status)\r
        {\r
                // note: we can show other overlays if due to lack of enough free overlay\r
@@ -326,7 +323,6 @@ STDMETHODIMP CShellExt::IsMemberOf(LPCWSTR pwszPath, DWORD /*dwAttrib*/)
                        }\r
                case git_wc_status_replaced:\r
                case git_wc_status_modified:\r
-               case git_wc_status_merged:\r
                        if (m_State == FileStateModified)\r
                        {\r
                                g_filepath.clear();\r
@@ -334,6 +330,14 @@ STDMETHODIMP CShellExt::IsMemberOf(LPCWSTR pwszPath, DWORD /*dwAttrib*/)
                        }\r
                        else\r
                                return S_FALSE;\r
+               case git_wc_status_merged:\r
+                       if (m_State == FileStateReadOnly)\r
+                       {\r
+                               g_filepath.clear();\r
+                               return S_OK;\r
+                       }\r
+                       else\r
+                               return S_FALSE;\r
                case git_wc_status_added:\r
                        if (g_addedovlloaded)\r
                        {\r