BOOL CFirstStartWizardAuthentication::OnWizardFinish() { UpdateData(); CString sshclient = CRegString(L"Software\\TortoiseGit\\SSH"); if (sshclient.IsEmpty()) sshclient = CRegString(L"Software\\TortoiseGit\\SSH", L"", FALSE, HKEY_LOCAL_MACHINE); if (m_ctrlSSHClient.GetCurSel() == 0 && !(sshclient.IsEmpty() || IsTool(L"tortoisegitplink", sshclient) || IsTool(L"tortoiseplink", sshclient))) CRegString(L"Software\\TortoiseGit\\SSH") = CPathUtils::GetAppDirectory() + L"TortoiseGitPlink.exe"; else if (m_ctrlSSHClient.GetCurSel() == 1 && !IsTool(L"ssh", sshclient)) CRegString(L"Software\\TortoiseGit\\SSH") = L"ssh.exe"; if (m_ctrlSimpleCredential.IsWindowEnabled() && !m_bNoSave && m_ctrlSimpleCredential.GetCurSel() != -1) { CAutoConfig config(true); int err = git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalXDGConfig()), GIT_CONFIG_LEVEL_XDG, nullptr, FALSE); if (!err && (PathFileExists(g_Git.GetGitGlobalConfig()) || !PathFileExists(g_Git.GetGitGlobalXDGConfig()))) err = git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalConfig()), GIT_CONFIG_LEVEL_GLOBAL, nullptr, FALSE); if (err) { MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); return FALSE; } if (m_ctrlSimpleCredential.GetCurSel() == 0 && m_availableHelpers.at(0) == CString(MAKEINTRESOURCE(IDS_NONE))) { int ret = git_config_delete_entry(config, "credential.helper"); if (ret != 0 && ret != GIT_ENOTFOUND) { MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); return FALSE; } } else if (git_config_set_string(config, "credential.helper", CUnicodeUtils::GetUTF8(m_availableHelpers.at(m_ctrlSimpleCredential.GetCurSel())))) { MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); return FALSE; } } return __super::OnWizardFinish(); }
void GWindow::Pour() { GRect Cli = GetClient(); if (!Cli.Valid()) return; GRegion Client(Cli); GViewI *MenuView = 0; GRegion Update(Client); bool HasTools = false; GViewI *v; List<GViewI>::I Lst = Children.Start(); { GRegion Tools; for (v = *Lst; v; v = *++Lst) { bool IsMenu = MenuView == v; if (!IsMenu && IsTool(v)) { GRect OldPos = v->GetPos(); Update.Union(&OldPos); if (HasTools) { // 2nd and later toolbars if (v->Pour(Tools)) { if (!v->Visible()) { v->Visible(true); } if (OldPos != v->GetPos()) { // position has changed update... v->Invalidate(); } Tools.Subtract(&v->GetPos()); Update.Subtract(&v->GetPos()); } } else { // First toolbar if (v->Pour(Client)) { HasTools = true; if (!v->Visible()) { v->Visible(true); } if (OldPos != v->GetPos()) { v->Invalidate(); } GRect Bar(v->GetPos()); Bar.x2 = GetClient().x2; Tools = Bar; Tools.Subtract(&v->GetPos()); Client.Subtract(&Bar); Update.Subtract(&Bar); } } } } } Lst = Children.Start(); for (GViewI *v = *Lst; v; v = *++Lst) { bool IsMenu = MenuView == v; if (!IsMenu && !IsTool(v)) { GRect OldPos = v->GetPos(); Update.Union(&OldPos); if (v->Pour(Client)) { GRect p = v->GetPos(); if (!v->Visible()) { v->Visible(true); } v->Invalidate(); Client.Subtract(&v->GetPos()); Update.Subtract(&v->GetPos()); } else { // non-pourable } } } for (int i=0; i<Update.Length(); i++) { Invalidate(Update[i]); } }
BOOL CFirstStartWizardAuthentication::OnInitDialog() { CFirstStartWizardBasePage::OnInitDialog(); CString tmp; tmp.LoadString(IDS_FIRSTSTART_SSHHINT); GetDlgItem(IDC_FIRSTSTART_SSHHINT)->SetWindowText(tmp); CAutoConfig config(true); if (git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalConfig()), GIT_CONFIG_LEVEL_GLOBAL, nullptr, FALSE)) MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); else { if (git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalXDGConfig()), GIT_CONFIG_LEVEL_XDG, nullptr, FALSE)) MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); } if (!g_Git.ms_bCygwinGit && !g_Git.ms_bMsys2Git) { if (git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitProgramDataConfig()), GIT_CONFIG_LEVEL_PROGRAMDATA, nullptr, FALSE)) MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); } if (git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitSystemConfig()), GIT_CONFIG_LEVEL_SYSTEM, nullptr, FALSE)) MessageBox(g_Git.GetLibGit2LastErr(), L"TortoiseGit", MB_ICONEXCLAMATION); STRING_VECTOR defaultList; git_config_foreach_match(config, "credential\\.helper", CSettingGitCredential::GetCredentialDefaultUrlCallback, &defaultList); if (defaultList.size() <= 1 && (defaultList.empty() || defaultList.at(0)[0] == 'X' || defaultList.at(0)[0] == 'G')) AddHelper(m_ctrlSimpleCredential, m_availableHelpers, MAKEINTRESOURCE(IDS_NONE)); CString selectedHelper; if (config.GetString(L"credential.helper", selectedHelper) == GIT_ENOTFOUND) m_ctrlSimpleCredential.SetCurSel(0); if (CSettingGitCredential::GCMExists()) AddHelper(m_ctrlSimpleCredential, m_availableHelpers, L"manager", selectedHelper); if (CSettingGitCredential::WincredExists()) AddHelper(m_ctrlSimpleCredential, m_availableHelpers, L"wincred", selectedHelper); if (CSettingGitCredential::WinstoreExists()) AddHelper(m_ctrlSimpleCredential, m_availableHelpers, CSettingGitCredential::GetWinstorePath(), selectedHelper); STRING_VECTOR urlList; git_config_foreach_match(config, "credential\\..*\\.helper", CSettingGitCredential::GetCredentialUrlCallback, &urlList); if (!urlList.empty() || m_ctrlSimpleCredential.GetCurSel() == -1) { m_ctrlSimpleCredential.EnableWindow(FALSE); m_availableHelpers.clear(); m_ctrlSimpleCredential.Clear(); AddHelper(m_ctrlSimpleCredential, m_availableHelpers, MAKEINTRESOURCE(IDS_ADVANCED)); m_ctrlSimpleCredential.SetCurSel(0); } AdjustControlSize(IDC_DONTSAVE); CString sshclient = CRegString(L"Software\\TortoiseGit\\SSH"); if (sshclient.IsEmpty()) sshclient = CRegString(L"Software\\TortoiseGit\\SSH", L"", FALSE, HKEY_LOCAL_MACHINE); int idx = m_ctrlSSHClient.AddString(L"TortoiseGitPlink"); if (sshclient.IsEmpty() || IsTool(L"tortoisegitplink", sshclient) || IsTool(L"tortoiseplink", sshclient)) m_ctrlSSHClient.SetCurSel(idx); idx = m_ctrlSSHClient.AddString(L"OpenSSH"); if (IsTool(L"ssh", sshclient)) m_ctrlSSHClient.SetCurSel(idx); if (m_ctrlSSHClient.GetCurSel() == -1) { idx = m_ctrlSSHClient.AddString(sshclient); m_ctrlSSHClient.SetCurSel(idx); } // TODO: Hide the button if PuTTY is not used? //GetDlgItem(IDC_GENERATEPUTTYKEY)->ShowWindow(CAppUtils::IsSSHPutty() ? SW_SHOW : SW_HIDE); UpdateData(FALSE); return TRUE; }