When a workspace with only one project is closed, then another loaded, it's possible for the newly loaded project to be assigned the same memory address as the closed project.
Thus, any test against the previously loaded projects address will match, and macrosmanager.cpp will not replace the macros for the second project.
Below is the fix. I'll apply after review by other team members.
Index: src/sdk/macrosmanager.cpp
===================================================================
--- src/sdk/macrosmanager.cpp (revision 10889)
+++ src/sdk/macrosmanager.cpp (working copy)
@@ -269,7 +269,7 @@
m_Macros[_T("MAKEFILE")] = wxEmptyString;
m_Macros[_T("ALL_PROJECT_FILES")] = wxEmptyString;
}
- else if (project != m_LastProject)
+ else if ( (project != m_LastProject) or (project->GetTitle() != m_ProjectName) )
{
m_LastTarget = nullptr; // reset last target when project changes
m_ProjectWxFileName.Assign(project->GetFilename());
@@ -340,7 +340,7 @@
m_TargetFilename = wxEmptyString;
m_LastTarget = nullptr;
}
- else if (target != m_LastTarget)
+ else if ( (target != m_LastTarget) or (target->GetTitle() != m_TargetName) )
{
wxFileName tod(target->GetOutputFilename());
m_TargetOutputDir = UnixFilename(tod.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR));
@@ -455,7 +455,8 @@
target = project->GetBuildTarget(project->GetActiveBuildTarget());
}
}
- if (project != m_LastProject || target != m_LastTarget || (editor && (editor->GetFilename() != m_ActiveEditorFilename)) )
+ if (project != m_LastProject || target != m_LastTarget || (editor && (editor->GetFilename() != m_ActiveEditorFilename))
+ || (project && (project->GetTitle() != m_ProjectName)) || (target && (target->GetTitle() != m_TargetName)) )
RecalcVars(project, editor, target);
wxString search;