summaryrefslogtreecommitdiff
path: root/Libraries/LibGUI/GWidget.cpp
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-09-22 00:17:53 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-09-22 00:25:25 +0200
commitbc319d9e8873734bb8e8cea3d762d7fab2ded887 (patch)
treec8648b92fe32e6c48454a99356f7b3ca59b5e423 /Libraries/LibGUI/GWidget.cpp
parent0c72e0c09f085a371b0abdba172325e56b1e6a06 (diff)
downloadserenity-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 'Libraries/LibGUI/GWidget.cpp')
-rw-r--r--Libraries/LibGUI/GWidget.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/Libraries/LibGUI/GWidget.cpp b/Libraries/LibGUI/GWidget.cpp
index 66ff1eed53..1aa678c846 100644
--- a/Libraries/LibGUI/GWidget.cpp
+++ b/Libraries/LibGUI/GWidget.cpp
@@ -325,13 +325,13 @@ Rect GWidget::screen_relative_rect() const
GWidget* GWidget::child_at(const Point& point) const
{
for (int i = children().size() - 1; i >= 0; --i) {
- if (!is<GWidget>(*children()[i]))
+ if (!is<GWidget>(children()[i]))
continue;
- auto& child = to<GWidget>(*children()[i]);
+ auto& child = to<GWidget>(children()[i]);
if (!child.is_visible())
continue;
if (child.relative_rect().contains(point))
- return &child;
+ return const_cast<GWidget*>(&child);
}
return nullptr;
}
@@ -492,7 +492,7 @@ void GWidget::move_to_front()
parent->children().remove_first_matching([this](auto& entry) {
return entry == this;
});
- parent->children().append(this);
+ parent->children().append(*this);
parent->update();
}
@@ -506,7 +506,7 @@ void GWidget::move_to_back()
parent->children().remove_first_matching([this](auto& entry) {
return entry == this;
});
- parent->children().prepend(this);
+ parent->children().prepend(*this);
parent->update();
}
@@ -515,7 +515,7 @@ bool GWidget::is_frontmost() const
auto* parent = parent_widget();
if (!parent)
return true;
- return parent->children().last() == this;
+ return &parent->children().last() == this;
}
bool GWidget::is_backmost() const
@@ -523,7 +523,7 @@ bool GWidget::is_backmost() const
auto* parent = parent_widget();
if (!parent)
return true;
- return parent->children().first() == this;
+ return &parent->children().first() == this;
}
GAction* GWidget::action_for_key_event(const GKeyEvent& event)