private <C> void fireEventToCell(Event event, String eventType, Element parentElem,
                                     final T rowValue, Context context, HasCell<T, C> column) {
        // Check if the cell consumes the event.
        Cell<C> cell = column.getCell();
        if (!cellConsumesEventType(cell, eventType)) {
            return;
        }

        C cellValue = column.getValue(rowValue);
        boolean cellWasEditing = cell.isEditing(context, parentElem, cellValue);
        if (column instanceof Column) {
            /*
             * If the HasCell is a Column, let it handle the event itself. This is
             * here for legacy support.
             */
            Column<T, C> col = (Column<T, C>) column;
            col.onBrowserEvent(context, parentElem, rowValue, event);
        } else {
            // Create a FieldUpdater.
            final FieldUpdater<T, C> fieldUpdater = column.getFieldUpdater();
            final int index = context.getIndex();
            ValueUpdater<C> valueUpdater = (fieldUpdater == null)
                    ? null
                    : new ValueUpdater<C>() {
                        @Override
                        public void update(C value) {
                            fieldUpdater.update(index, rowValue, value);
                        }
                    };

            // Fire the event to the cell.
            cell.onBrowserEvent(context, parentElem, cellValue, event, valueUpdater);
        }

        // Reset focus if needed.
        cellIsEditing = cell.isEditing(context, parentElem, cellValue);
        if (cellWasEditing && !cellIsEditing) {
            CellBasedWidgetImpl.get().resetFocus(new Scheduler.ScheduledCommand() {
                @Override
                public void execute() {
                    setFocus(true);
                }
            });
        }
    }
Fire an event to the Cell within the specified {@link TableCellElement}.
stroom-core-client-widget/src/main/java/com/google/gwt/user/cellview/client/AbstractCellTable.java