From 1d6813b918b71c9f2d6400b4ae46993d98277d00 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 19 Mar 2016 16:26:18 +0100 Subject: [PATCH] Handle empty text when double-clicking TextBox. Fixes #458 --- src/Perspex.Controls/TextBox.cs | 35 ++++++++++++----------- src/Perspex.Controls/Utils/StringUtils.cs | 5 ++++ 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/Perspex.Controls/TextBox.cs b/src/Perspex.Controls/TextBox.cs index 72f32aff1c..e8f150851a 100644 --- a/src/Perspex.Controls/TextBox.cs +++ b/src/Perspex.Controls/TextBox.cs @@ -373,23 +373,26 @@ namespace Perspex.Controls var index = CaretIndex = _presenter.GetCaretIndex(point); var text = Text; - switch (e.ClickCount) + if (text != null) { - case 1: - SelectionStart = SelectionEnd = index; - break; - case 2: - if (!StringUtils.IsStartOfWord(text, index)) - { - SelectionStart = StringUtils.PreviousWord(text, index, false); - } - - SelectionEnd = StringUtils.NextWord(text, index, false); - break; - case 3: - SelectionStart = 0; - SelectionEnd = text.Length; - break; + switch (e.ClickCount) + { + case 1: + SelectionStart = SelectionEnd = index; + break; + case 2: + if (!StringUtils.IsStartOfWord(text, index)) + { + SelectionStart = StringUtils.PreviousWord(text, index, false); + } + + SelectionEnd = StringUtils.NextWord(text, index, false); + break; + case 3: + SelectionStart = 0; + SelectionEnd = text.Length; + break; + } } e.Device.Capture(_presenter); diff --git a/src/Perspex.Controls/Utils/StringUtils.cs b/src/Perspex.Controls/Utils/StringUtils.cs index 6c69085874..e368a5f4b9 100644 --- a/src/Perspex.Controls/Utils/StringUtils.cs +++ b/src/Perspex.Controls/Utils/StringUtils.cs @@ -21,6 +21,11 @@ namespace Perspex.Controls.Utils public static bool IsStartOfWord(string text, int index) { + if (index >= text.Length) + { + return false; + } + // A 'word' starts with an AlphaNumeric or some punctuation symbols immediately // preceeded by lwsp. if (index > 0 && !char.IsWhiteSpace(text[index - 1]))