From bc319d9e8873734bb8e8cea3d762d7fab2ded887 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 22 Sep 2019 00:17:53 +0200 Subject: LibCore: Make CObject reference-counted Okay, I've spent a whole day on this now, and it finally kinda works! With this patch, CObject and all of its derived classes are reference counted instead of tree-owned. The previous, Qt-like model was nice and familiar, but ultimately also outdated and difficult to reason about. CObject-derived types should now be stored in RefPtr/NonnullRefPtr and each class can be constructed using the forwarding construct() helper: auto widget = GWidget::construct(parent_widget); Note that construct() simply forwards all arguments to an existing constructor. It is inserted into each class by the C_OBJECT macro, see CObject.h to understand how that works. CObject::delete_later() disappears in this patch, as there is no longer a single logical owner of a CObject. --- Applications/Welcome/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Applications/Welcome') diff --git a/Applications/Welcome/main.cpp b/Applications/Welcome/main.cpp index 5f10cbfea8..f35a841fa2 100644 --- a/Applications/Welcome/main.cpp +++ b/Applications/Welcome/main.cpp @@ -83,7 +83,7 @@ int main(int argc, char** argv) // header // - auto header = GLabel::construct(background); + auto header = GLabel::construct(background.ptr()); header->set_font(Font::default_bold_font()); header->set_text("Welcome to Serenity"); header->set_text_alignment(TextAlignment::CenterLeft); @@ -94,13 +94,13 @@ int main(int argc, char** argv) // main section // - auto main_section = GWidget::construct(background); + auto main_section = GWidget::construct(background.ptr()); main_section->set_layout(make(Orientation::Horizontal)); main_section->layout()->set_margins({ 0, 0, 0, 0 }); main_section->layout()->set_spacing(8); main_section->set_size_policy(SizePolicy::Fill, SizePolicy::Fill); - auto menu = GWidget::construct(main_section); + auto menu = GWidget::construct(main_section.ptr()); menu->set_layout(make(Orientation::Vertical)); menu->layout()->set_margins({ 0, 0, 0, 0 }); menu->layout()->set_spacing(8); @@ -111,7 +111,7 @@ int main(int argc, char** argv) stack->set_size_policy(SizePolicy::Fill, SizePolicy::Fill); for (auto& page : pages) { - auto content = GWidget::construct(stack); + auto content = GWidget::construct(stack.ptr()); content->set_layout(make(Orientation::Vertical)); content->layout()->set_margins({ 0, 0, 0, 0 }); content->layout()->set_spacing(8); -- cgit v1.2.3