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/DisplayProperties/DisplayProperties.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'Applications/DisplayProperties/DisplayProperties.cpp') diff --git a/Applications/DisplayProperties/DisplayProperties.cpp b/Applications/DisplayProperties/DisplayProperties.cpp index fcac85dce1..92f155b46f 100644 --- a/Applications/DisplayProperties/DisplayProperties.cpp +++ b/Applications/DisplayProperties/DisplayProperties.cpp @@ -97,7 +97,7 @@ void DisplayPropertiesWidget::create_frame() auto background_splitter = GSplitter::construct(Orientation::Vertical, nullptr); tab_widget->add_widget("Wallpaper", background_splitter); - auto background_content = GWidget::construct(background_splitter); + auto background_content = GWidget::construct(background_splitter.ptr()); background_content->set_layout(make(Orientation::Vertical)); background_content->layout()->set_margins({ 4, 4, 4, 4 }); @@ -120,7 +120,7 @@ void DisplayPropertiesWidget::create_frame() auto settings_splitter = GSplitter::construct(Orientation::Vertical, nullptr); tab_widget->add_widget("Settings", settings_splitter); - auto settings_content = GWidget::construct(settings_splitter); + auto settings_content = GWidget::construct(settings_splitter.ptr()); settings_content->set_layout(make(Orientation::Vertical)); settings_content->layout()->set_margins({ 4, 4, 4, 4 }); @@ -135,7 +135,7 @@ void DisplayPropertiesWidget::create_frame() settings_content->layout()->add_spacer(); // Add the apply and cancel buttons - auto bottom_widget = GWidget::construct(m_root_widget); + auto bottom_widget = GWidget::construct(m_root_widget.ptr()); bottom_widget->set_layout(make(Orientation::Horizontal)); bottom_widget->layout()->add_spacer(); bottom_widget->set_size_policy(Orientation::Vertical, SizePolicy::Fixed); -- cgit v1.2.3