From 524da0ad01ef6b76669fcb69539b907d315e8e87 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 11 Nov 2019 19:12:32 +0100 Subject: [PATCH] LibGUI: Add "Vector GWidget::child_widgets()" This is quite inefficient since it constructs a new Vector each time. --- Libraries/LibGUI/GWidget.cpp | 12 ++++++++++++ Libraries/LibGUI/GWidget.h | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Libraries/LibGUI/GWidget.cpp b/Libraries/LibGUI/GWidget.cpp index a7088352cd..1859d84ecd 100644 --- a/Libraries/LibGUI/GWidget.cpp +++ b/Libraries/LibGUI/GWidget.cpp @@ -675,3 +675,15 @@ void GWidget::save_to(AK::JsonObject& json) json.set("size_policy", String::format("[%s,%s]", to_string(horizontal_size_policy()), to_string(vertical_size_policy()))); CObject::save_to(json); } + +Vector GWidget::child_widgets() const +{ + Vector widgets; + widgets.ensure_capacity(children().size()); + for (auto& child : const_cast(this)->children()) { + if (child.is_widget()) + widgets.append(static_cast(&child)); + } + return widgets; +} + diff --git a/Libraries/LibGUI/GWidget.h b/Libraries/LibGUI/GWidget.h index 870dc3dedb..f339ff03d8 100644 --- a/Libraries/LibGUI/GWidget.h +++ b/Libraries/LibGUI/GWidget.h @@ -124,7 +124,8 @@ public: bool is_focused() const; void set_focus(bool); - enum class ShouldRespectGreediness { No = 0, Yes }; + enum class ShouldRespectGreediness { No = 0, + Yes }; struct HitTestResult { GWidget* widget { nullptr }; Point local_position; @@ -220,6 +221,8 @@ public: }); } + Vector child_widgets() const; + virtual bool is_radio_button() const { return false; } virtual bool is_abstract_button() const { return false; }