From b758859c3c85f6a93dc4d1db627628308731b4a8 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Thu, 23 Jul 2026 16:13:31 +0200 Subject: [PATCH] Support default= in .kateworkspace to set initial subrepo --- gitplusplus.cpp | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/gitplusplus.cpp b/gitplusplus.cpp index e29039b..7975778 100644 --- a/gitplusplus.cpp +++ b/gitplusplus.cpp @@ -2444,11 +2444,43 @@ void GitPlusPlusView::detectWorkspace() QString name = QFileInfo(repoPath).fileName(); m_repoCombo->addItem(name, repoPath); } - // Select current m_gitDir in combo - for (int i = 0; i < m_repoCombo->count(); ++i) { - if (m_repoCombo->itemData(i).toString() == m_gitDir) { - m_repoCombo->setCurrentIndex(i); - break; + // Select workspace default repo, or fall back to current m_gitDir + int selectedIdx = -1; + QString wsFilePath = m_workspaceDir + QStringLiteral("/.kateworkspace"); + if (QFileInfo::exists(wsFilePath)) { + QSettings ws(wsFilePath, QSettings::IniFormat); + ws.beginGroup(QStringLiteral("workspace")); + QString defaultRepo = ws.value(QStringLiteral("default")).toString(); + ws.endGroup(); + if (!defaultRepo.isEmpty()) { + for (int i = 0; i < m_repoCombo->count(); ++i) { + if (m_repoCombo->itemText(i) == defaultRepo) { + selectedIdx = i; + break; + } + } + } + } + if (selectedIdx < 0) { + // No default configured — use current m_gitDir + for (int i = 0; i < m_repoCombo->count(); ++i) { + if (m_repoCombo->itemData(i).toString() == m_gitDir) { + selectedIdx = i; + break; + } + } + } + if (selectedIdx >= 0) { + m_repoCombo->setCurrentIndex(selectedIdx); + QString newGitDir = m_repoCombo->itemData(selectedIdx).toString(); + if (newGitDir != m_gitDir) { + m_gitDir = newGitDir; + // Open .kateproject to trigger Kate's project switch + QString kateProjectFile = m_gitDir + QStringLiteral("/.kateproject"); + if (QFileInfo::exists(kateProjectFile)) + m_mainWindow->openUrl(QUrl::fromLocalFile(kateProjectFile)); + } else { + m_gitDir = newGitDir; } } m_repoCombo->blockSignals(false);