Hello,
Not knowing where is the best place to post it, I did it here. (I know that partially concerns wxWidgets but I did not receive my wxWidgets account validation mail yet; so I post it here too)
The dev env I used:
1) MingW-W64 4.3.0 with gcc 6.3.0 and make 4.1
2) Code::Blocks version 16.01 from SVN repository (svn checkout https://svn.code.sf.net/p/codeblocks/code/trunk codeblocks-code)
3) wxWidgets 3.1.1 is the master branch of the git repo (git clone https://github.com/wxWidgets/wxWidgets.git)
wxWidgets was compiled with BUILD=debug and SHARED=1, NO monolithic. (then customized *31_64.cbp files for Code::Blocks + some other tuning to match my wxWidgets build)
First trouble occurs when I update the Code::Blocks repository from SVN. It seems that FortranProject has been updated. Indeed, parserf.cpp no more compiles correctlly; it complains that wxRE_ADVANCED, wxRE_ICASE and wxRE_NOSUB are not declared. To correct this I added #include <wx/regex.h>
Then, wxWidgets and Code::Blocks compiled correctly. But, when starting it, it fails after load. I can see the workspace but the application does not respond a while. After a moment, it crashes. After some attempts, I finally get it running by disabling the splashscreen with the adequate command line option.
Why does the app stopped working with the splashscreen ? I made some debug sessions to investigate. It results that MySpellingDialog.cpp use a wxTextCtrl with wxTE_RICH2 attributes. By removing this wxTE_RICH2, Code::Blocks does not hang anymore. OK, but that option is merely needed... I guess... So I reset it and look where the application received a SIGSEGV. To be brief, it seems that wxWidgets missed to test the fact that the wxTextCtrl is a rich edit with drag and drop enable when a non owned window is destroyed. Indeed I think the base class of wxTextCtrl is used (i.e. wxWindow) for the object dtor.
To palliate this problem, I modified src/msw/textctrl.cpp in wxWidgets by first defining the wxRICHTEXT_DEFAULT_DROPTARGET like this:
#if wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
// dummy value used for m_dropTarget, different from any valid pointer value
// (which are all even under Windows) and NULL
static wxDropTarget *
wxRICHTEXT_DEFAULT_DROPTARGET = reinterpret_cast<wxDropTarget *>(1);
#endif // wxUSE_DRAG_AND_DROP && wxUSE_RICHEDIT
and secondly update the wxWindowMSW::HandleDestroy to take this richedit fact like this
bool wxWindowMSW::HandleDestroy()
{
// delete our drop target if we've got one
#if wxUSE_DRAG_AND_DROP
if ( m_dropTarget != NULL
#if wxUSE_RICHEDIT
&& m_dropTarget != wxRICHTEXT_DEFAULT_DROPTARGET
#endif
)
{
m_dropTarget->Revoke(m_hWnd);
wxDELETE(m_dropTarget);
}
#endif // wxUSE_DRAG_AND_DROP
// WM_DESTROY handled
return true;
}
I do not know really know if this is the correct way but it works... at least for now. As I said: maybe this could help.
For the history, I mainly aim to be able to swap internal softwares from Windows to other OS if we plan to change it in the future. I try then to have a complete set of dev tools which I build and control myself (foolish, you said ? I totally agreed). Then I finally opted to use wxWidgets as GUI library (and wxFormBuilder). So, I wanted to used a cross-platform IDE that is based on wxWidgets too. I then chose Code:Blocks. All of them should run on a 64 bits architecture.