     # If someone else already took this click, return.
     if state.consumedHitTest then return
 
+    # If it's not a left-click, pass.
+    if event.which isnt 1 then return
+
     # Otherwise, look for a socket that
     # the user has clicked
     mainPoint = @trackerPointToMain point

    @setFontSize_raw fontSize
    @resize()

  # MUTATION BUTTON SUPPORT
  # ================================

  class MutationButtonOperation extends UndoOperation
    constructor: (button) ->
      @button = button.clone()
      @location = button.getSerializedLocation()

    undo: (editor) ->
      end = start = editor.tree.getTokenAtLocation(@location)

      # We want to scan (n) tokens forward, where
      # (n) is the length of the expanded value
      # of this token.
      head = @button.expandValue.start.next
      until head is @button.expandValue.end
        head = head.next; end = end.next

      # Splice the original button in.
      start.prev.append(button = @button.clone()).append end

      return button

    redo: (editor) ->
      editor.tree.getTokenAtLocation(@location).expand()

  hook 'mousedown', 4, (point, event, state) ->
    if state.consumedHitTest then return

    mainPoint = @trackerPointToMain point

    head = @tree.start
    until head is @tree.end
      if head.type is 'mutationButton' and @view.getViewNodeFor(head).bounds[0].contains mainPoint
        @addMicroUndoOperation new MutationButtonOperation head
        head.expand() #MUTATION

        @redrawMain()
        state.consumedHitTest = true

        return

      head = head.next

  # LINE MARKING SUPPORT
  # ================================


  hook 'mousedown', 3, (point, event, state) ->
    if state.consumedHitTest then return

    # If it's not a left-click, pass.
    if event.which isnt 1 then return

    if @lassoSegment? and @hitTest(@trackerPointToMain(point), @lassoSegment)?
      @clickedBlock = @lassoSegment
      @clickedPoint = point
