diff options
author | Jedidiah Barber <contact@jedbarber.id.au> | 2024-10-13 03:33:38 +1300 |
---|---|---|
committer | Jedidiah Barber <contact@jedbarber.id.au> | 2024-10-13 03:33:38 +1300 |
commit | b4090a7acddf951088b75fcce0d6edb721bbbf45 (patch) | |
tree | 6770ea43f82e114c188538213f77e76b4eb5da10 /src/c_fl_text_buffer.cpp | |
parent | 87671a2f2423efacd0b0c4ad0c34c244680ef565 (diff) |
Fixed bug with Text_Buffers not being deallocated correctly if declared after the Text_Display they are attached to
Diffstat (limited to 'src/c_fl_text_buffer.cpp')
-rw-r--r-- | src/c_fl_text_buffer.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/c_fl_text_buffer.cpp b/src/c_fl_text_buffer.cpp index 2df65f6..4a681e8 100644 --- a/src/c_fl_text_buffer.cpp +++ b/src/c_fl_text_buffer.cpp @@ -6,13 +6,30 @@ +class My_Text_Buffer : public Fl_Text_Buffer { + public: + using Fl_Text_Buffer::Fl_Text_Buffer; + int reference_count = 0; +}; + + + + TEXTBUFFER new_fl_text_buffer(int rs, int pgs) { - Fl_Text_Buffer *tb = new Fl_Text_Buffer(rs, pgs); + My_Text_Buffer *tb = new My_Text_Buffer(rs, pgs); return tb; } +void upref_fl_text_buffer(TEXTBUFFER tb) { + reinterpret_cast<My_Text_Buffer*>(tb)->reference_count += 1; +} + void free_fl_text_buffer(TEXTBUFFER tb) { - delete reinterpret_cast<Fl_Text_Buffer*>(tb); + if (reinterpret_cast<My_Text_Buffer*>(tb)->reference_count <= 0) { + delete reinterpret_cast<My_Text_Buffer*>(tb); + } else { + reinterpret_cast<My_Text_Buffer*>(tb)->reference_count -= 1; + } } |