Code::Blocks Forums

User forums => Help => Topic started by: dthu on August 09, 2026, 08:34:46 pm

Title: The tabs close when you save a file.
Post by: dthu on August 09, 2026, 08:34:46 pm
I had a project started with the source code located in its default position. I decided to move the code. In C::B, I removed all the files and then added them to their new location. I don't know if it's related, but since then, the program closes the tabs associated with the project files every time I save or compile. I realized that the .layout file is different from other projects, so I'm placing it here.

I've experienced this problem in both the stable version and r13923 on Linux.

Code
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
</CodeBlocks_layout_file>
Title: Re: The tabs close when you save a file.
Post by: Miguel Gimenez on August 10, 2026, 11:05:37 am
Delete the .layout file, it will be recreated.
Title: Re: The tabs close when you save a file.
Post by: dthu on August 11, 2026, 04:36:58 am
After deleting the file, the problem persists. An identical file was generated.
Title: Re: The tabs close when you save a file.
Post by: christo on August 11, 2026, 05:17:13 am
Is it possible to share your .cbp file also?
Title: Re: The tabs close when you save a file.
Post by: dthu on August 11, 2026, 05:24:19 am
I traced the behavior of C:B but I got lost, I'll try again later.

Code
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="ajedrez4" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/ajedrez4" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Option use_console_runner="0" />
<Option projectLinkerOptionsRelation="2" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/ajedrez4" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="0" />
<Option compiler="gcc" />
<Option projectLinkerOptionsRelation="2" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-pedantic" />
<Add option="-Wextra" />
<Add option="-Wall" />
<Add option="-std=c++23" />
<Add option="`wx-config --cflags`" />
<Add option="-Werror" />
</Compiler>
<Linker>
<Add option="`wx-config --libs`" />
<Add library="wx_gtk3u_richtext-3.3" />
</Linker>
<UnitsGlob directory="../../../../../4chess-viewer/src" wildcard="" recursive="0" id="2701167546" addToProject="1">
<Option target="Debug" />
<Option target="Release" />
</UnitsGlob>
<Unit filename="../../../../../4chess-viewer/src/CBJugador.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/CBPagina.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/CBTurn.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessBoard.cpp">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessBoard.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessBook.cpp">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessBook.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessFiles.cpp">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessFiles.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessFrame.cpp">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessFrame.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessNotation.cpp">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessNotation.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessParameters.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ChessStyleBoard.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/Common.h">
<Option glob="2701167546" />
</Unit>
<Unit filename="../../../../../4chess-viewer/src/ajedrez4App.cpp">
<Option glob="2701167546" />
</Unit>
<Extensions>
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
Title: Re: The tabs close when you save a file.
Post by: christo on August 11, 2026, 08:34:14 pm
I could reproduce the issue. Editor is closed by below call trace. Looks like it is caused by Glob feature. I'm not much familiar with that feature. When I remove all the glob related data from the cbp manually, issue was not seen.

Code
#0  cbEditor::~cbEditor (this=0x452eda0) at cbeditor.cpp:843
#1  0x00007ffff63a86df in wxWindowBase::Destroy (this=0x452eda0) at ../src/common/wincmn.cpp:570
#2  0x00007ffff626634d in wxBookCtrlBase::DeletePage (this=0x1251170, nPage=37) at ../src/common/bookctrl.cpp:412
#3  0x00007ffff7771d65 in cbAuiNotebook::DeletePage (this=0x1251170, page=37) at cbauibook.cpp:475
#4  0x00007ffff7878992 in EditorManager::Close (this=0x11fb930, editor=0x452eda0, dontsave=false) at editormanager.cpp:758
#5  0x00007ffff78788fd in EditorManager::Close (this=0x11fb930, filename=..., dontsave=false) at editormanager.cpp:745
#6  0x00007ffff77b3cad in cbProject::RemoveFile (this=0x30ddcf0, pf=0x30ee360) at cbproject.cpp:1016
#7  0x00007ffff7916c7b in ProjectLoader::UpdateGlob (this=0x7fffffffd390, glob=...) at projectloader.cpp:1143

Title: Re: The tabs close when you save a file.
Post by: blauzahn on August 12, 2026, 06:43:09 am
A quick glance into projectloader.cpp function UpdateGlob shows a range for-loop with a temporary a few lines above line 1143:

Code
// First search for valid project files (glob id) and also for project files we have to remove
for (ProjectFile* file : m_pProject->GetFilesList())

This has been fixed in C++23 (see: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2644r1.pdf).

In the meantime I recommend to put the file list into a local variable like that:

Code
// First search for valid project files (glob id) and also for project files we have to remove
const auto& files = m_pProject->GetFilesList();
for (ProjectFile* file : files)

It may not be the reason for this issue but should be fixed anyway.
Title: Re: The tabs close when you save a file.
Post by: christo on August 12, 2026, 08:21:36 pm
Issue is due to an extra file separator added in calculating relative path. This causes false failure  on checking if file is in glob list. And it results in editor being closed.

Fix added in svn r13949 (https://sourceforge.net/p/codeblocks/code/13949/)
Title: Re: The tabs close when you save a file.
Post by: killerbot on August 12, 2026, 11:05:56 pm
I originally wrote the glob feature, and then somebody worked on it, to provide a UI, and some other features.
Since that day, it has been driving me crazy, what I suffered from was, when I edited such opened file, and saved it, it always jumped to the start of the file, and the close thing I might have suffered from that too.

So nice to see, there is a fix. I will try to check if in my projects this is solved too.

I started ditching the glob feature use due to that regression, since I don't have time myself to go study what happened to the original feature.
Title: Re: The tabs close when you save a file.
Post by: dthu on August 14, 2026, 01:48:17 am
Thanks, no problem anymore.
Title: Re: The tabs close when you save a file.
Post by: Miguel Gimenez on August 17, 2026, 01:38:39 pm
Workaround for broken range-for added in r13956 (https://sourceforge.net/p/codeblocks/code/13956/), thanks Blauzahn.