diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-09-22 00:17:53 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-09-22 00:25:25 +0200 |
commit | bc319d9e8873734bb8e8cea3d762d7fab2ded887 (patch) | |
tree | c8648b92fe32e6c48454a99356f7b3ca59b5e423 /Applications/Welcome | |
parent | 0c72e0c09f085a371b0abdba172325e56b1e6a06 (diff) | |
download | serenity-bc319d9e8873734bb8e8cea3d762d7fab2ded887.zip |
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.
Diffstat (limited to 'Applications/Welcome')
-rw-r--r-- | Applications/Welcome/main.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
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<GBoxLayout>(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<GBoxLayout>(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<GBoxLayout>(Orientation::Vertical)); content->layout()->set_margins({ 0, 0, 0, 0 }); content->layout()->set_spacing(8); |