Repository: microsoft/terminal
File: src/cascadia/TerminalControl/TermControl.cpp (C++)

Code before:

                ::Terminal::SelectionExpansionMode mode = ::Terminal::SelectionExpansionMode::Cell;
                if (multiClickMapper == 1)
                {
                    mode = ::Terminal::SelectionExpansionMode::Cell;
                }
                else if (multiClickMapper == 2)
                {
                    mode = ::Terminal::SelectionExpansionMode::Word;
                }
                else if (multiClickMapper == 3)
                {
                    mode = ::Terminal::SelectionExpansionMode::Line;
                }

                // Update the selection appropriately
                if (ctrlEnabled && multiClickMapper == 1 &&
                    !(_terminal->GetHyperlinkAtPosition(terminalPosition).empty()))
                {
                    _HyperlinkHandler(_terminal->GetHyperlinkAtPosition(terminalPosition));
                    args.Handled(true);
                }

                if (args.Handled())
                {
                    // We already handled the event by either sending it to the VT,
                    // or by handling hyper-link (or both)
                    return;
                }

                else if (shiftEnabled && _terminal->IsSelectionActive())
                {
                    // Shift+Click: only set expand on the "end" selection point
                    _terminal->SetSelectionEnd(terminalPosition, mode);
                    _selectionNeedsToBeCopied = true;
                }
                else if (mode == ::Terminal::SelectionExpansionMode::Cell && !shiftEnabled)
                {
                    // Single Click: reset the selection and begin a new one
                    _terminal->ClearSelection();
                    _singleClickTouchdownPos = cursorPosition;
                    _selectionNeedsToBeCopied = false; // there's no selection, so there's nothing to update
                }
                else
                {
                    // Multi-Click Selection: expand both "start" and "end" selection points
                    _terminal->MultiClickSelection(terminalPosition, mode);
                    _selectionNeedsToBeCopied = true;
                }

                _lastMouseClickTimestamp = point.Timestamp();

Review comment (suggestion):
```suggestion
                    // GH#9117: We already handled the event by either sending it to the VT,
```
nit: link the issue for easier tracking

Code after:
            else if (point.Properties().IsLeftButtonPressed())
            {
                // Update the selection appropriately
                // handle ALT key
                _terminal->SetBlockSelection(altEnabled);

                const auto clickCount = _NumberOfClicks(cursorPosition, point.Timestamp());

                // This formula enables the number of clicks to cycle properly between single-, double-, and triple-click.
                // To increase the number of acceptable click states, simply increment MAX_CLICK_COUNT and add another if-statement
                const unsigned int MAX_CLICK_COUNT = 3;
                const auto multiClickMapper = clickCount > MAX_CLICK_COUNT ? ((clickCount + MAX_CLICK_COUNT - 1) % MAX_CLICK_COUNT) + 1 : clickCount;

                ::Terminal::SelectionExpansionMode mode = ::Terminal::SelectionExpansionMode::Cell;
                if (multiClickMapper == 1)
                {
                    mode = ::Terminal::SelectionExpansionMode::Cell;
                }
                else if (multiClickMapper == 2)
                {
                    mode = ::Terminal::SelectionExpansionMode::Word;
                }
                else if (multiClickMapper == 3)
                {
                    mode = ::Terminal::SelectionExpansionMode::Line;
                }

                // Capture the position of the first click when no selection is active
                if (mode == ::Terminal::SelectionExpansionMode::Cell && !_terminal->IsSelectionActive())
                {
                    _singleClickTouchdownPos = cursorPosition;
                    _lastMouseClickPosNoSelection = cursorPosition;
                }

                // We reset the active selection if one of the conditions apply:
                // - shift is not held
                // - GH#9384: the position is the same as of the first click starting the selection
                // (we need to reset selection on double-click or triple-click, so it captures the word or the line,
                // rather than extending the selection)
                if (_terminal->IsSelectionActive() && (!shiftEnabled || _lastMouseClickPosNoSelection == cursorPosition))
                {
                    // Reset the selection
                    _terminal->ClearSelection();
                    _selectionNeedsToBeCopied = false; // there's no selection, so there's nothing to update
                }

                if (shiftEnabled)
                {
                    if (_terminal->IsSelectionActive())
                    {
                        // If there is a selection we extend it using the selection mode