diff --git a/Libraries/LibGUI/AbstractView.cpp b/Libraries/LibGUI/AbstractView.cpp index 3c8e455cb2..db2146befd 100644 --- a/Libraries/LibGUI/AbstractView.cpp +++ b/Libraries/LibGUI/AbstractView.cpp @@ -147,6 +147,10 @@ void AbstractView::begin_editing(const ModelIndex& index) model()->set_data(m_edit_index, m_editing_delegate->value()); stop_editing(); }; + m_editing_delegate->on_rollback = [this] { + ASSERT(model()); + stop_editing(); + }; } void AbstractView::stop_editing() diff --git a/Libraries/LibGUI/ModelEditingDelegate.h b/Libraries/LibGUI/ModelEditingDelegate.h index 4d270f64a9..91904ef4bc 100644 --- a/Libraries/LibGUI/ModelEditingDelegate.h +++ b/Libraries/LibGUI/ModelEditingDelegate.h @@ -49,6 +49,7 @@ public: const Widget* widget() const { return m_widget; } Function on_commit; + Function on_rollback; virtual Variant value() const = 0; virtual void set_value(const Variant&) = 0; @@ -64,6 +65,11 @@ protected: if (on_commit) on_commit(); } + void rollback() + { + if (on_rollback) + on_rollback(); + } const ModelIndex& index() const { return m_index; } @@ -84,6 +90,9 @@ public: textbox->on_return_pressed = [this] { commit(); }; + textbox->on_escape_pressed = [this] { + rollback(); + }; return textbox; } virtual Variant value() const override { return static_cast(widget())->text(); }