diff --git a/Libraries/LibGUI/Variant.cpp b/Libraries/LibGUI/Variant.cpp index 3862870ddd6..bd732f01304 100644 --- a/Libraries/LibGUI/Variant.cpp +++ b/Libraries/LibGUI/Variant.cpp @@ -26,6 +26,7 @@ #include #include +#include #include namespace GUI { @@ -255,10 +256,8 @@ Variant& Variant::operator=(Variant&& other) { if (&other == this) return *this; - // FIXME: Move, not copy! clear(); - copy_from(other); - other.clear(); + move_from(AK::move(other)); return *this; } @@ -267,6 +266,14 @@ Variant::Variant(const Variant& other) copy_from(other); } +void Variant::move_from(Variant&& other) +{ + m_type = other.m_type; + m_value = other.m_value; + other.m_type = Type::Invalid; + other.m_value.as_string = nullptr; +} + void Variant::copy_from(const Variant& other) { ASSERT(!is_valid()); diff --git a/Libraries/LibGUI/Variant.h b/Libraries/LibGUI/Variant.h index 6e657e75f9d..a04f7b2e17c 100644 --- a/Libraries/LibGUI/Variant.h +++ b/Libraries/LibGUI/Variant.h @@ -250,6 +250,7 @@ public: private: void copy_from(const Variant&); + void move_from(Variant&&); struct RawPoint { int x;