void CSetSavedDataPage::OnBnClickedAuthhistclear() { CRegStdString auth = CRegStdString(_T("Software\\TortoiseGit\\Auth\\")); auth.removeKey(); PWSTR pszPath = nullptr; if (SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_CREATE, nullptr, &pszPath) == S_OK) { CString path = pszPath; CoTaskMemFree(pszPath); path += L"\\Subversion\\auth\\"; DeleteViaShell(path, IDS_SETTINGS_DELFILE); } m_btnAuthHistClear.EnableWindow(FALSE); m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTCLEAR)); m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTORY)); }
bool CRegHistory::Save() const { if (m_sSection.empty()) return false; // save history to registry int nMax = min((int)m_arEntries.size(), m_nMaxHistoryItems + 1); for (int n = 0; n < (int)m_arEntries.size(); n++) { TCHAR sKey[4096] = {0}; if (m_pIniFile) { _stprintf_s(sKey, _countof(sKey), _T("%s%d"), m_sKeyPrefix.c_str(), n); m_pIniFile->SetValue(m_sSection.c_str(), sKey, m_arEntries[n].c_str()); } else { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); CRegStdString regkey(sKey); regkey = m_arEntries[n]; } } // remove items exceeding the max number of history items for (int n = nMax; ; n++) { TCHAR sKey[4096] = {0}; if (m_pIniFile) { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); if (wcscmp(m_pIniFile->GetValue(m_sSection.c_str(), sKey, L""), L"")==0) break; m_pIniFile->Delete(m_sSection.c_str(), sKey, false); } else { _stprintf_s(sKey, _countof(sKey), _T("%s\\%s%d"), m_sSection.c_str(), m_sKeyPrefix.c_str(), n); CRegStdString regkey = CRegStdString(sKey); if (std::wstring(regkey).empty()) break; regkey.removeValue(); // remove entry } } return true; }
void CSetSavedDataPage::OnBnClickedAuthhistclear() { CRegStdString auth = CRegStdString(_T("Software\\TortoiseGit\\Auth\\")); auth.removeKey(); TCHAR pathbuf[MAX_PATH] = {0}; if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, pathbuf)==S_OK) { _tcscat_s(pathbuf, MAX_PATH, _T("\\Subversion\\auth")); pathbuf[_tcslen(pathbuf)+1] = 0; SHFILEOPSTRUCT fileop; fileop.hwnd = this->m_hWnd; fileop.wFunc = FO_DELETE; fileop.pFrom = pathbuf; fileop.pTo = NULL; fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | FOF_NOCONFIRMATION;// | FOF_NOERRORUI | FOF_SILENT; fileop.lpszProgressTitle = _T("deleting file"); SHFileOperation(&fileop); } m_btnAuthHistClear.EnableWindow(FALSE); m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTCLEAR)); m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTORY)); }
void SetUUIDOverlayIcon( HWND hWnd ) { if (!CRegStdDWORD(_T("Software\\TortoiseGit\\GroupTaskbarIconsPerRepo"), 3)) return; if (!CRegStdDWORD(_T("Software\\TortoiseGit\\GroupTaskbarIconsPerRepoOverlay"), TRUE)) return; std::wstring uuid; std::wstring sicon; bool bRemoveicon = false; #ifdef __AFXWIN_H__ uuid = g_sGroupingUUID; sicon = g_sGroupingIcon; bRemoveicon = g_bGroupingRemoveIcon; #else CCmdLineParser parser(GetCommandLine()); if (parser.HasVal(L"groupuuid")) uuid = parser.GetVal(L"groupuuid"); #endif if (uuid.empty()) return; CComPtr<ITaskbarList3> pTaskbarInterface; if (FAILED(pTaskbarInterface.CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER))) return; int foundUUIDIndex = 0; do { wchar_t buf[MAX_PATH] = { 0 }; swprintf_s(buf, _countof(buf), L"%s%d", L"Software\\TortoiseGit\\LastUsedUUIDsForGrouping\\", foundUUIDIndex); CRegStdString r = CRegStdString(buf); std::wstring sr = r; if (sr.empty()) { r = uuid + (sicon.empty() ? L"" : (L";" + sicon)); break; } size_t sep = sr.find(L';'); std::wstring olduuid = sep != std::wstring::npos ? sr.substr(0, sep) : sr; if (olduuid.compare(uuid) == 0) { if (bRemoveicon) r = uuid; // reset icon path in registry else if (!sicon.empty()) r = uuid + (sicon.empty() ? L"" : (L";" + sicon)); else sicon = sep != std::wstring::npos ? sr.substr(sep + 1) : L""; break; } foundUUIDIndex++; } while (foundUUIDIndex < 20); if (foundUUIDIndex >= 20) { CRegStdString r = CRegStdString(L"Software\\TortoiseGit\\LastUsedUUIDsForGrouping\\1"); r.removeKey(); } HICON icon = nullptr; if (!sicon.empty()) { if (sicon.size() >= 4 && !_wcsicmp(sicon.substr(sicon.size() - 4).c_str(), L".ico")) icon = (HICON)::LoadImage(nullptr, sicon.c_str(), IMAGE_ICON, 16, 16, LR_LOADFROMFILE | LR_SHARED); else { ULONG_PTR gdiplusToken = 0; Gdiplus::GdiplusStartupInput gdiplusStartupInput; GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, nullptr); if (gdiplusToken) { Gdiplus::Bitmap* pBitmap = new Gdiplus::Bitmap(sicon.c_str(), FALSE); if (pBitmap->GetLastStatus() == Gdiplus::Status::Ok) pBitmap->GetHICON(&icon); delete pBitmap; Gdiplus::GdiplusShutdown(gdiplusToken); } } } if (!icon) { DWORD colors[6] = { 0x80FF0000, 0x80FFFF00, 0x8000FF00, 0x800000FF, 0x80000000, 0x8000FFFF }; // AND mask - monochrome - determines which pixels get drawn BYTE AND[32]; for (int i = 0; i<32; i++) { AND[i] = 0xFF; } // XOR mask - 32bpp ARGB - determines the pixel values DWORD XOR[256]; for (int i = 0; i<256; i++) { XOR[i] = colors[foundUUIDIndex % 6]; } icon = ::CreateIcon(nullptr, 16, 16, 1, 32, AND, (BYTE*)XOR); } pTaskbarInterface->SetOverlayIcon(hWnd, icon, uuid.c_str()); DestroyIcon(icon); }
void SetUUIDOverlayIcon( HWND hWnd ) { if (CRegStdDWORD(_T("Software\\TortoiseGit\\GroupTaskbarIconsPerRepo"), 3)) { if (CRegStdDWORD(_T("Software\\TortoiseGit\\GroupTaskbarIconsPerRepoOverlay"), TRUE)) { std::wstring uuid; #ifdef _MFC_VER uuid = g_sGroupingUUID; #else CCmdLineParser parser(GetCommandLine()); if (parser.HasVal(L"groupuuid")) uuid = parser.GetVal(L"groupuuid"); #endif if (!uuid.empty()) { ITaskbarList3 * pTaskbarInterface = NULL; HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, reinterpret_cast<void**> (&(pTaskbarInterface))); if (SUCCEEDED(hr)) { int foundUUIDIndex = 0; do { wchar_t buf[MAX_PATH]; swprintf_s(buf, _countof(buf), L"%s%d", L"Software\\TortoiseGit\\LastUsedUUIDsForGrouping\\", foundUUIDIndex); CRegStdString r = CRegStdString(buf); std::wstring sr = r; if (sr.empty() || (sr.compare(uuid)==0)) { r = uuid; break; } foundUUIDIndex++; } while (foundUUIDIndex < 20); if (foundUUIDIndex >= 20) { CRegStdString r = CRegStdString(L"Software\\TortoiseGit\\LastUsedUUIDsForGrouping\\1"); r.removeKey(); } DWORD colors[6] = {0x80FF0000, 0x80FFFF00, 0x8000FF00, 0x800000FF, 0x80000000, 0x8000FFFF}; // AND mask - monochrome - determines which pixels get drawn BYTE AND[32]; for( int i=0; i<32; i++ ) { AND[i] = 0xFF; } // XOR mask - 32bpp ARGB - determines the pixel values DWORD XOR[256]; for( int i=0; i<256; i++ ) { XOR[i] = colors[foundUUIDIndex % 6]; } HICON icon = ::CreateIcon(NULL,16,16,1,32,AND,(BYTE*)XOR); pTaskbarInterface->SetOverlayIcon(hWnd, icon, uuid.c_str()); pTaskbarInterface->Release(); DestroyIcon(icon); } } } } }