aboutsummaryrefslogtreecommitdiff
path: root/src/c_fl_text_buffer.cpp
diff options
context:
space:
mode:
authorJedidiah Barber <contact@jedbarber.id.au>2024-10-13 03:33:38 +1300
committerJedidiah Barber <contact@jedbarber.id.au>2024-10-13 03:33:38 +1300
commitb4090a7acddf951088b75fcce0d6edb721bbbf45 (patch)
tree6770ea43f82e114c188538213f77e76b4eb5da10 /src/c_fl_text_buffer.cpp
parent87671a2f2423efacd0b0c4ad0c34c244680ef565 (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.cpp21
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;
+ }
}