private bool HandleSingleClick(InputEventArgs e, ModifierKeys modifiers) { // Don't do anything if there is no history if (_history.VisualComponent.TextView.TextBuffer.CurrentSnapshot.Length == 0) { _lastSelectedLineNumber = null; return(true); } var point = GetAdjustedPosition(e, _history.VisualComponent.TextView); var lineNumber = GetLineNumberUnderPoint(point); if (lineNumber == -1) { _lastSelectedLineNumber = null; return(false); } switch (modifiers) { case ModifierKeys.None: _history.ClearHistoryEntrySelection(); _history.SelectHistoryEntry(lineNumber); _lastSelectedLineNumber = lineNumber; return(false); case ModifierKeys.Control: _history.VisualComponent.TextView.Selection.Clear(); _history.ToggleHistoryEntrySelection(lineNumber); _lastSelectedLineNumber = lineNumber; return(true); case ModifierKeys.Shift: if (!_lastSelectedLineNumber.HasValue) { _history.ClearHistoryEntrySelection(); _history.SelectHistoryEntry(lineNumber); _lastSelectedLineNumber = lineNumber; return(false); } if (_history.HasSelectedEntries) { if (lineNumber > _lastSelectedLineNumber.Value) { _history.ClearHistoryEntrySelection(); _history.SelectHistoryEntries(Enumerable.Range(_lastSelectedLineNumber.Value, lineNumber - _lastSelectedLineNumber.Value + 1)); } else if (lineNumber < _lastSelectedLineNumber.Value) { _history.ClearHistoryEntrySelection(); _history.SelectHistoryEntries(Enumerable.Range(lineNumber, _lastSelectedLineNumber.Value - lineNumber + 1)); } return(true); } return(false); default: _lastSelectedLineNumber = null; return(false); } }