11
Development / Re: Use of '_T("...")' with 'CB'
« Last post by LETARTARE on Today at 04:55:35 pm »I look immediately...
As usual while waiting for the next release - don't forget to check the nightly builds in the forum.
'_T\(("(\\"|[^"])*")\)''\1''_T("...")' or 'wxT("...")' by '"..."'--- src/plugins/codecompletion/classbrowser.cpp
+++ src/plugins/codecompletion/classbrowser.cpp
@@ -176,8 +176,15 @@
m_CCTreeCtrlBottom = XRCCTRL(*this, "treeMembers", CCTreeCtrl);
// Registration of images
- m_CCTreeCtrl->SetImageList(m_ParseManager->GetImageList(16));
- m_CCTreeCtrlBottom->SetImageList(m_ParseManager->GetImageList(16));
+ if (m_ParseManager)
+ {
+ wxImageList* imgList = m_ParseManager->GetImageList(16);
+ if (imgList)
+ {
+ m_CCTreeCtrl->SetImageList(imgList);
+ m_CCTreeCtrlBottom->SetImageList(imgList);
+ }
+ }
ConfigManager* cfg = Manager::Get()->GetConfigManager("code_completion");
const int filter = cfg->ReadInt("/browser_display_filter", bdfFile);
@@ -239,12 +246,19 @@
{
const int sel = XRCCTRL(*this, "cmbView", wxChoice)->GetSelection();
BrowserDisplayFilter filter = static_cast<BrowserDisplayFilter>(sel);
- if (!m_ParseManager->IsParserPerWorkspace() && filter == bdfWorkspace)
+ if (m_ParseManager && !m_ParseManager->IsParserPerWorkspace() && filter == bdfWorkspace)
filter = bdfProject;
m_Parser->ClassBrowserOptions().displayFilter = filter;
m_Parser->WriteOptions(/*classbrowserOnly=*/true);
- UpdateClassBrowserView();
+
+ // Guard: Only update the class browser view if the application
+ // subsystems (ProjectManager, EditorManager) are fully initialized.
+ if (Manager::Get()->GetProjectManager() &&
+ Manager::Get()->GetEditorManager())
+ {
+ UpdateClassBrowserView();
+ }
}
else
CCLogger::Get()->DebugLog("SetParser: No parser available.");
--- src/plugins/codecompletion/parsemanager.cpp
+++ src/plugins/codecompletion/parsemanager.cpp
@@ -1043,9 +1043,16 @@
}
else
{
+ // Guard against ProjectManager not being ready yet (macOS startup race)
+ ProjectManager* prjMgr = Manager::Get()->GetProjectManager();
+ if (!prjMgr || !prjMgr->GetUI().GetNotebook())
+ {
+ CCLogger::Get()->DebugLog("CreateClassBrowser: ProjectManager not ready, deferring.");
+ return;
+ }
// make this a tab in projectmanager notebook
- m_ClassBrowser = new ClassBrowser(Manager::Get()->GetProjectManager()->GetUI().GetNotebook(), this);
- Manager::Get()->GetProjectManager()->GetUI().GetNotebook()->AddPage(m_ClassBrowser, _("Symbols"));
+ m_ClassBrowser = new ClassBrowser(prjMgr->GetUI().GetNotebook(), this);
+ prjMgr->GetUI().GetNotebook()->AddPage(m_ClassBrowser, _("Symbols"));
m_ClassBrowser->UpdateSash();
}
@@ -1053,7 +1060,8 @@
// TODO (Morten): ? what's bug? I test it, it's works well now.
- m_ClassBrowser->SetParser(m_Parser); // Also updates class browser
+ if (m_Parser)
+ m_ClassBrowser->SetParser(m_Parser); // Also updates class browser
TRACE(_T("ParseManager::CreateClassBrowser: Leave"));
}