         
     }
     
+    private function adjustSelection(event:MouseEvent, rowIndex:int, columnIndex:int):void
+    {
+        if (event.ctrlKey)
+        {
+            // ctrl-click toggles the selection and updates caret and anchor.
+            if (!toggleSelection(rowIndex, columnIndex))
+                return;
+
+            grid.anchorRowIndex = rowIndex;
+            grid.anchorColumnIndex = columnIndex;
+        }
+        else if (event.shiftKey)
+        {
+            // shift-click extends the selection and updates the caret.
+            if  (grid.selectionMode == GridSelectionMode.MULTIPLE_ROWS || grid.selectionMode == GridSelectionMode.MULTIPLE_CELLS)
+                extendSelection(rowIndex, columnIndex);
+        }
+        else
+        {
+            // click sets the selection and updates the caret and anchor positions.
+            setSelectionAnchorCaret(rowIndex, columnIndex);
+        }
+    }
+
     /**
      *  @private
      *  Redispatch the grid's "caretChange" event.

        }
    }
    
    private function removeMouseHandlersForDragStart(event:GridEvent):void
    {
        // If dragging failed, but we had a pending selection, commit it here
        if (pendingSelectionOnMouseUp && !DragManager.isDragging)
        {
            const rowIndex:int = mouseDownRowIndex;
            const columnIndex:int = mouseDownColumnIndex;
            
            if (event.ctrlKey)
            {
                // ctrl-click toggles the selection and updates caret and anchor.
                if (!toggleSelection(rowIndex, columnIndex))
                    return;
                
                grid.anchorRowIndex = rowIndex;
                grid.anchorColumnIndex = columnIndex;
            }
            else if (event.shiftKey)
            {
                // shift-click extends the selection and updates the caret.
                if  (grid.selectionMode == GridSelectionMode.MULTIPLE_ROWS || 
                    grid.selectionMode == GridSelectionMode.MULTIPLE_CELLS)
                {    
                    if (!extendSelection(rowIndex, columnIndex))
                        return;
                }
            }
            else
            {
                // click sets the selection and updates the caret and anchor 
                // positions.
                setSelectionAnchorCaret(rowIndex, columnIndex);
            }           
        }
        
        // Always clean up the flag, even if currently dragging.
        pendingSelectionOnMouseUp = false;

     *
     *  @param event The DragEvent object.
     *  
     *  @see spark.layouts.supportClasses.LayoutBase#showDropIndicator
     *  @see spark.layouts.supportClasses.LayoutBase#hideDropIndicator
     *  
     *  @langversion 3.0
     *  @playerversion Flash 11
