From 0f35912bd789e37b8e7193ffc88827fd1f2fcfec Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Sun, 11 Jul 2021 21:46:34 +0200 Subject: TableView: Do not select input on keydown In the Spreadsheet app, selecting a cell and typing something (like "1") would create an empty editing delegate, set "1" as its value and immediately select the entire contents of the text box. If your goal was to type "123", that "1" was selected and will be replaced by "23". This changes the behavior of TableView to not select the editing delegate's contents if its creation was a result of a keydown event. --- Userland/Libraries/LibGUI/ModelEditingDelegate.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'Userland/Libraries/LibGUI/ModelEditingDelegate.h') diff --git a/Userland/Libraries/LibGUI/ModelEditingDelegate.h b/Userland/Libraries/LibGUI/ModelEditingDelegate.h index 2678f25cfd..a910b67b05 100644 --- a/Userland/Libraries/LibGUI/ModelEditingDelegate.h +++ b/Userland/Libraries/LibGUI/ModelEditingDelegate.h @@ -14,6 +14,11 @@ namespace GUI { class ModelEditingDelegate { public: + enum SelectionBehavior { + DoNotSelect, + SelectAll, + }; + virtual ~ModelEditingDelegate() { } void bind(Model& model, const ModelIndex& index) @@ -32,7 +37,7 @@ public: Function on_rollback; virtual Variant value() const = 0; - virtual void set_value(const Variant&) = 0; + virtual void set_value(Variant const&, SelectionBehavior selection_behavior = SelectionBehavior::SelectAll) = 0; virtual void will_begin_editing() { } @@ -76,11 +81,12 @@ public: return textbox; } virtual Variant value() const override { return static_cast(widget())->text(); } - virtual void set_value(const Variant& value) override + virtual void set_value(Variant const& value, SelectionBehavior selection_behavior) override { auto& textbox = static_cast(*widget()); textbox.set_text(value.to_string()); - textbox.select_all(); + if (selection_behavior == SelectionBehavior::SelectAll) + textbox.select_all(); } }; -- cgit v1.2.3